blob: 3babbed26090f09d08ddf72e2e807734f349b62a [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05302 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
88#define IS_WDI_STATUS_FAILURE(status) \
89 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070090#define CONVERT_WDI2VOS_STATUS(x) \
91 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
92
93/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070094#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define WDA_GET_BA_TXFLAG(a, b, c) \
97 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
98
99#define WDA_SET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
101
102#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
105 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700106/* timer related Macros */
107#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
108 tx_timer_create(a, b, c, d, e, f, g)
109#define WDA_START_TIMER(a) tx_timer_activate(a)
110#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
111#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700112#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113
114#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
115 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800120#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700121
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700122#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700125#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
126 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
127 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
128
129#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
130#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800131#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
132
Jeff Johnson295189b2012-06-20 16:38:30 -0700133/* extern declarations */
134extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700135extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
136
Jeff Johnson295189b2012-06-20 16:38:30 -0700137/* forward declarations */
138void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
139 void *pBodyptr, tANI_U32 bodyVal) ;
140VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
141 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700142VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
143VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
144
145extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
146 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530147void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700148void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
149 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
150void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
151 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
152void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
153 void* pUserData ) ;
154static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
155static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
156void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800157void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700158void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700159#ifdef WLAN_FEATURE_VOWIFI_11R
160VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
161#endif /* WLAN_FEATURE_VOWIFI_11R */
162
Jeff Johnson295189b2012-06-20 16:38:30 -0700163void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
164void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
165VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef FEATURE_WLAN_SCAN_PNO
167static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
168static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
169static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
170#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700171#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700172VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700173void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
174void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
175void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
176#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700177#ifdef WLAN_FEATURE_PACKET_FILTERING
178static VOS_STATUS WDA_Process8023MulticastListReq (
179 tWDA_CbContext *pWDA,
180 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
181 );
182static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
183 tWDA_CbContext *pWDA,
184 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
185 );
186static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
187 tWDA_CbContext *pWDA,
188 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
189 );
190static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
191 tWDA_CbContext *pWDA,
192 tSirRcvFltPktClearParam *pRcvFltPktClearParam
193 );
194#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700195VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700196static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
197 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
199 v_U8_t *pDefaultKeyId,
200 v_U8_t *pNumKeys,
201 WDI_KeysType *pWdiKeys );
202
203#ifdef WLAN_FEATURE_GTK_OFFLOAD
204static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
205static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
206#endif // WLAN_FEATURE_GTK_OFFLOAD
207
c_hpothu92367912014-05-01 15:18:17 +0530208v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
209 tSirBcnMissRateReq *pData);
210
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530222
Dino Mycle41bdc942014-06-10 11:30:24 +0530223#ifdef WLAN_FEATURE_EXTSCAN
224VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
225 tSirEXTScanStartReqParams *wdaRequest);
226VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
227 tSirEXTScanStopReqParams *wdaRequest);
228VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
229 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
230VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
231 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
232VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
233 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
234VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
235 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
236VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
237 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
239 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
240#endif /* WLAN_FEATURE_EXTSCAN */
241
Sunil Duttbd736ed2014-05-26 21:19:41 +0530242#ifdef WLAN_FEATURE_LINK_LAYER_STATS
243VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
244 tSirLLStatsSetReq *wdaRequest);
245
246VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsGetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
250 tSirLLStatsClearReq *wdaRequest);
251#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530252
253v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
254 tSirFWStatsGetReq *wdaRequest);
255
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530256VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
257 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530258VOS_STATUS
259WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
260 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530261
Srinivas Dasari32a79262015-02-19 13:04:49 +0530262
Katya Nigamf0511f62015-05-05 16:40:57 +0530263VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
264VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530265/*
266 * FUNCTION: WDA_ProcessNanRequest
267 * Process NAN request
268 */
269VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
270 tNanRequest *wdaRequest)
271{
272 WDI_Status status = WDI_STATUS_SUCCESS;
273 tWDA_ReqParams *pWdaParams;
274 WDI_NanRequestType *wdiRequest = NULL;
275 size_t wdiReqLength = sizeof(WDI_NanRequestType)
276 - sizeof(wdiRequest->request_data)
277 + wdaRequest->request_data_len;
278
279 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
280
281 if (NULL == wdiRequest)
282 {
283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
284 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
285 wdiReqLength);
286 vos_mem_free(wdaRequest);
287 return VOS_STATUS_E_NOMEM;
288 }
289
290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
291 "WDA: Process Nan Request length: %zu", wdiReqLength);
292
293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
294 if (NULL == pWdaParams)
295 {
296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
297 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
298 VOS_ASSERT(0);
299 vos_mem_free(wdaRequest);
300 vos_mem_free(wdiRequest);
301 return VOS_STATUS_E_NOMEM;
302 }
303
304 wdiRequest->request_data_len = wdaRequest->request_data_len;
305
306 vos_mem_copy( wdiRequest->request_data,
307 wdaRequest->request_data,
308 wdaRequest->request_data_len);
309
310 vos_mem_free(wdaRequest);
311
312 pWdaParams->pWdaContext = pWDA;
313 pWdaParams->wdaMsgParam = NULL;
314 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
315
316 status = WDI_NanRequest(wdiRequest, pWdaParams);
317
318 if (IS_WDI_STATUS_FAILURE(status))
319 {
320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
321 "Failure to request. Free all the memory " );
322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
323 vos_mem_free(pWdaParams);
324 }
325
326 return CONVERT_WDI2VOS_STATUS(status) ;
327}
328
329
330
Jeff Johnson295189b2012-06-20 16:38:30 -0700331/*
332 * FUNCTION: WDA_open
333 * Allocate the WDA context
334 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530335VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 tMacOpenParameters *pMacParams )
337{
338 tWDA_CbContext *wdaContext;
339 VOS_STATUS status;
340 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530342 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
344 if(!VOS_IS_STATUS_SUCCESS(status))
345 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
347 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return VOS_STATUS_E_NOMEM;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 /*__asm int 3;*/
351 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
352
353 /* Initialize data structures */
354 wdaContext->pVosContext = pVosContext;
355 wdaContext->wdaState = WDA_INIT_STATE;
356 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
357
358 /* Initialize WDA-WDI synchronization event */
359 status = vos_event_init(&wdaContext->wdaWdiEvent);
360 if(!VOS_IS_STATUS_SUCCESS(status))
361 {
362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800363 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800364 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700366 /* Init Frame transfer event */
367 status = vos_event_init(&wdaContext->txFrameEvent);
368 if(!VOS_IS_STATUS_SUCCESS(status))
369 {
370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800371 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800372 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700373 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 status = vos_event_init(&wdaContext->suspendDataTxEvent);
375 if(!VOS_IS_STATUS_SUCCESS(status))
376 {
377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800378 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800379 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
382 if(!VOS_IS_STATUS_SUCCESS(status))
383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800385 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800386 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530390 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 &wdiDevCapability, pMacParams->driverType))
392 {
393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
394 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800395 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 }
397 else
398 {
399 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
400 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
401 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 /* update max STA in WDA used for BA */
403 wdaContext->wdaMaxSta = pMacParams->maxStation;
404 /* store the frameTransRequired flag in wdaContext, to send this to HAL
405 * in WDA_Start
406 */
407 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
408 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800410
411error:
412 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
413 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700414}
415
Jeff Johnson295189b2012-06-20 16:38:30 -0700416/*
417 * FUNCTION: WDA_preStart
418 * Trigger DAL-AL to start CFG download
419 */
420VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
421{
422 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
423 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 /*
425 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
426 */
427 wdaMsg.type = WNI_CFG_DNLD_REQ ;
428 wdaMsg.bodyptr = NULL;
429 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* post the message.. */
431 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
432 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
433 {
434 vosStatus = VOS_STATUS_E_BADMSG;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return( vosStatus );
437}
Jeff Johnson295189b2012-06-20 16:38:30 -0700438/*
439 * FUNCTION: WDA_wdiStartCallback
440 * Once WDI_Start is finished, WDI start callback will be called by WDI
441 * to indicate completion of WDI_Start.
442 */
443void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
444 void *pVosContext)
445{
446 tWDA_CbContext *wdaContext;
447 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 if (NULL == pVosContext)
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700451 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 return;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
455 if (NULL == wdaContext)
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 return;
460 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 wdaContext->wdaState = WDA_START_STATE;
469 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* extract and save version information from the Start Response */
471 wdaContext->wcnssWlanCompiledVersion.major =
472 wdiRspParams->wlanCompiledVersion.major;
473 wdaContext->wcnssWlanCompiledVersion.minor =
474 wdiRspParams->wlanCompiledVersion.minor;
475 wdaContext->wcnssWlanCompiledVersion.version =
476 wdiRspParams->wlanCompiledVersion.version;
477 wdaContext->wcnssWlanCompiledVersion.revision =
478 wdiRspParams->wlanCompiledVersion.revision;
479 wdaContext->wcnssWlanReportedVersion.major =
480 wdiRspParams->wlanReportedVersion.major;
481 wdaContext->wcnssWlanReportedVersion.minor =
482 wdiRspParams->wlanReportedVersion.minor;
483 wdaContext->wcnssWlanReportedVersion.version =
484 wdiRspParams->wlanReportedVersion.version;
485 wdaContext->wcnssWlanReportedVersion.revision =
486 wdiRspParams->wlanReportedVersion.revision;
487 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
488 wdiRspParams->wcnssSoftwareVersion,
489 sizeof(wdaContext->wcnssSoftwareVersionString));
490 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
491 wdiRspParams->wcnssHardwareVersion,
492 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 /* Notify WDA_start that WDI_Start has completed */
494 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700495 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 {
497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700498 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_start
505 * Prepare TLV configuration and call WDI_Start.
506 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700507VOS_STATUS WDA_start(v_PVOID_t pVosContext)
508{
509 tWDA_CbContext *wdaContext;
510 VOS_STATUS status;
511 WDI_Status wdiStatus;
512 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 if (NULL == pVosContext)
514 {
515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700516 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 return VOS_STATUS_E_FAILURE;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
520 if (NULL == wdaContext)
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 return VOS_STATUS_E_FAILURE;
525 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* Non-FTM mode, WDA status for START must be INIT
527 * FTM mode, WDA Status for START can be INIT or STOP */
528 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
529 (WDA_STOP_STATE != wdaContext->wdaState) )
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
532 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700533 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 return VOS_STATUS_E_FAILURE;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 /* initialize the wdiStartParam. Note that we can create this on
537 the stack since we won't exit until WDI_Start() completes or
538 times out */
539 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 /* prepare the config TLV for the WDI */
542 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
543 if ( !VOS_IS_STATUS_SUCCESS(status) )
544 {
545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700546 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 return VOS_STATUS_E_FAILURE;
548 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* note from here onwards if an error occurs we must
550 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
552 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
553 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* initialize the WDA-WDI synchronization event */
555 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 /* call WDI start */
557 wdiStatus = WDI_Start(&wdiStartParam,
558 (WDI_StartRspCb)WDA_wdiStartCallback,
559 (v_VOID_t *)pVosContext);
560 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 vos_mem_free(wdiStartParam.pConfigBuffer);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 /* wait for WDI start to invoke our callback */
568 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
569 WDA_WDI_START_TIMEOUT );
570 if ( !VOS_IS_STATUS_SUCCESS(status) )
571 {
572 if ( VOS_STATUS_E_TIMEOUT == status )
573 {
574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700575 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 }
577 else
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
580 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700581 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 }
583 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530584 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* we no longer need the config TLV */
588 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* if we are not in the START state then WDI_Start() failed */
590 if (WDA_START_STATE != wdaContext->wdaState)
591 {
592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700593 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 return VOS_STATUS_E_FAILURE;
595 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 /* FTM mode does not need to monitor BA activity */
597 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
598 {
599 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800600 if(VOS_STATUS_SUCCESS == status)
601 {
602 wdaContext->wdaTimersCreated = VOS_TRUE;
603 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700604 }
Leo Chang9d76f622013-08-23 16:34:52 -0700605 else
606 {
607 vos_event_init(&wdaContext->ftmStopDoneEvent);
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 return status;
610}
611
Jeff Johnson295189b2012-06-20 16:38:30 -0700612/*
613 * FUNCTION: WDA_prepareConfigTLV
614 * Function to prepare CFG for DAL(WDA)
615 */
616VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
617 WDI_StartReqParamsType *wdiStartParams )
618{
619 /* get pMac to acess CFG data base */
620 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
621 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
622 tHalCfg *tlvStruct = NULL ;
623 tANI_U8 *tlvStructStart = NULL ;
624 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
625 v_PVOID_t *configParam;
626 tANI_U32 configParamSize;
627 tANI_U32 *configDataValue;
628 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700629 tANI_U8 i;
630
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 if ((NULL == pMac)||(NULL == wdaContext))
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700634 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 VOS_ASSERT(0);
636 return VOS_STATUS_E_FAILURE;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
639 WNI_CFG_STA_ID_LEN +
640 WNI_CFG_EDCA_WME_ACBK_LEN +
641 WNI_CFG_EDCA_WME_ACBE_LEN +
642 WNI_CFG_EDCA_WME_ACVI_LEN +
643 WNI_CFG_EDCA_WME_ACVO_LEN +
644 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 /* malloc memory for all configs in one shot */
646 configParam = vos_mem_malloc(configParamSize);
647
648 if(NULL == configParam )
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700651 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 VOS_ASSERT(0) ;
653 return VOS_STATUS_E_NOMEM;
654 }
655 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 tlvStruct = (tHalCfg *)configParam;
658 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700659 /* TODO: Remove Later */
660 /* QWLAN_HAL_CFG_STA_ID */
661 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
662 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
663 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
664 eSIR_SUCCESS)
665 {
666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
667 "Failed to get value for WNI_CFG_STA_ID");
668 goto handle_failure;
669 }
670 tlvStruct->length = strLength ;
671 /* calculate the pad bytes to have the CFG in aligned format */
672 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
673 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
675 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
677 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
678 tlvStruct->length = sizeof(tANI_U32);
679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
680 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
681 != eSIR_SUCCESS)
682 {
683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
684 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
685 goto handle_failure;
686 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700687 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
688 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700689 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
690 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
691 tlvStruct->length = sizeof(tANI_U32);
692 configDataValue = (tANI_U32 *)(tlvStruct + 1);
693 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
694 eSIR_SUCCESS)
695 {
696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
697 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
698 goto handle_failure;
699 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
701 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
703 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
704 tlvStruct->length = sizeof(tANI_U32);
705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
706 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
707 != eSIR_SUCCESS)
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
710 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
711 goto handle_failure;
712 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700713 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
714 + sizeof(tHalCfg) + tlvStruct->length)) ;
715
716 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
717 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
718 tlvStruct->length = sizeof(tANI_U32);
719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
720 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
721 configDataValue ) != eSIR_SUCCESS)
722 {
723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
724 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
725 goto handle_failure;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
728 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 /* QWLAN_HAL_CFG_CAL_PERIOD */
730 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
731 tlvStruct->length = sizeof(tANI_U32);
732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
733 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
734 != eSIR_SUCCESS)
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
737 "Failed to get value for WNI_CFG_CAL_PERIOD");
738 goto handle_failure;
739 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
741 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 /* QWLAN_HAL_CFG_CAL_CONTROL */
743 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
744 tlvStruct->length = sizeof(tANI_U32);
745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
746 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
747 != eSIR_SUCCESS)
748 {
749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
750 "Failed to get value for WNI_CFG_CAL_CONTROL");
751 goto handle_failure;
752 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
754 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 /* QWLAN_HAL_CFG_PROXIMITY */
756 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
757 tlvStruct->length = sizeof(tANI_U32);
758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
759 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
760 != eSIR_SUCCESS)
761 {
762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
763 "Failed to get value for WNI_CFG_PROXIMITY");
764 goto handle_failure;
765 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
767 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
769 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
770 tlvStruct->length = sizeof(tANI_U32);
771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
772 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
773 != eSIR_SUCCESS)
774 {
775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
776 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
777 goto handle_failure;
778 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
780 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
782 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
786 eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700794 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
795 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
796 tlvStruct->length = sizeof(tANI_U32);
797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
798 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
799 configDataValue ) != eSIR_SUCCESS)
800 {
801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
802 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
803 goto handle_failure;
804 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700807 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
808 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
809 tlvStruct->length = sizeof(tANI_U32);
810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
811 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
812 eSIR_SUCCESS)
813 {
814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
815 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
816 goto handle_failure;
817 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
819 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
821 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
825 eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
834 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
838 eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
842 goto handle_failure;
843 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
847 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
851 configDataValue ) != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
860 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length));
872
873 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
874 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
875 tlvStruct->length = sizeof(tANI_U32);
876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
877 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
878 configDataValue ) != eSIR_SUCCESS)
879 {
880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
881 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
882 goto handle_failure;
883 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700884 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
885 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
887 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
888 tlvStruct->length = sizeof(tANI_U32);
889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
890 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
891 configDataValue ) != eSIR_SUCCESS)
892 {
893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
894 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
895 goto handle_failure;
896 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
898 + sizeof(tHalCfg) + tlvStruct->length));
899
900 /* QWLAN_HAL_CFG_FIXED_RATE */
901 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
902 tlvStruct->length = sizeof(tANI_U32);
903 configDataValue = (tANI_U32 *)(tlvStruct + 1);
904 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
905 != eSIR_SUCCESS)
906 {
907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
908 "Failed to get value for WNI_CFG_FIXED_RATE");
909 goto handle_failure;
910 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
912 + sizeof(tHalCfg) + tlvStruct->length));
913
914 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
915 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
916 tlvStruct->length = sizeof(tANI_U32);
917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
918 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
919 != eSIR_SUCCESS)
920 {
921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
922 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
923 goto handle_failure;
924 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
926 + sizeof(tHalCfg) + tlvStruct->length));
927
928 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
929 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
930 tlvStruct->length = sizeof(tANI_U32);
931 configDataValue = (tANI_U32 *)(tlvStruct + 1);
932 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
933 configDataValue ) != eSIR_SUCCESS)
934 {
935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
936 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
937 goto handle_failure;
938 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
940 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
942 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
943 tlvStruct->length = sizeof(tANI_U32);
944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
945 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
946 configDataValue ) != eSIR_SUCCESS)
947 {
948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
949 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
950 goto handle_failure;
951 }
952 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
953 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
955 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
956 tlvStruct->length = sizeof(tANI_U32);
957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
958 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
959 configDataValue ) != eSIR_SUCCESS)
960 {
961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
962 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
963 goto handle_failure;
964 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
966 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
968 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
969 tlvStruct->length = sizeof(tANI_U32);
970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
971 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
972 configDataValue ) != eSIR_SUCCESS)
973 {
974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
975 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
976 goto handle_failure;
977 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
979 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
981 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
982 tlvStruct->length = sizeof(tANI_U32);
983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
984 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
985 configDataValue ) != eSIR_SUCCESS)
986 {
987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
988 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
989 goto handle_failure;
990 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
992 + sizeof(tHalCfg) + tlvStruct->length);
993
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
995 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
996 tlvStruct->length = sizeof(tANI_U32);
997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
998 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
999 configDataValue ) != eSIR_SUCCESS)
1000 {
1001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1002 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1003 goto handle_failure;
1004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1006 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1008 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1009 tlvStruct->length = sizeof(tANI_U32);
1010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1011 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1012 configDataValue ) != eSIR_SUCCESS)
1013 {
1014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1015 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1016 goto handle_failure;
1017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1019 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1021 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1022 tlvStruct->length = sizeof(tANI_U32);
1023 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1024 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1025 eSIR_SUCCESS)
1026 {
1027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1028 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1029 goto handle_failure;
1030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001031 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1032 + sizeof(tHalCfg) + tlvStruct->length);
1033
1034 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1035 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1036 tlvStruct->length = sizeof(tANI_U32);
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1039 configDataValue ) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1043 goto handle_failure;
1044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1048 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1049 tlvStruct->length = sizeof(tANI_U32);
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1052 configDataValue ) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1056 goto handle_failure;
1057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1061 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1062 tlvStruct->length = sizeof(tANI_U32);
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1065 configDataValue ) != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1069 goto handle_failure;
1070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1074 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1075 tlvStruct->length = sizeof(tANI_U32);
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1078 configDataValue ) != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1082 goto handle_failure;
1083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001084 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1085 + sizeof(tHalCfg) + tlvStruct->length);
1086
1087 /* QWLAN_HAL_CFG_STATS_PERIOD */
1088 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1089 tlvStruct->length = sizeof(tANI_U32);
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1092 eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_STATS_PERIOD");
1096 goto handle_failure;
1097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1099 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001100 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1101 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1102 tlvStruct->length = sizeof(tANI_U32);
1103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1104 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1105 eSIR_SUCCESS)
1106 {
1107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1108 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1109 goto handle_failure;
1110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1112 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001113 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1114 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1115 tlvStruct->length = sizeof(tANI_U32);
1116 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1117 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1118 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1120 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1122 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1126 != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1130 goto handle_failure;
1131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1135 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1136 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1139 &strLength) != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1143 goto handle_failure;
1144 }
1145 tlvStruct->length = strLength;
1146 /* calculate the pad bytes to have the CFG in aligned format */
1147 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1148 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1150 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1152 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1153 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1155 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1156 &strLength) != eSIR_SUCCESS)
1157 {
1158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1159 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1160 goto handle_failure;
1161 }
1162 tlvStruct->length = strLength;
1163 /* calculate the pad bytes to have the CFG in aligned format */
1164 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1165 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1167 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1169 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1170 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1173 &strLength) != eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1177 goto handle_failure;
1178 }
1179 tlvStruct->length = strLength;
1180 /* calculate the pad bytes to have the CFG in aligned format */
1181 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1182 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1186 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1187 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1190 &strLength) != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1194 goto handle_failure;
1195 }
1196 tlvStruct->length = strLength;
1197 /* calculate the pad bytes to have the CFG in aligned format */
1198 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1199 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1203 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1216 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1229 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1242 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1246 != eSIR_SUCCESS)
1247 {
1248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1249 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1250 goto handle_failure;
1251 }
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1255 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1259 != eSIR_SUCCESS)
1260 {
1261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1262 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1263 goto handle_failure;
1264 }
1265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1266 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001267 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1268 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1272 != eSIR_SUCCESS)
1273 {
1274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1275 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1276 goto handle_failure;
1277 }
1278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1279 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001280 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1281 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1285 != eSIR_SUCCESS)
1286 {
1287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1288 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1289 goto handle_failure;
1290 }
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001293 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1294 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1298 != eSIR_SUCCESS)
1299 {
1300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1301 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1302 goto handle_failure;
1303 }
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001306 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1307 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1311 != eSIR_SUCCESS)
1312 {
1313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1314 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1315 goto handle_failure;
1316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001319 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1320 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1321 tlvStruct->length = sizeof(tANI_U32);
1322 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1323 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1324 != eSIR_SUCCESS)
1325 {
1326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1327 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1328 goto handle_failure;
1329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001332 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1333 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1337 != eSIR_SUCCESS)
1338 {
1339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1340 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1341 goto handle_failure;
1342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001345 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1346 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1347 * into FW, so the parameters are added here.
1348 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001349 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1357 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1361 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1362 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001363 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001370 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1371 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1375 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1376 + sizeof(tHalCfg) + tlvStruct->length) ;
1377
1378 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1379 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1387 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1395 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1403 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409
1410 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1411 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1415 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1416 + sizeof(tHalCfg) + tlvStruct->length) ;
1417
1418 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1419 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1420 tlvStruct->length = sizeof(tANI_U32);
1421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1422 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1423 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1424 + sizeof(tHalCfg) + tlvStruct->length) ;
1425
1426 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1427 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1431 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1432 + sizeof(tHalCfg) + tlvStruct->length) ;
1433
1434 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1435 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1436 tlvStruct->length = sizeof(tANI_U32);
1437 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1438 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1440 + sizeof(tHalCfg) + tlvStruct->length) ;
1441
1442 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1443 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1444 tlvStruct->length = sizeof(tANI_U32);
1445 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1446 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
1450 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1451 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457
1458 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1459 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1460 tlvStruct->length = sizeof(tANI_U32);
1461 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1462 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1467 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Wilson Tsaof8b37942013-09-06 10:49:00 -07001474 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1475 {
1476 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1477 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1481 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1482 + sizeof(tHalCfg) + tlvStruct->length) ;
1483
1484 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1485 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491
1492 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1493 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1494 tlvStruct->length = sizeof(tANI_U32);
1495 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1496 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1497 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1498 + sizeof(tHalCfg) + tlvStruct->length) ;
1499
1500 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1501 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1502 tlvStruct->length = sizeof(tANI_U32);
1503 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1504 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1505 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1506 + sizeof(tHalCfg) + tlvStruct->length) ;
1507 }
1508
1509 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1510 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1514 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1515 + sizeof(tHalCfg) + tlvStruct->length) ;
1516
1517 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1518 {
1519 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1520 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1521 tlvStruct->length = sizeof(tANI_U32);
1522 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1523 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526 }
1527
1528 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1529 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1530 tlvStruct->length = sizeof(tANI_U32);
1531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1532 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535
Jeff Johnson32d95a32012-09-10 13:15:23 -07001536 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1538 tlvStruct->length = sizeof(tANI_U32);
1539 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1540 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1541 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1542 wcnssCompiledApiVersion.minor,
1543 wcnssCompiledApiVersion.version,
1544 wcnssCompiledApiVersion.revision);
1545 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1546 + sizeof(tHalCfg) + tlvStruct->length) ;
1547
Jeff Johnsond13512a2012-07-17 11:42:19 -07001548 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1549 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1550 tlvStruct->length = sizeof(tANI_U32);
1551 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1552 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1553 configDataValue ) != eSIR_SUCCESS)
1554 {
1555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1556 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1557 goto handle_failure;
1558 }
1559
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1563 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1564 tlvStruct->length = sizeof(tANI_U32);
1565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1566 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1567 configDataValue ) != eSIR_SUCCESS)
1568 {
1569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1570 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1571 goto handle_failure;
1572 }
1573
1574 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1575 + sizeof(tHalCfg) + tlvStruct->length) ;
1576
1577 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1578 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1579 tlvStruct->length = sizeof(tANI_U32);
1580 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1581 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1582 != eSIR_SUCCESS)
1583 {
1584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1585 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1586 goto handle_failure;
1587 }
1588
1589 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1590 + sizeof(tHalCfg) + tlvStruct->length) ;
1591
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001592 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1593 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1594 tlvStruct->length = sizeof(tANI_U32);
1595 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1596 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1597 != eSIR_SUCCESS)
1598 {
1599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1600 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1601 goto handle_failure;
1602 }
1603
1604 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1605 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001606#ifdef WLAN_SOFTAP_VSTA_FEATURE
1607 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1608 tlvStruct->length = sizeof(tANI_U32);
1609 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1610 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1611 != eSIR_SUCCESS)
1612 {
1613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1614 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1615 goto handle_failure;
1616 }
1617
1618 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1619 + sizeof(tHalCfg) + tlvStruct->length) ;
1620#endif
1621
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001622 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1623 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626
1627 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1628 != eSIR_SUCCESS)
1629 {
1630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1631 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1632 goto handle_failure;
1633 }
1634
1635 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1636 + sizeof(tHalCfg) + tlvStruct->length) ;
1637
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301638/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1639 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1640 tlvStruct->length = sizeof(tANI_U32);
1641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1642 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1643 configDataValue ) != eSIR_SUCCESS)
1644 {
1645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1646 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1647 goto handle_failure;
1648 }
1649
1650 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1651 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301652#ifdef FEATURE_WLAN_TDLS
1653 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1654 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1662 goto handle_failure;
1663 }
1664 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1665 + sizeof(tHalCfg) + tlvStruct->length) ;
1666
1667 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1668 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1669 tlvStruct->length = sizeof(tANI_U32);
1670 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1671 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1672 configDataValue ) != eSIR_SUCCESS)
1673 {
1674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1675 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1676 goto handle_failure;
1677 }
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1681 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1689 goto handle_failure;
1690 }
1691 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1692 + sizeof(tHalCfg) + tlvStruct->length) ;
1693 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1694 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1695 tlvStruct->length = sizeof(tANI_U32);
1696 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1697 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1698 configDataValue ) != eSIR_SUCCESS)
1699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1702 goto handle_failure;
1703 }
1704 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1705 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301706 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1707 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1708 tlvStruct->length = sizeof(tANI_U32);
1709 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1710 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1711 configDataValue ) != eSIR_SUCCESS)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1714 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1715 goto handle_failure;
1716 }
1717 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1718 + sizeof(tHalCfg) + tlvStruct->length) ;
1719
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301720#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301721
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001722 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1723 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1724 tlvStruct->length = sizeof(tANI_U32);
1725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1726 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1727 configDataValue ) != eSIR_SUCCESS)
1728 {
1729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1730 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1731 goto handle_failure;
1732 }
1733
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001736
1737 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1738 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1742 != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length));
1750
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301751 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1752 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1760 goto handle_failure;
1761 }
1762
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301766 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1767 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301780 /* QWLAN_HAL_CFG_ATH_DISABLE */
1781 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_ATH_DISABLE");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
c_hpothu6d7dc922013-12-02 12:36:41 +05301794 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1795 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1796 tlvStruct->length = sizeof(tANI_U32);
1797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1798 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1799 configDataValue ) != eSIR_SUCCESS)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1802 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1803 goto handle_failure;
1804 }
1805 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1806 + sizeof(tHalCfg) + tlvStruct->length) ;
1807
1808 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1809 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1810 tlvStruct->length = sizeof(tANI_U32);
1811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1812 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1813 configDataValue ) != eSIR_SUCCESS)
1814 {
1815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1816 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1817 goto handle_failure;
1818 }
1819 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1820 + sizeof(tHalCfg) + tlvStruct->length) ;
1821
1822 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1823 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1824 tlvStruct->length = sizeof(tANI_U32);
1825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1826 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1827 configDataValue ) != eSIR_SUCCESS)
1828 {
1829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1830 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1831 goto handle_failure;
1832 }
1833 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1834 + sizeof(tHalCfg) + tlvStruct->length) ;
1835
1836 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1837 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1838 tlvStruct->length = sizeof(tANI_U32);
1839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1845 goto handle_failure;
1846 }
1847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301850 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1855 configDataValue ) != eSIR_SUCCESS)
1856 {
1857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1858 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1859 goto handle_failure;
1860 }
1861 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1862 + sizeof(tHalCfg) + tlvStruct->length) ;
1863
1864 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1865 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1866 tlvStruct->length = sizeof(tANI_U32);
1867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1868 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1869 configDataValue ) != eSIR_SUCCESS)
1870 {
1871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1872 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1873 goto handle_failure;
1874 }
1875 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1876 + sizeof(tHalCfg) + tlvStruct->length) ;
1877
1878 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1879 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1880 tlvStruct->length = sizeof(tANI_U32);
1881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1882 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1883 configDataValue ) != eSIR_SUCCESS)
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1886 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1887 goto handle_failure;
1888 }
1889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1890 + sizeof(tHalCfg) + tlvStruct->length) ;
1891
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001892 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1893 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1894 tlvStruct->length = sizeof(tANI_U32);
1895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1896 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1897 configDataValue ) != eSIR_SUCCESS)
1898 {
1899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1900 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1901 goto handle_failure;
1902 }
1903 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1904 + sizeof(tHalCfg) + tlvStruct->length) ;
1905
c_hpothu5bd1ae42014-03-07 20:28:22 +05301906 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1907 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1908 tlvStruct->length = sizeof(tANI_U32);
1909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1910
1911 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1912 configDataValue ) != eSIR_SUCCESS)
1913 {
1914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1915 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1916 goto handle_failure;
1917 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301918 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1919 + sizeof(tHalCfg) + tlvStruct->length) ;
1920
1921 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1922 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1923 tlvStruct->length = sizeof(tANI_U32);
1924 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1925
1926 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1927 configDataValue ) != eSIR_SUCCESS)
1928 {
1929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1930 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1931 goto handle_failure;
1932 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1934 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301935
c_hpothu2d0f1c42014-04-01 18:38:51 +05301936 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1937 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1938 tlvStruct->length = sizeof(tANI_U32);
1939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1940
1941 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1942 configDataValue ) != eSIR_SUCCESS)
1943 {
1944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1945 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1946 goto handle_failure;
1947 }
1948 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1949 + sizeof(tHalCfg) + tlvStruct->length) ;
1950
1951 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1952 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1953 tlvStruct->length = sizeof(tANI_U32);
1954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1955
1956 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1957 configDataValue ) != eSIR_SUCCESS)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1960 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1961 goto handle_failure;
1962 }
1963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1964 + sizeof(tHalCfg) + tlvStruct->length) ;
1965
1966 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1967 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1968 tlvStruct->length = sizeof(tANI_U32);
1969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1970
1971 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1972 configDataValue ) != eSIR_SUCCESS)
1973 {
1974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1975 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1976 goto handle_failure;
1977 }
1978 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1979 + sizeof(tHalCfg) + tlvStruct->length) ;
1980
1981 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1982 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1983 tlvStruct->length = sizeof(tANI_U32);
1984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1985
1986 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1987 configDataValue ) != eSIR_SUCCESS)
1988 {
1989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1990 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1991 goto handle_failure;
1992 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1994 + sizeof(tHalCfg) + tlvStruct->length) ;
1995
Mihir Shetec34258c2014-07-30 17:50:27 +05301996 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1997 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1998 tlvStruct->length = sizeof(tANI_U32);
1999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2000
2001 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2002 configDataValue ) != eSIR_SUCCESS)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2005 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2006 goto handle_failure;
2007 }
2008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2009 + sizeof(tHalCfg) + tlvStruct->length) ;
2010
2011 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2012 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2013 tlvStruct->length = sizeof(tANI_U32);
2014 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2015
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2021 goto handle_failure;
2022 }
2023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
2025
2026 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2027 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2036 goto handle_failure;
2037 }
2038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2042 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2051 goto handle_failure;
2052 }
2053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
2055
2056 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2057 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2062 configDataValue ) != eSIR_SUCCESS)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2065 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2072 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2077 configDataValue ) != eSIR_SUCCESS)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2080 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2081 goto handle_failure;
2082 }
2083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
2086 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2087 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2102 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2111 goto handle_failure;
2112 }
2113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302115
2116 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2117 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2122 configDataValue ) != eSIR_SUCCESS)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2125 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302131 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2132 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2137 configDataValue ) != eSIR_SUCCESS)
2138 {
2139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2140 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302146 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2147 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2152 configDataValue ) != eSIR_SUCCESS)
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302160
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302161 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2162 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2167 configDataValue ) != eSIR_SUCCESS)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
Sachin Ahuja41b61902015-06-18 18:32:15 +05302176
2177 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2178 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2179 tlvStruct->length = sizeof(tANI_U32);
2180 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2181
2182 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2183 configDataValue ) != eSIR_SUCCESS)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2186 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2187 goto handle_failure;
2188 }
2189 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2190 + sizeof(tHalCfg) + tlvStruct->length) ;
2191
2192 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2193 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2194 tlvStruct->length = sizeof(tANI_U32);
2195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2196
2197 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2198 configDataValue ) != eSIR_SUCCESS)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2202 goto handle_failure;
2203 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2205 + sizeof(tHalCfg) + tlvStruct->length) ;
2206
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302207 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2208 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2209 tlvStruct->length = sizeof(tANI_U32);
2210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2211
2212 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2213 configDataValue ) != eSIR_SUCCESS)
2214 {
2215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2216 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2217 goto handle_failure;
2218 }
2219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2220 + sizeof(tHalCfg) + tlvStruct->length) ;
2221
2222 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2223 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2224 tlvStruct->length = sizeof(tANI_U32);
2225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2226
2227 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2228 configDataValue ) != eSIR_SUCCESS)
2229 {
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2231 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2232 goto handle_failure;
2233 }
2234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2235 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302236
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002238#ifdef WLAN_DEBUG
2239 {
2240 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2242 "****** Dumping CFG TLV ***** ");
2243 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2244 {
2245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2246 "%02x %02x %02x %02x %02x %02x %02x %02x",
2247 tlvStructStart[i],
2248 tlvStructStart[i+1],
2249 tlvStructStart[i+2],
2250 tlvStructStart[i+3],
2251 tlvStructStart[i+4],
2252 tlvStructStart[i+5],
2253 tlvStructStart[i+6],
2254 tlvStructStart[i+7]);
2255 }
2256 /* Dump the bytes in the last line*/
2257 for (; i < wdiStartParams->usConfigBufferLen; i++)
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2260 "%02x ",tlvStructStart[i]);
2261 }
2262 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2263 "**************************** ");
2264 }
2265#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002267handle_failure:
2268 vos_mem_free(configParam);
2269 return VOS_STATUS_E_FAILURE;
2270}
Jeff Johnson295189b2012-06-20 16:38:30 -07002271/*
2272 * FUNCTION: WDA_wdiCompleteCB
2273 * call the voss call back function
2274 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002275void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002276{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2278 tWDA_CbContext *wdaContext;
2279
2280 if(NULL == pWdaParams)
2281 {
2282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002283 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002284 VOS_ASSERT(0) ;
2285 return ;
2286 }
2287
2288 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2289
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 if (NULL == wdaContext)
2291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002293 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 return ;
2295 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002296
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002298 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002302 vos_mem_free(pWdaParams);
2303
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 if(WDI_STATUS_SUCCESS != status)
2305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2307 "WDI stop callback returned failure" );
2308 VOS_ASSERT(0) ;
2309 }
2310 else
2311 {
2312 wdaContext->wdaState = WDA_STOP_STATE;
2313 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002314
Leo Chang9d76f622013-08-23 16:34:52 -07002315 /* FTM Driver stop procedure should be synced.
2316 * Stop and Close will happen on same context */
2317 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2318 {
2319 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2320 {
2321 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2322 "%s: FTM Stop Event Set Fail", __func__);
2323 VOS_ASSERT(0);
2324 }
2325 }
2326
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002328 vos_WDAComplete_cback(wdaContext->pVosContext);
2329
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 return ;
2331}
Jeff Johnson295189b2012-06-20 16:38:30 -07002332/*
2333 * FUNCTION: WDA_stop
2334 * call WDI_stop
2335 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002336VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2337{
2338 WDI_Status wdiStatus;
2339 VOS_STATUS status = VOS_STATUS_SUCCESS;
2340 WDI_StopReqParamsType *wdiStopReq;
2341 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002342 tWDA_ReqParams *pWdaParams ;
2343
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 if (NULL == pWDA)
2345 {
2346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002347 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 VOS_ASSERT(0);
2349 return VOS_STATUS_E_FAILURE;
2350 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002351 if (pWDA->wdiFailed == true)
2352 {
2353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002354 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002355 return VOS_STATUS_E_ALREADY;
2356 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002357
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 /* FTM mode stay START_STATE */
2359 if( (WDA_READY_STATE != pWDA->wdaState) &&
2360 (WDA_INIT_STATE != pWDA->wdaState) &&
2361 (WDA_START_STATE != pWDA->wdaState) )
2362 {
2363 VOS_ASSERT(0);
2364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 wdiStopReq = (WDI_StopReqParamsType *)
2366 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2367 if(NULL == wdiStopReq)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 VOS_ASSERT(0);
2372 return VOS_STATUS_E_NOMEM;
2373 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002374
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 wdiStopReq->wdiStopReason = reason;
2376 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302377
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2379 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 {
2381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 VOS_ASSERT(0);
2384 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002385 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002387
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002388 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2389 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 {
2391 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002392 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002394
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002395 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2396 pWdaParams->wdaMsgParam = NULL;
2397 pWdaParams->pWdaContext = pWDA;
2398
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 /* call WDI stop */
2400 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002401 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2402
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2406 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2408 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 status = VOS_STATUS_E_FAILURE;
2410 }
Leo Chang9d76f622013-08-23 16:34:52 -07002411
2412 /* FTM Driver stop procedure should be synced.
2413 * Stop and Close will happen on same context */
2414 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2415 {
2416 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2417 WDI_RESPONSE_TIMEOUT);
2418 if (status != VOS_STATUS_SUCCESS)
2419 {
2420 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2421 "%s: FTM Stop Timepoout", __func__);
2422 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002423 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302424 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 return status;
2427}
Jeff Johnson295189b2012-06-20 16:38:30 -07002428/*
2429 * FUNCTION: WDA_close
2430 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302431 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002432VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2433{
Jeff Johnson43971f52012-07-17 12:26:56 -07002434 VOS_STATUS status = VOS_STATUS_SUCCESS;
2435 WDI_Status wstatus;
2436 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if (NULL == wdaContext)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002441 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 return VOS_STATUS_E_FAILURE;
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2445 (WDA_STOP_STATE != wdaContext->wdaState))
2446 {
2447 VOS_ASSERT(0);
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002450 wstatus = WDI_Close();
2451 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 {
2453 status = VOS_STATUS_E_FAILURE;
2454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002457 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2458 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002461 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 status = VOS_STATUS_E_FAILURE;
2463 }
2464
Jeff Johnson43971f52012-07-17 12:26:56 -07002465 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002466 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002469 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 status = VOS_STATUS_E_FAILURE;
2471 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002472 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002473 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002476 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 status = VOS_STATUS_E_FAILURE;
2478 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002479 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002480 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 {
2482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002483 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 status = VOS_STATUS_E_FAILURE;
2485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002487 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002488 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 {
2490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2491 "error in WDA close " );
2492 status = VOS_STATUS_E_FAILURE;
2493 }
2494 return status;
2495}
Jeff Johnson295189b2012-06-20 16:38:30 -07002496/*
2497 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2498 * returns 1 if the compiled version is greater than or equal to the input version
2499 */
2500
2501uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2502{
2503 VOS_STATUS status = VOS_STATUS_SUCCESS;
2504 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2505 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2508 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2509 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2510 (compiledVersion.revision >= revision)))
2511 return 1;
2512 else
2513 return 0;
2514}
Jeff Johnson295189b2012-06-20 16:38:30 -07002515/*
2516 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2517 * returns 1 if the compiled version is greater than or equal to the input version
2518 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002519uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2520{
2521 VOS_STATUS status = VOS_STATUS_SUCCESS;
2522 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2523 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2526 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2527 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2528 (reportedVersion.revision >= revision)))
2529 return 1;
2530 else
2531 return 0;
2532}
Jeff Johnson295189b2012-06-20 16:38:30 -07002533/*
2534 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2535 * Returns the version of the WCNSS WLAN API with which the HOST
2536 * device driver was compiled
2537 */
2538VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2539 tSirVersionType *pVersion)
2540{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302541 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 if ((NULL == pvosGCtx) || (NULL == pVersion))
2543 {
2544 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002545 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 VOS_ASSERT(0);
2547 return VOS_STATUS_E_FAILURE;
2548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2550 if (NULL == pWDA )
2551 {
2552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002553 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 VOS_ASSERT(0);
2555 return VOS_STATUS_E_FAILURE;
2556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 *pVersion = pWDA->wcnssWlanCompiledVersion;
2558 return VOS_STATUS_SUCCESS;
2559}
Jeff Johnson295189b2012-06-20 16:38:30 -07002560/*
2561 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2562 * Returns the version of the WCNSS WLAN API with which the WCNSS
2563 * device driver was compiled
2564 */
2565VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2566 tSirVersionType *pVersion)
2567{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302568 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 if ((NULL == pvosGCtx) || (NULL == pVersion))
2570 {
2571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002572 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 VOS_ASSERT(0);
2574 return VOS_STATUS_E_FAILURE;
2575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2577 if (NULL == pWDA )
2578 {
2579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "%s: Invalid WDA context", __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 *pVersion = pWDA->wcnssWlanReportedVersion;
2585 return VOS_STATUS_SUCCESS;
2586}
Jeff Johnson295189b2012-06-20 16:38:30 -07002587/*
2588 * FUNCTION: WDA_GetWcnssSoftwareVersion
2589 * Returns the WCNSS Software version string
2590 */
2591VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2592 tANI_U8 *pVersion,
2593 tANI_U32 versionBufferSize)
2594{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302595 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002597 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 if ((NULL == pvosGCtx) || (NULL == pVersion))
2599 {
2600 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002601 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 VOS_ASSERT(0);
2603 return VOS_STATUS_E_FAILURE;
2604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2606 if (NULL == pWDA )
2607 {
2608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002609 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 VOS_ASSERT(0);
2611 return VOS_STATUS_E_FAILURE;
2612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2614 return VOS_STATUS_SUCCESS;
2615}
Jeff Johnson295189b2012-06-20 16:38:30 -07002616/*
2617 * FUNCTION: WDA_GetWcnssHardwareVersion
2618 * Returns the WCNSS Hardware version string
2619 */
2620VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2621 tANI_U8 *pVersion,
2622 tANI_U32 versionBufferSize)
2623{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302624 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002626 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 if ((NULL == pvosGCtx) || (NULL == pVersion))
2628 {
2629 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002630 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 VOS_ASSERT(0);
2632 return VOS_STATUS_E_FAILURE;
2633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2635 if (NULL == pWDA )
2636 {
2637 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002638 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 VOS_ASSERT(0);
2640 return VOS_STATUS_E_FAILURE;
2641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2643 return VOS_STATUS_SUCCESS;
2644}
Jeff Johnson295189b2012-06-20 16:38:30 -07002645/*
2646 * FUNCTION: WDA_WniCfgDnld
2647 * Trigger CFG Download
2648 */
2649VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2650{
2651 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302652 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002653
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if (NULL == pMac )
2655 {
2656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 VOS_ASSERT(0);
2659 return VOS_STATUS_E_FAILURE;
2660 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302661 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 return vosStatus;
2663}
Jeff Johnson295189b2012-06-20 16:38:30 -07002664/* -----------------------------------------------------------------
2665 * WDI interface
2666 * -----------------------------------------------------------------
2667 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002668/*
2669 * FUNCTION: WDA_suspendDataTxCallback
2670 * call back function called from TL after suspend Transmission
2671 */
2672VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2673 v_U8_t* ucSTAId,
2674 VOS_STATUS vosStatus)
2675{
2676 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002678 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 if (NULL == pWDA )
2680 {
2681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002682 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 VOS_ASSERT(0);
2684 return VOS_STATUS_E_FAILURE;
2685 }
2686 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2687 {
2688 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2689 }
2690 else
2691 {
2692 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 /* Trigger the event to bring the WDA TL suspend function to come
2695 * out of wait*/
2696 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2697 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2698 {
2699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002700 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 /* If TL suspended had timedout before this callback was called, resume back
2703 * TL.*/
2704 if (pWDA->txSuspendTimedOut)
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002707 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 WDA_ResumeDataTx(pWDA);
2709 pWDA->txSuspendTimedOut = FALSE;
2710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 return VOS_STATUS_SUCCESS;
2712}
Jeff Johnson295189b2012-06-20 16:38:30 -07002713/*
2714 * FUNCTION: WDA_suspendDataTx
2715 * Update TL to suspend the data Transmission
2716 */
2717VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2718{
2719 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2720 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721
2722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002723 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 if (pWDA->txSuspendTimedOut)
2726 {
2727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002728 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 return status;
2730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 /* Reset the event to be not signalled */
2732 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2733 if(!VOS_IS_STATUS_SUCCESS(status))
2734 {
2735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002736 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 return VOS_STATUS_E_FAILURE;
2738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002740 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 WDA_SuspendDataTxCallback);
2742 if(status != VOS_STATUS_SUCCESS)
2743 {
2744 return status;
2745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 /* Wait for the event to be set by the TL, to get the response of
2747 * suspending the TX queues, this event should be set by the Callback
2748 * function called by TL*/
2749 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2750 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2751 if(!VOS_IS_STATUS_SUCCESS(status))
2752 {
2753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2754 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002755 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 /* Set this flag to true when TL suspend times out, so that when TL
2757 * suspend eventually happens and calls the callback, TL can be resumed
2758 * right away by looking at this flag when true.*/
2759 pWDA->txSuspendTimedOut = TRUE;
2760 }
2761 else
2762 {
2763 pWDA->txSuspendTimedOut = FALSE;
2764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2766 {
2767 status = VOS_STATUS_SUCCESS;
2768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 return status;
2770}
Jeff Johnson295189b2012-06-20 16:38:30 -07002771/*
2772 * FUNCTION: WDA_resumeDataTx
2773 * Update TL to resume the data Transmission
2774 */
2775VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2776{
2777 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778
2779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002781
2782 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 return status;
2784}
Jeff Johnson295189b2012-06-20 16:38:30 -07002785/*
2786 * FUNCTION: WDA_InitScanReqCallback
2787 * Trigger Init SCAN callback
2788 */
2789void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2790{
2791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2792 tWDA_CbContext *pWDA;
2793 tInitScanParams *pWDA_ScanParam ;
2794 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 if(NULL == pWdaParams)
2798 {
2799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002800 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002801 VOS_ASSERT(0) ;
2802 return ;
2803 }
2804 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2805 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 if(NULL == pWDA_ScanParam)
2807 {
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002810 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2812 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 return ;
2814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 if(WDI_STATUS_SUCCESS != wdiStatus)
2816 {
2817 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 if(VOS_STATUS_SUCCESS != status)
2819 {
2820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002821 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 }
2823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 /* free WDI command buffer */
2825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302827
2828
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002830 /* without converting the Status to Failure or Success Just
2831 pass the same status to lim */
2832 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 /* send SCAN RSP message back to PE */
2834 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 return ;
2836}
2837
2838/*
2839 * FUNCTION: WDA_ProcessInitScanReq
2840 * Trigger Init SCAN in DAL
2841 */
2842VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2843 tInitScanParams *initScanParams)
2844{
2845 WDI_Status status = WDI_STATUS_SUCCESS ;
2846 WDI_InitScanReqParamsType *wdiInitScanParam =
2847 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2848 sizeof(WDI_InitScanReqParamsType)) ;
2849 tWDA_ReqParams *pWdaParams;
2850 tANI_U8 i = 0;
2851
2852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if(NULL == wdiInitScanParam)
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002857 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_ASSERT(0);
2859 return VOS_STATUS_E_NOMEM;
2860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2862 if(NULL == pWdaParams)
2863 {
2864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 VOS_ASSERT(0);
2867 vos_mem_free(wdiInitScanParam);
2868 return VOS_STATUS_E_NOMEM;
2869 }
2870
2871 /* Copy init Scan params to WDI structure */
2872 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2873 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2874 sizeof(tSirMacAddr)) ;
2875 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2876 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2877 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2879 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2881 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2883 {
2884 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2885 initScanParams->scanEntry.bssIdx[i] ;
2886 }
2887
2888 /* if Frame length, copy macMgmtHdr or WDI structure */
2889 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2890 {
2891 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2892 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2893 }
2894 wdiInitScanParam->wdiReqStatusCB = NULL ;
2895
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 /* Store Init Req pointer, as this will be used for response */
2897 pWdaParams->pWdaContext = pWDA;
2898 pWdaParams->wdaMsgParam = initScanParams;
2899 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 /* first try to suspend TX */
2901 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 if(WDI_STATUS_SUCCESS != status)
2903 {
2904 goto handleWdiFailure;
2905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* call DAL API to pass init scan request to DAL */
2907 status = WDI_InitScanReq(wdiInitScanParam,
2908 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 if(IS_WDI_STATUS_FAILURE(status))
2910 {
2911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2912 "error in WDA Init Scan, Resume Tx " );
2913 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 VOS_ASSERT(0) ;
2915
2916 goto handleWdiFailure;
2917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002919handleWdiFailure:
2920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2921 "Failure in WDI Api, free all the memory " );
2922 /* free WDI command buffer */
2923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2924 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 /* send Failure to PE */
2926 initScanParams->status = eSIR_FAILURE ;
2927 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 return CONVERT_WDI2VOS_STATUS(status) ;
2929}
2930
Jeff Johnson295189b2012-06-20 16:38:30 -07002931/*
2932 * FUNCTION: WDA_StartScanReqCallback
2933 * send Start SCAN RSP back to PE
2934 */
2935void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2936 void* pUserData)
2937{
2938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2939 tWDA_CbContext *pWDA;
2940 tStartScanParams *pWDA_ScanParam;
2941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002942 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 if(NULL == pWdaParams)
2944 {
2945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002946 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 VOS_ASSERT(0) ;
2948 return ;
2949 }
2950 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2951 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 if(NULL == pWDA_ScanParam)
2953 {
2954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002955 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002957 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 return ;
2959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002965 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return ;
2967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2969 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002970
Jeff Johnson295189b2012-06-20 16:38:30 -07002971
2972 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002973 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 /* send SCAN RSP message back to PE */
2975 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 return ;
2977}
2978
Jeff Johnson295189b2012-06-20 16:38:30 -07002979/*
2980 * FUNCTION: WDA_ProcessStartScanReq
2981 * Trigger start SCAN in WDI
2982 */
2983VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2984 tStartScanParams *startScanParams)
2985{
2986 WDI_Status status = WDI_STATUS_SUCCESS;
2987 WDI_StartScanReqParamsType *wdiStartScanParams =
2988 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2989 sizeof(WDI_StartScanReqParamsType)) ;
2990 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002992 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 if(NULL == wdiStartScanParams)
2994 {
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_ASSERT(0);
2998 return VOS_STATUS_E_NOMEM;
2999 }
3000 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3001 if(NULL == pWdaParams)
3002 {
3003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 VOS_ASSERT(0);
3006 vos_mem_free(wdiStartScanParams);
3007 return VOS_STATUS_E_NOMEM;
3008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 /* Copy init Scan params to WDI structure */
3010 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3011 wdiStartScanParams->wdiReqStatusCB = NULL ;
3012
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 /* Store Init Req pointer, as this will be used for response */
3014 /* store Params pass it to WDI */
3015 pWdaParams->pWdaContext = pWDA;
3016 pWdaParams->wdaMsgParam = startScanParams;
3017 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 /* call DAL API to pass init scan request to DAL */
3019 status = WDI_StartScanReq(wdiStartScanParams,
3020 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 /* failure returned by WDI API */
3022 if(IS_WDI_STATUS_FAILURE(status))
3023 {
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3025 "Failure in Start Scan WDI API, free all the memory "
3026 "It should be due to previous abort scan." );
3027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3028 vos_mem_free(pWdaParams) ;
3029 startScanParams->status = eSIR_FAILURE ;
3030 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 return CONVERT_WDI2VOS_STATUS(status) ;
3033}
Jeff Johnson295189b2012-06-20 16:38:30 -07003034/*
3035 * FUNCTION: WDA_EndScanReqCallback
3036 * END SCAN callback
3037 */
3038void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3039{
3040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3041 tWDA_CbContext *pWDA;
3042 tEndScanParams *endScanParam;
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == pWdaParams)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0) ;
3050 return ;
3051 }
3052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3053 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(NULL == endScanParam)
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3060 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 return ;
3062 }
3063
3064 /* Free WDI command buffer */
3065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3066 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003068 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 /* send response back to PE */
3070 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3071 return ;
3072}
3073
Jeff Johnson295189b2012-06-20 16:38:30 -07003074/*
3075 * FUNCTION: WDA_ProcessEndScanReq
3076 * Trigger END SCAN in WDI
3077 */
3078VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3079 tEndScanParams *endScanParams)
3080{
3081 WDI_Status status = WDI_STATUS_SUCCESS;
3082 WDI_EndScanReqParamsType *wdiEndScanParams =
3083 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3084 sizeof(WDI_EndScanReqParamsType)) ;
3085 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003087 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 if(NULL == wdiEndScanParams)
3089 {
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 VOS_ASSERT(0);
3093 return VOS_STATUS_E_NOMEM;
3094 }
3095 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3096 if(NULL == pWdaParams)
3097 {
3098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 VOS_ASSERT(0);
3101 vos_mem_free(wdiEndScanParams);
3102 return VOS_STATUS_E_NOMEM;
3103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 /* Copy init Scan params to WDI structure */
3105 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3106 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 /* Store Init Req pointer, as this will be used for response */
3108 /* store Params pass it to WDI */
3109 pWdaParams->pWdaContext = pWDA;
3110 pWdaParams->wdaMsgParam = endScanParams;
3111 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 /* call DAL API to pass init scan request to DAL */
3113 status = WDI_EndScanReq(wdiEndScanParams,
3114 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 if(IS_WDI_STATUS_FAILURE(status))
3116 {
3117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3118 "Failure in End Scan WDI API, free all the memory "
3119 "It should be due to previous abort scan." );
3120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3121 vos_mem_free(pWdaParams) ;
3122 endScanParams->status = eSIR_FAILURE ;
3123 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 return CONVERT_WDI2VOS_STATUS(status) ;
3126}
Jeff Johnson295189b2012-06-20 16:38:30 -07003127/*
3128 * FUNCTION: WDA_FinishScanReqCallback
3129 * Trigger Finish SCAN callback
3130 */
3131void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3132{
3133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3134 tWDA_CbContext *pWDA;
3135 tFinishScanParams *finishScanParam;
3136 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 if(NULL == pWdaParams)
3140 {
3141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003142 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 VOS_ASSERT(0) ;
3144 return ;
3145 }
3146
3147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3148 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 if(NULL == finishScanParam)
3150 {
3151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003152 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3155 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 return ;
3157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3159 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 /*
3161 * Now Resume TX, if we reached here means, TX is already suspended, we
3162 * have to resume it unconditionaly
3163 */
3164 status = WDA_ResumeDataTx(pWDA) ;
3165
3166 if(VOS_STATUS_SUCCESS != status)
3167 {
3168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003169 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003171 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3173 return ;
3174}
Jeff Johnson295189b2012-06-20 16:38:30 -07003175/*
3176 * FUNCTION: WDA_ProcessFinshScanReq
3177 * Trigger Finish SCAN in WDI
3178 */
3179VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3180 tFinishScanParams *finishScanParams)
3181{
3182 WDI_Status status = WDI_STATUS_SUCCESS;
3183 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3184 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3185 sizeof(WDI_FinishScanReqParamsType)) ;
3186 tWDA_ReqParams *pWdaParams ;
3187 tANI_U8 i = 0;
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 if(NULL == wdiFinishScanParams)
3191 {
3192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 VOS_ASSERT(0);
3195 return VOS_STATUS_E_NOMEM;
3196 }
3197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3198 if(NULL == pWdaParams)
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0);
3203 vos_mem_free(wdiFinishScanParams);
3204 return VOS_STATUS_E_NOMEM;
3205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 /* Copy init Scan params to WDI structure */
3207 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3208 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3209 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3211 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3212 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3213 finishScanParams->frameLength ;
3214 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3215 finishScanParams->currentOperChannel ;
3216 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3217 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3218 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3220 {
3221 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3222 finishScanParams->scanEntry.bssIdx[i] ;
3223 }
3224
3225
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 /* if Frame length, copy macMgmtHdr ro WDI structure */
3227 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3228 {
3229 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3230 &finishScanParams->macMgmtHdr,
3231 sizeof(WDI_MacMgmtHdr)) ;
3232 }
3233 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 /* Store Init Req pointer, as this will be used for response */
3235 /* store Params pass it to WDI */
3236 pWdaParams->pWdaContext = pWDA;
3237 pWdaParams->wdaMsgParam = finishScanParams;
3238 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 /* call DAL API to pass init scan request to DAL */
3240 status = WDI_FinishScanReq(wdiFinishScanParams,
3241 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003242
Jeff Johnson295189b2012-06-20 16:38:30 -07003243
3244 /*
3245 * WDI API returns failure..
3246 */
3247 if(IS_WDI_STATUS_FAILURE( status))
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3250 "Failure in Finish Scan WDI API, free all the memory " );
3251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3252 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 finishScanParams->status = eSIR_FAILURE ;
3254 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 return CONVERT_WDI2VOS_STATUS(status) ;
3257}
Jeff Johnson295189b2012-06-20 16:38:30 -07003258/*---------------------------------------------------------------------
3259 * ASSOC API's
3260 *---------------------------------------------------------------------
3261 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003262/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303263 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 * Trigger Init SCAN callback
3265 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303266void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003267{
3268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3269 tWDA_CbContext *pWDA;
3270 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003272 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 if(NULL == pWdaParams)
3274 {
3275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003276 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 VOS_ASSERT(0) ;
3278 return ;
3279 }
3280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3281 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3283 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 /* reset macBSSID */
3285 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 /* reset macSTASelf */
3287 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003288 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 return ;
3291}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303292
3293/*
3294 * FUNCTION: WDA_JoinReqCallback
3295 * Free memory and send SWITCH CHANNEL RSP back to PE.
3296 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3297 */
3298void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3299{
3300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3301 tWDA_CbContext *pWDA;
3302 tSwitchChannelParams *joinReqParam;
3303
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3305 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3306
3307 if(NULL == pWdaParams)
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3310 "%s: pWdaParams received NULL", __func__);
3311 VOS_ASSERT(0);
3312 return;
3313 }
3314
3315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3316 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3317 joinReqParam->status = wdiStatus;
3318
3319 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3320 {
3321 /* reset macBSSID */
3322 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3323 /* reset macSTASelf */
3324 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3325
3326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3327 vos_mem_free(pWdaParams);
3328 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3329 }
3330
3331 return;
3332}
3333
Jeff Johnson295189b2012-06-20 16:38:30 -07003334/*
3335 * FUNCTION: WDA_ProcessJoinReq
3336 * Trigger Join REQ in WDI
3337 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003338VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3339 tSwitchChannelParams* joinReqParam)
3340{
3341 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 WDI_JoinReqParamsType *wdiJoinReqParam =
3343 (WDI_JoinReqParamsType *)vos_mem_malloc(
3344 sizeof(WDI_JoinReqParamsType)) ;
3345 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 if(NULL == wdiJoinReqParam)
3349 {
3350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003353 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 return VOS_STATUS_E_NOMEM;
3355 }
3356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3357 if(NULL == pWdaParams)
3358 {
3359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 VOS_ASSERT(0);
3362 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003363 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 return VOS_STATUS_E_NOMEM;
3365 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003366
3367 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3368 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3369 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3370 {
3371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3372 "%s: received join request when BSSID or self-STA is NULL "
3373 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003374 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003375 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3376 VOS_ASSERT(0);
3377 vos_mem_free(wdiJoinReqParam);
3378 vos_mem_free(pWdaParams);
3379 joinReqParam->status = eSIR_FAILURE ;
3380 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3381 return VOS_STATUS_E_INVAL;
3382 }
3383
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 /* copy the BSSID for pWDA */
3385 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3386 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3388 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3390 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003391#ifdef WLAN_FEATURE_VOWIFI
3392 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3393 joinReqParam->maxTxPower ;
3394#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3396 joinReqParam->localPowerConstraint ;
3397#endif
3398 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3399 joinReqParam->secondaryChannelOffset ;
3400 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3401
Sachin Ahuja935eda782014-07-30 14:57:41 +05303402 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3403 wdiJoinReqParam->pUserData = pWdaParams;
3404
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 /* Store Init Req pointer, as this will be used for response */
3406 /* store Params pass it to WDI */
3407 pWdaParams->pWdaContext = pWDA;
3408 pWdaParams->wdaMsgParam = joinReqParam;
3409 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303411 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if(IS_WDI_STATUS_FAILURE(status))
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3415 "Failure in Join WDI API, free all the memory " );
3416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3417 vos_mem_free(pWdaParams) ;
3418 joinReqParam->status = eSIR_FAILURE ;
3419 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return CONVERT_WDI2VOS_STATUS(status) ;
3422}
Jeff Johnson295189b2012-06-20 16:38:30 -07003423/*
3424 * FUNCTION: WDA_SwitchChannelReqCallback
3425 * send Switch channel RSP back to PE
3426 */
3427void WDA_SwitchChannelReqCallback(
3428 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3429{
3430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3431 tWDA_CbContext *pWDA;
3432 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003434 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 if(NULL == pWdaParams)
3436 {
3437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003438 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 VOS_ASSERT(0) ;
3440 return ;
3441 }
3442 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3443 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3444
3445#ifdef WLAN_FEATURE_VOWIFI
3446 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3447#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3449 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003451 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 return ;
3454}
Jeff Johnson295189b2012-06-20 16:38:30 -07003455/*
3456 * FUNCTION: WDA_ProcessChannelSwitchReq
3457 * Request to WDI to switch channel REQ params.
3458 */
3459VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3460 tSwitchChannelParams *pSwitchChanParams)
3461{
3462 WDI_Status status = WDI_STATUS_SUCCESS ;
3463 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3464 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3465 sizeof(WDI_SwitchChReqParamsType)) ;
3466 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003468 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 if(NULL == wdiSwitchChanParam)
3470 {
3471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 VOS_ASSERT(0);
3474 return VOS_STATUS_E_NOMEM;
3475 }
3476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3477 if(NULL == pWdaParams)
3478 {
3479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 VOS_ASSERT(0);
3482 vos_mem_free(wdiSwitchChanParam);
3483 return VOS_STATUS_E_NOMEM;
3484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3486#ifndef WLAN_FEATURE_VOWIFI
3487 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3488 pSwitchChanParams->localPowerConstraint;
3489#endif
3490 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3491 pSwitchChanParams->secondaryChannelOffset;
3492 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 /* Store req pointer, as this will be used for response */
3494 /* store Params pass it to WDI */
3495 pWdaParams->pWdaContext = pWDA;
3496 pWdaParams->wdaMsgParam = pSwitchChanParams;
3497 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498#ifdef WLAN_FEATURE_VOWIFI
3499 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3500 = pSwitchChanParams->maxTxPower;
3501 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3502 pSwitchChanParams ->selfStaMacAddr,
3503 sizeof(tSirMacAddr));
3504#endif
3505 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3506 pSwitchChanParams->bssId,
3507 sizeof(tSirMacAddr));
3508
3509 status = WDI_SwitchChReq(wdiSwitchChanParam,
3510 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 if(IS_WDI_STATUS_FAILURE(status))
3512 {
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3514 "Failure in process channel switch Req WDI API, free all the memory " );
3515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3516 vos_mem_free(pWdaParams) ;
3517 pSwitchChanParams->status = eSIR_FAILURE ;
3518 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 return CONVERT_WDI2VOS_STATUS(status) ;
3521}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003522
3523/*
3524 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3525 * send Switch channel RSP back to PE
3526 */
3527void WDA_SwitchChannelReqCallback_V1(
3528 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3529 void* pUserData)
3530{
3531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3532 tWDA_CbContext *pWDA;
3533 tSwitchChannelParams *pSwitchChanParams;
3534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3535 "<------ %s " ,__func__);
3536
3537 if (NULL == pWdaParams)
3538 {
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3540 "%s: pWdaParams received NULL", __func__);
3541 VOS_ASSERT(0);
3542 return ;
3543 }
3544 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3545 pSwitchChanParams =
3546 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3547 pSwitchChanParams->channelSwitchSrc =
3548 wdiSwitchChanRsp->channelSwitchSrc;
3549#ifdef WLAN_FEATURE_VOWIFI
3550 pSwitchChanParams->txMgmtPower =
3551 wdiSwitchChanRsp->ucTxMgmtPower;
3552#endif
3553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3554 vos_mem_free(pWdaParams);
3555 pSwitchChanParams->status =
3556 wdiSwitchChanRsp->wdiStatus ;
3557 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3558 (void *)pSwitchChanParams , 0);
3559 return;
3560}
3561
3562/*
3563 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3564 * Request to WDI to switch channel REQ params.
3565 */
3566VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3567 tSwitchChannelParams *pSwitchChanParams)
3568{
3569 WDI_Status status = WDI_STATUS_SUCCESS ;
3570 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3571 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3572 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3573 tWDA_ReqParams *pWdaParams ;
3574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3575 "------> %s " ,__func__);
3576 if (NULL == wdiSwitchChanParam)
3577 {
3578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3579 "%s: VOS MEM Alloc Failure", __func__);
3580 VOS_ASSERT(0);
3581 return VOS_STATUS_E_NOMEM;
3582 }
3583 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3584 if (NULL == pWdaParams)
3585 {
3586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3587 "%s: VOS MEM Alloc Failure", __func__);
3588 VOS_ASSERT(0);
3589 vos_mem_free(wdiSwitchChanParam);
3590 return VOS_STATUS_E_NOMEM;
3591 }
3592 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3593 pSwitchChanParams->channelSwitchSrc;
3594
3595 wdiSwitchChanParam->wdiChInfo.ucChannel =
3596 pSwitchChanParams->channelNumber;
3597#ifndef WLAN_FEATURE_VOWIFI
3598 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3599 pSwitchChanParams->localPowerConstraint;
3600#endif
3601 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3602 pSwitchChanParams->secondaryChannelOffset;
3603 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3604 /* Store req pointer, as this will be used for response */
3605 /* store Params pass it to WDI */
3606 pWdaParams->pWdaContext = pWDA;
3607 pWdaParams->wdaMsgParam = pSwitchChanParams;
3608 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3609#ifdef WLAN_FEATURE_VOWIFI
3610 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3611 pSwitchChanParams->maxTxPower;
3612 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3613 pSwitchChanParams ->selfStaMacAddr,
3614 sizeof(tSirMacAddr));
3615#endif
3616 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3617 pSwitchChanParams->bssId,
3618 sizeof(tSirMacAddr));
3619
3620 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3621 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3622 pWdaParams);
3623 if (IS_WDI_STATUS_FAILURE(status))
3624 {
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3626 "Failure in process channel switch Req WDI "
3627 "API, free all the memory " );
3628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3629 vos_mem_free(pWdaParams) ;
3630 pSwitchChanParams->status = eSIR_FAILURE ;
3631 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3632 (void *)pSwitchChanParams, 0) ;
3633 }
3634 return CONVERT_WDI2VOS_STATUS(status) ;
3635}
3636
Jeff Johnson295189b2012-06-20 16:38:30 -07003637/*
3638 * FUNCTION: WDA_ConfigBssReqCallback
3639 * config BSS Req Callback, called by WDI
3640 */
3641void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3642 ,void* pUserData)
3643{
3644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3645 tWDA_CbContext *pWDA;
3646 tAddBssParams *configBssReqParam;
3647 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 if(NULL == pWdaParams)
3651 {
3652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 VOS_ASSERT(0) ;
3655 return ;
3656 }
3657 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3658 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3659 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003661 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3663 {
3664 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3665 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3667 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3668 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3669
3670 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3671 {
3672 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3673 {
3674 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3675 staConfigBssParam->staType = STA_ENTRY_BSSID;
3676 }
3677 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3678 (staConfigBssParam->staType == STA_ENTRY_SELF))
3679 {
3680 /* This is the 1st add BSS Req for the BTAMP STA */
3681 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3682 staConfigBssParam->staType = STA_ENTRY_BSSID;
3683 }
3684 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3685 (staConfigBssParam->staType == STA_ENTRY_PEER))
3686 {
3687 /* This is the 2nd ADD BSS Request that is sent
3688 * on the BTAMP STA side. The Sta type is
3689 * set to STA_ENTRY_PEER here.*/
3690 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3691 }
3692 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3693 (staConfigBssParam->staType == STA_ENTRY_SELF))
3694 {
3695 /* statype is already set by PE.
3696 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3697 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3698 staConfigBssParam->staType = STA_ENTRY_BSSID;
3699 }
3700 else
3701 {
3702 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3703 staConfigBssParam->staType = STA_ENTRY_PEER;
3704 }
3705 }
3706 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3707 {
3708 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3709 staConfigBssParam->staType = STA_ENTRY_SELF;
3710 }
3711 else
3712 {
3713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3714 "Invalid operation mode specified");
3715 VOS_ASSERT(0);
3716 }
3717
3718 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003720 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3723 sizeof(tSirMacAddr));
3724 staConfigBssParam->txChannelWidthSet =
3725 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3727 staConfigBssParam->htCapable)
3728 {
3729 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3730 wdiConfigBssRsp->ucBSSIdx;
3731 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3732 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303733 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3734 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3737 wdiConfigBssRsp->ucBSSIdx,
3738 wdiConfigBssRsp->ucSTAIdx))
3739 {
3740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003741 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 VOS_ASSERT(0) ;
3743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3745 {
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003747 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 VOS_ASSERT(0) ;
3749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003750#ifdef WLAN_FEATURE_VOWIFI
3751 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3752#endif
3753 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303754 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3755 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3757 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 return ;
3760}
Jeff Johnson295189b2012-06-20 16:38:30 -07003761/*
3762 * FUNCTION: WDA_UpdateEdcaParamsForAC
3763 * Update WDI EDCA params with PE edca params
3764 */
3765void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3766 WDI_EdcaParamRecord *wdiEdcaParam,
3767 tSirMacEdcaParamRecord *macEdcaParam)
3768{
3769 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3770 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3771 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3772 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3773 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3774 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3775}
Jeff Johnson295189b2012-06-20 16:38:30 -07003776/*
3777 * FUNCTION: WDA_ProcessConfigBssReq
3778 * Configure BSS before starting Assoc with AP
3779 */
3780VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3781 tAddBssParams* configBssReqParam)
3782{
3783 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303784 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003787 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303788 if (NULL == configBssReqParam)
3789 {
3790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3791 "%s: configBssReqParam is NULL", __func__);
3792 return VOS_STATUS_E_INVAL;
3793 }
3794
3795 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3796 sizeof(WDI_ConfigBSSReqParamsType)) ;
3797
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 if(NULL == wdiConfigBssReqParam)
3799 {
3800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 VOS_ASSERT(0);
3803 return VOS_STATUS_E_NOMEM;
3804 }
3805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3806 if(NULL == pWdaParams)
3807 {
3808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 VOS_ASSERT(0);
3811 vos_mem_free(wdiConfigBssReqParam);
3812 return VOS_STATUS_E_NOMEM;
3813 }
Kiran4a17ebe2013-01-31 10:43:43 -08003814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3815 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3818 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 /* Store Init Req pointer, as this will be used for response */
3820 /* store Params pass it to WDI */
3821 pWdaParams->pWdaContext = pWDA;
3822 pWdaParams->wdaMsgParam = configBssReqParam;
3823 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3825 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 if(IS_WDI_STATUS_FAILURE(status))
3827 {
3828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3829 "Failure in Config BSS WDI API, free all the memory " );
3830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3831 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 return CONVERT_WDI2VOS_STATUS(status) ;
3836}
Jeff Johnson295189b2012-06-20 16:38:30 -07003837#ifdef ENABLE_HAL_COMBINED_MESSAGES
3838/*
3839 * FUNCTION: WDA_PostAssocReqCallback
3840 * Post ASSOC req callback, send RSP back to PE
3841 */
3842void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3843 void* pUserData)
3844{
3845 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3846 tPostAssocParams *postAssocReqParam =
3847 (tPostAssocParams *)pWDA->wdaMsgParam ;
3848 /*STA context within the BSS Params*/
3849 tAddStaParams *staPostAssocParam =
3850 &postAssocReqParam->addBssParams.staContext ;
3851 /*STA Params for self STA*/
3852 tAddStaParams *selfStaPostAssocParam =
3853 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003855 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003856 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003857 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3859 {
3860 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3861 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3862 sizeof(tSirMacAddr)) ;
3863 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3864 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3865 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3867 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303868 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3870 pWDA->wdaWdiApiMsgParam = NULL;
3871 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 return ;
3874}
Jeff Johnson295189b2012-06-20 16:38:30 -07003875/*
3876 * FUNCTION: WDA_ProcessPostAssocReq
3877 * Trigger POST ASSOC processing in WDI
3878 */
3879VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3880 tPostAssocParams *postAssocReqParam)
3881{
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 WDI_Status status = WDI_STATUS_SUCCESS ;
3883
3884 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3885 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3886 sizeof(WDI_PostAssocReqParamsType)) ;
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003889
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if(NULL == wdiPostAssocReqParam)
3891 {
3892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 VOS_ASSERT(0);
3895 return VOS_STATUS_E_NOMEM;
3896 }
3897
3898 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3899 {
3900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 VOS_ASSERT(0);
3903 return VOS_STATUS_E_FAILURE;
3904 }
3905
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 /* update BSS params into WDI structure */
3907 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3908 &postAssocReqParam->addBssParams) ;
3909 /* update STA params into WDI structure */
3910 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3911 &postAssocReqParam->addStaParams) ;
3912
3913 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3914 postAssocReqParam->addBssParams.highPerformance;
3915 WDA_UpdateEdcaParamsForAC(pWDA,
3916 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3917 &postAssocReqParam->addBssParams.acbe);
3918 WDA_UpdateEdcaParamsForAC(pWDA,
3919 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3920 &postAssocReqParam->addBssParams.acbk);
3921 WDA_UpdateEdcaParamsForAC(pWDA,
3922 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3923 &postAssocReqParam->addBssParams.acvi);
3924 WDA_UpdateEdcaParamsForAC(pWDA,
3925 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3926 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 /* Store Init Req pointer, as this will be used for response */
3928 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 /* store Params pass it to WDI */
3930 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3932 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 if(IS_WDI_STATUS_FAILURE(status))
3934 {
3935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3936 "Failure in Post Assoc WDI API, free all the memory " );
3937 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3938 pWDA->wdaWdiApiMsgParam = NULL;
3939 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003941 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 return CONVERT_WDI2VOS_STATUS(status) ;
3944}
3945#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003946/*
3947 * FUNCTION: WDA_AddStaReqCallback
3948 * ADD STA req callback, send RSP back to PE
3949 */
3950void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3951 void* pUserData)
3952{
3953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3954 tWDA_CbContext *pWDA;
3955 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 if(NULL == pWdaParams)
3959 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 VOS_ASSERT(0) ;
3962 return ;
3963 }
3964 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3965 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003967 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3969 {
3970 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3971 /*TODO: UMAC structure doesn't have these fields*/
3972 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3973 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3974 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3975 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3976 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3977 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003978#ifdef FEATURE_WLAN_TDLS
3979 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3980 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3981#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003983#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 {
3985 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3986 wdiConfigStaRsp->ucBssIdx;
3987 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3988 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303989 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3990 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 }
3992 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3993 {
3994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003995 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 VOS_ASSERT(0) ;
3997 return ;
3998 }
3999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4001 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 return ;
4004}
Jeff Johnson295189b2012-06-20 16:38:30 -07004005/*
4006 * FUNCTION: WDA_ConfigStaReq
4007 * Trigger Config STA processing in WDI
4008 */
4009VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
4010 tAddStaParams *addStaReqParam)
4011{
Jeff Johnson295189b2012-06-20 16:38:30 -07004012 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4014 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4015 sizeof(WDI_ConfigSTAReqParamsType)) ;
4016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if(NULL == wdiConfigStaReqParam)
4020 {
4021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_ASSERT(0);
4024 return VOS_STATUS_E_NOMEM;
4025 }
4026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4027 if(NULL == pWdaParams)
4028 {
4029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 VOS_ASSERT(0);
4032 vos_mem_free(wdiConfigStaReqParam);
4033 return VOS_STATUS_E_NOMEM;
4034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 /* update STA params into WDI structure */
4037 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4038 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 /* Store Init Req pointer, as this will be used for response */
4040 /* store Params pass it to WDI */
4041 pWdaParams->pWdaContext = pWDA;
4042 pWdaParams->wdaMsgParam = addStaReqParam;
4043 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
4045 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 if(IS_WDI_STATUS_FAILURE(status))
4047 {
4048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4049 "Failure in Config STA WDI API, free all the memory " );
4050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4051 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 return CONVERT_WDI2VOS_STATUS(status) ;
4056}
Jeff Johnson295189b2012-06-20 16:38:30 -07004057/*
4058 * FUNCTION: WDA_DelBSSReqCallback
4059 * Dens DEL BSS RSP back to PE
4060 */
4061void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
4062 void* pUserData)
4063{
4064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4065 tWDA_CbContext *pWDA;
4066 tDeleteBssParams *delBssReqParam;
4067 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 if(NULL == pWdaParams)
4071 {
4072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 VOS_ASSERT(0) ;
4075 return ;
4076 }
4077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4078 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004079 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4081 {
4082 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4083 sizeof(tSirMacAddr)) ;
4084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 VOS_ASSERT(0) ;
4090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4092 {
4093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004094 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 VOS_ASSERT(0) ;
4096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4098 {
4099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004100 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 VOS_ASSERT(0) ;
4102 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304103
4104 WLANTL_StartForwarding(staIdx,0,0);
4105
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 /* reset the the system role*/
4109 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4110
4111 /* Reset the BA related information */
4112 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4113 {
4114 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4115 {
4116 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4117 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304118 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 /* Reset framesTxed counters here */
4120 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4121 {
4122 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4123 }
4124 }
4125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 return ;
4128}
4129
Jeff Johnson295189b2012-06-20 16:38:30 -07004130/*
4131 * FUNCTION: WDA_ProcessDelBssReq
4132 * Init DEL BSS req with WDI
4133 */
4134VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4135 tDeleteBssParams *delBssParam)
4136{
4137 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004138 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4139 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4140 sizeof(WDI_DelBSSReqParamsType)) ;
4141 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 if(NULL == wdiDelBssReqParam)
4145 {
4146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 VOS_ASSERT(0);
4149 return VOS_STATUS_E_NOMEM;
4150 }
4151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4152 if(NULL == pWdaParams)
4153 {
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 VOS_ASSERT(0);
4157 vos_mem_free(wdiDelBssReqParam);
4158 return VOS_STATUS_E_NOMEM;
4159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4161 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4162
4163 /* Store Init Req pointer, as this will be used for response */
4164 /* store Params pass it to WDI */
4165 pWdaParams->pWdaContext = pWDA;
4166 pWdaParams->wdaMsgParam = delBssParam;
4167 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 status = WDI_DelBSSReq(wdiDelBssReqParam,
4169 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 if(IS_WDI_STATUS_FAILURE(status))
4171 {
4172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4173 "Failure in Del BSS WDI API, free all the memory " );
4174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4175 vos_mem_free(pWdaParams) ;
4176 delBssParam->status = eSIR_FAILURE ;
4177 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 return CONVERT_WDI2VOS_STATUS(status) ;
4180}
Jeff Johnson295189b2012-06-20 16:38:30 -07004181/*
4182 * FUNCTION: WDA_DelSTAReqCallback
4183 * Dens DEL STA RSP back to PE
4184 */
4185void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4186 void* pUserData)
4187{
4188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4189 tWDA_CbContext *pWDA;
4190 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004192 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 if(NULL == pWdaParams)
4194 {
4195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004196 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 VOS_ASSERT(0) ;
4198 return ;
4199 }
4200 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4201 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004202 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4204 {
4205 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004208 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_ASSERT(0) ;
4210 }
4211 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304212 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004213 }
4214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 /*Reset the BA information corresponding to this STAIdx */
4217 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4218 WDA_INVALID_STA_INDEX;
4219 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304220 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 return ;
4223}
Jeff Johnson295189b2012-06-20 16:38:30 -07004224/*
4225 * FUNCTION: WDA_ProcessDelStaReq
4226 * Init DEL STA req with WDI
4227 */
4228VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4229 tDeleteStaParams *delStaParam)
4230{
4231 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4233 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4234 sizeof(WDI_DelSTAReqParamsType)) ;
4235 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 if(NULL == wdiDelStaReqParam)
4239 {
4240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 VOS_ASSERT(0);
4243 return VOS_STATUS_E_NOMEM;
4244 }
4245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4246 if(NULL == pWdaParams)
4247 {
4248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 VOS_ASSERT(0);
4251 vos_mem_free(wdiDelStaReqParam);
4252 return VOS_STATUS_E_NOMEM;
4253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4255 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 /* Store Init Req pointer, as this will be used for response */
4257 /* store Params pass it to WDI */
4258 pWdaParams->pWdaContext = pWDA;
4259 pWdaParams->wdaMsgParam = delStaParam;
4260 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004261 status = WDI_DelSTAReq(wdiDelStaReqParam,
4262 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 if(IS_WDI_STATUS_FAILURE(status))
4264 {
4265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4266 "Failure in Del STA WDI API, free all the memory status = %d",
4267 status );
4268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4269 vos_mem_free(pWdaParams) ;
4270 delStaParam->status = eSIR_FAILURE ;
4271 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 return CONVERT_WDI2VOS_STATUS(status) ;
4274}
Jeff Johnson295189b2012-06-20 16:38:30 -07004275void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4276{
4277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4278 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304279 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 if(NULL == pWdaParams)
4283 {
4284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 VOS_ASSERT(0) ;
4287 return ;
4288 }
4289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4290 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4292 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4294 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4295 pwdiAddSTASelfRsp->macSelfSta,
4296 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304297 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4298 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4299 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4300 {
4301 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4302 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 return ;
4306}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304307
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
4309 * FUNCTION: WDA_ProcessAddStaSelfReq
4310 *
4311 */
4312VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4313{
4314 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004315 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4317 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4318 sizeof(WDI_AddSTASelfReqParamsType)) ;
4319 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004321 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304322 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 if( NULL == wdiAddStaSelfReq )
4324 {
4325 VOS_ASSERT( 0 );
4326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004327 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304328 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4329 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 return( VOS_STATUS_E_NOMEM );
4331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 if( NULL == pWdaParams )
4334 {
4335 VOS_ASSERT( 0 );
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004337 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304338 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4339 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 vos_mem_free(wdiAddStaSelfReq) ;
4341 return( VOS_STATUS_E_NOMEM );
4342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004345 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 /* Store Init Req pointer, as this will be used for response */
4347 /* store Params pass it to WDI */
4348 pWdaParams->pWdaContext = pWDA;
4349 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4350 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004351 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004352
Jeff Johnson43971f52012-07-17 12:26:56 -07004353 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 {
4355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4356 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004357 wstatus );
4358 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4360 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304361 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4362 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 pAddStaSelfReq->status = eSIR_FAILURE ;
4364 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4365 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004366 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004367}
Jeff Johnson295189b2012-06-20 16:38:30 -07004368/*
4369 * FUNCTION: WDA_DelSTASelfRespCallback
4370 *
4371 */
4372void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4373 wdiDelStaSelfRspParams , void* pUserData)
4374{
4375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4376 tWDA_CbContext *pWDA;
4377 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004379 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 if (NULL == pWdaParams)
4381 {
4382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004383 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 VOS_ASSERT(0);
4385 return;
4386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4388 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004390 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391
4392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4393 vos_mem_free(pWdaParams) ;
4394
4395 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 return ;
4397}
Jeff Johnson295189b2012-06-20 16:38:30 -07004398/*
4399 * FUNCTION: WDA_DelSTASelfReqCallback
4400 *
4401 */
4402void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4403 void* pUserData)
4404{
4405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4406 tWDA_CbContext *pWDA;
4407 tDelStaSelfParams *delStaSelfParams;
4408
4409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304410 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004411 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004412
4413 if (NULL == pWdaParams)
4414 {
4415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004416 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 VOS_ASSERT(0);
4418 return;
4419 }
4420
4421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4422 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4423
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004424 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425
4426 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4427 {
4428 VOS_ASSERT(0);
4429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4430 vos_mem_free(pWdaParams) ;
4431 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4432 }
4433
4434 return ;
4435}
4436
4437/*
4438 * FUNCTION: WDA_DelSTASelfReq
4439 * Trigger Config STA processing in WDI
4440 */
4441VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4442 tDelStaSelfParams* pDelStaSelfReqParam)
4443{
4444 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004445 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 tWDA_ReqParams *pWdaParams = NULL;
4447 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4448 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4449 sizeof(WDI_DelSTASelfReqParamsType)) ;
4450
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004452 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 if( NULL == wdiDelStaSelfReq )
4454 {
4455 VOS_ASSERT( 0 );
4456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004457 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 return( VOS_STATUS_E_NOMEM );
4459 }
4460
4461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4462 if( NULL == pWdaParams )
4463 {
4464 VOS_ASSERT( 0 );
4465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004466 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 vos_mem_free(wdiDelStaSelfReq) ;
4468 return( VOS_STATUS_E_NOMEM );
4469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 pWdaParams->pWdaContext = pWDA;
4471 /* Store param pointer as passed in by caller */
4472 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4473 /* store Params pass it to WDI */
4474 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4476 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4477
4478 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4479 wdiDelStaSelfReq->pUserData = pWdaParams;
4480
Jeff Johnson43971f52012-07-17 12:26:56 -07004481 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4483
Jeff Johnson43971f52012-07-17 12:26:56 -07004484 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 {
4486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4487 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4488 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004489 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4491 vos_mem_free(pWdaParams) ;
4492 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4493 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4494 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004495 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004496}
4497
Jeff Johnson295189b2012-06-20 16:38:30 -07004498/*
4499 * FUNCTION: WDA_SendMsg
4500 * Send Message back to PE
4501 */
4502void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4503 void *pBodyptr, tANI_U32 bodyVal)
4504{
4505 tSirMsgQ msg = {0} ;
4506 tANI_U32 status = VOS_STATUS_SUCCESS ;
4507 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 msg.type = msgType;
4509 msg.bodyval = bodyVal;
4510 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 if (VOS_STATUS_SUCCESS != status)
4513 {
4514 if(NULL != pBodyptr)
4515 {
4516 vos_mem_free(pBodyptr);
4517 }
4518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004519 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 VOS_ASSERT(0) ;
4521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 return ;
4523}
Jeff Johnson295189b2012-06-20 16:38:30 -07004524/*
4525 * FUNCTION: WDA_UpdateBSSParams
4526 * Translated WDA/PE BSS info into WDI BSS info..
4527 */
4528void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4529 WDI_ConfigBSSReqInfoType *wdiBssParams,
4530 tAddBssParams *wdaBssParams)
4531{
4532 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304533 v_U8_t i = 0;
4534
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 /* copy bssReq Params to WDI structure */
4536 vos_mem_copy(wdiBssParams->macBSSID,
4537 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4538 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4539 sizeof(tSirMacAddr)) ;
4540 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4541 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4542 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 wdiBssParams->ucShortSlotTimeSupported =
4544 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4546 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4547 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4548 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4549 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4550
4551 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4552 wdiBssParams->ucTXOPProtectionFullSupport =
4553 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4555 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4558 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4559 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4560 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4561
Chet Lanctot186b5732013-03-18 10:26:30 -07004562 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4563
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 /* copy SSID into WDI structure */
4565 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4566 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4567 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4569 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571#ifdef WLAN_FEATURE_VOWIFI
4572 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4573#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576#ifdef WLAN_FEATURE_VOWIFI_11R
4577 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 if(wdiBssParams->bExtSetStaKeyParamValid)
4579 {
4580 /* copy set STA key params to WDI structure */
4581 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4582 wdaBssParams->extSetStaKeyParam.staIdx;
4583 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4584 wdaBssParams->extSetStaKeyParam.encType;
4585 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4586 wdaBssParams->extSetStaKeyParam.wepType;
4587 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4588 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4590 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004591 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4593 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4594 {
4595 WDA_GetWepKeysFromCfg( pWDA,
4596 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4597 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4598 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4599 }
4600 else
4601 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4603 keyIndex++)
4604 {
4605 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4606 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4607 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4608 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4609 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4610 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304611
4612 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4613 {
4614 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4615 {
4616 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4617 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4618 }
4619
4620 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4621 {
4622 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4623 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4624 }
4625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4626 FL("%s: Negated Keys"), __func__);
4627 }
4628 else
4629 {
4630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4631 FL("%s: No change in Keys "), __func__);
4632 vos_mem_copy(
4633 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4634 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4635 WLAN_MAX_KEY_RSC_LEN);
4636 vos_mem_copy(
4637 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4638 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4639 SIR_MAC_MAX_KEY_LENGTH);
4640 }
4641
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4643 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4644 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4645 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304647 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 }
4650 }
4651 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4652 }
4653 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4654 {
4655 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4656 sizeof(wdaBssParams->extSetStaKeyParam) );
4657 }
4658#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004659#ifdef WLAN_FEATURE_11AC
4660 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4661 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4662#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004663
4664 return ;
4665}
Jeff Johnson295189b2012-06-20 16:38:30 -07004666/*
4667 * FUNCTION: WDA_UpdateSTAParams
4668 * Translated WDA/PE BSS info into WDI BSS info..
4669 */
4670void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4671 WDI_ConfigStaReqInfoType *wdiStaParams,
4672 tAddStaParams *wdaStaParams)
4673{
4674 tANI_U8 i = 0;
4675 /* Update STA params */
4676 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4677 sizeof(tSirMacAddr)) ;
4678 wdiStaParams->usAssocId = wdaStaParams->assocId;
4679 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004680 wdiStaParams->staIdx = wdaStaParams->staIdx;
4681
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 wdiStaParams->ucShortPreambleSupported =
4683 wdaStaParams->shortPreambleSupported;
4684 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4685 sizeof(tSirMacAddr)) ;
4686 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4687
4688 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4689
4690 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4691 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4692 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4693 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4694 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4695 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4696 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4697
4698 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4699 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 wdiStaParams->wdiSupportedRates.opRateMode =
4701 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4703 {
4704 wdiStaParams->wdiSupportedRates.llbRates[i] =
4705 wdaStaParams->supportedRates.llbRates[i];
4706 }
4707 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4708 {
4709 wdiStaParams->wdiSupportedRates.llaRates[i] =
4710 wdaStaParams->supportedRates.llaRates[i];
4711 }
4712 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4713 {
4714 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4715 wdaStaParams->supportedRates.aniLegacyRates[i];
4716 }
4717 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4718 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004719#ifdef WLAN_FEATURE_11AC
4720 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4721 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4722 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4723 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4724#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4726 {
4727 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4728 wdaStaParams->supportedRates.supportedMCSSet[i];
4729 }
4730 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4731 wdaStaParams->supportedRates.rxHighestDataRate;
4732
4733 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4734
4735 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4736
4737 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4738 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4739 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4740
4741 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4742 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4743 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4744 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004746#ifdef WLAN_FEATURE_11AC
4747 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4748 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004749 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304750 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4751 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4752 * must be set by default */
4753 if ( wdiStaParams->vhtTxMUBformeeCapable )
4754 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004755#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004756 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4757 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 return ;
4759}
Jeff Johnson295189b2012-06-20 16:38:30 -07004760/*
4761 * -------------------------------------------------------------------------
4762 * CFG update to WDI
4763 * -------------------------------------------------------------------------
4764 */
4765
4766 /*
4767 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4768 * Convert the WNI CFG ID to HAL CFG ID
4769 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004770static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004771{
4772 switch(wniCfgId)
4773 {
4774 case WNI_CFG_STA_ID:
4775 return QWLAN_HAL_CFG_STA_ID;
4776 case WNI_CFG_CURRENT_TX_ANTENNA:
4777 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4778 case WNI_CFG_CURRENT_RX_ANTENNA:
4779 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4780 case WNI_CFG_LOW_GAIN_OVERRIDE:
4781 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4782 case WNI_CFG_POWER_STATE_PER_CHAIN:
4783 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4784 case WNI_CFG_CAL_PERIOD:
4785 return QWLAN_HAL_CFG_CAL_PERIOD;
4786 case WNI_CFG_CAL_CONTROL:
4787 return QWLAN_HAL_CFG_CAL_CONTROL;
4788 case WNI_CFG_PROXIMITY:
4789 return QWLAN_HAL_CFG_PROXIMITY;
4790 case WNI_CFG_NETWORK_DENSITY:
4791 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4792 case WNI_CFG_MAX_MEDIUM_TIME:
4793 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4794 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4795 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4796 case WNI_CFG_RTS_THRESHOLD:
4797 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4798 case WNI_CFG_SHORT_RETRY_LIMIT:
4799 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4800 case WNI_CFG_LONG_RETRY_LIMIT:
4801 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4802 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4803 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4804 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4805 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4806 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4807 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4808 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4809 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4810 case WNI_CFG_FIXED_RATE:
4811 return QWLAN_HAL_CFG_FIXED_RATE;
4812 case WNI_CFG_RETRYRATE_POLICY:
4813 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4814 case WNI_CFG_RETRYRATE_SECONDARY:
4815 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4816 case WNI_CFG_RETRYRATE_TERTIARY:
4817 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4818 case WNI_CFG_FORCE_POLICY_PROTECTION:
4819 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4820 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4821 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4822 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4823 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4824 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4825 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4826 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4827 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4828 case WNI_CFG_MAX_BA_SESSIONS:
4829 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4830 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4831 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4832 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4833 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4834 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4835 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4836 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4837 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4838 case WNI_CFG_STATS_PERIOD:
4839 return QWLAN_HAL_CFG_STATS_PERIOD;
4840 case WNI_CFG_CFP_MAX_DURATION:
4841 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4842#if 0 /*This is not part of CFG*/
4843 case WNI_CFG_FRAME_TRANS_ENABLED:
4844 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4845#endif
4846 case WNI_CFG_DTIM_PERIOD:
4847 return QWLAN_HAL_CFG_DTIM_PERIOD;
4848 case WNI_CFG_EDCA_WME_ACBK:
4849 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4850 case WNI_CFG_EDCA_WME_ACBE:
4851 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4852 case WNI_CFG_EDCA_WME_ACVI:
4853 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4854 case WNI_CFG_EDCA_WME_ACVO:
4855 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4856#if 0
4857 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4858 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4859 case WNI_CFG_TELE_BCN_TRANS_LI:
4860 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4861 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4862 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4863 case WNI_CFG_TELE_BCN_MAX_LI:
4864 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4865 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4866 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4867#endif
4868 case WNI_CFG_ENABLE_CLOSE_LOOP:
4869 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004870 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4871 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304872 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4873 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 default:
4875 {
4876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004877 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 wniCfgId);
4879 return VOS_STATUS_E_INVAL;
4880 }
4881 }
4882}
Jeff Johnson295189b2012-06-20 16:38:30 -07004883/*
4884 * FUNCTION: WDA_UpdateCfgCallback
4885 *
4886 */
4887void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4888{
4889 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4890 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4891 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004893 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 /*
4895 * currently there is no response message is expected between PE and
4896 * WDA, Failure return from WDI is a ASSERT condition
4897 */
4898 if(WDI_STATUS_SUCCESS != wdiStatus)
4899 {
4900 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004901 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4903 }
4904
4905 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4906 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4907 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 return ;
4909}
Jeff Johnson295189b2012-06-20 16:38:30 -07004910/*
4911 * FUNCTION: WDA_UpdateCfg
4912 *
4913 */
4914VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4915{
4916
4917 WDI_Status status = WDI_STATUS_SUCCESS ;
4918 tANI_U32 val =0;
4919 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4920 tHalCfg *configData;
4921 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4922 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 if (NULL == pMac )
4926 {
4927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004928 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 return VOS_STATUS_E_FAILURE;
4930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 if(WDA_START_STATE != pWDA->wdaState)
4932 {
4933 return VOS_STATUS_E_FAILURE;
4934 }
4935
4936 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4937 {
4938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 VOS_ASSERT(0);
4941 return VOS_STATUS_E_FAILURE;
4942 }
4943
4944 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4945 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 if(NULL == wdiCfgReqParam)
4947 {
4948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_ASSERT(0);
4951 return VOS_STATUS_E_NOMEM;
4952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4954 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 if(NULL == wdiCfgReqParam->pConfigBuffer)
4956 {
4957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 vos_mem_free(wdiCfgReqParam);
4960 VOS_ASSERT(0);
4961 return VOS_STATUS_E_NOMEM;
4962 }
4963
4964 /*convert the WNI CFG Id to HAL CFG Id*/
4965 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4966 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4967
4968 /*TODO: revisit this for handling string parameters */
4969 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4970 &val) != eSIR_SUCCESS)
4971 {
4972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004973 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4975 vos_mem_free(wdiCfgReqParam);
4976 return eSIR_FAILURE;
4977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4979 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4980 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4981 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4982 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4983
4984 /* store Params pass it to WDI */
4985 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4987 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4988 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 if(IS_WDI_STATUS_FAILURE(status))
4990 {
4991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4992 "Failure in Update CFG WDI API, free all the memory " );
4993 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4994 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4995 pWDA->wdaWdiCfgApiMsgParam = NULL;
4996 /* Failure is not expected */
4997 VOS_ASSERT(0) ;
4998 }
4999#else
5000 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5001 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5002 pWDA->wdaWdiCfgApiMsgParam = NULL;
5003#endif
5004 return CONVERT_WDI2VOS_STATUS(status) ;
5005}
5006
Jeff Johnson295189b2012-06-20 16:38:30 -07005007VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5008 v_U8_t *pDefaultKeyId,
5009 v_U8_t *pNumKeys,
5010 WDI_KeysType *pWdiKeys )
5011{
5012 v_U32_t i, j, defKeyId = 0;
5013 v_U32_t val = SIR_MAC_KEY_LENGTH;
5014 VOS_STATUS status = WDI_STATUS_SUCCESS;
5015 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 if (NULL == pMac )
5017 {
5018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005019 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 return VOS_STATUS_E_FAILURE;
5021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5023 &defKeyId ))
5024 {
5025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5026 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5027 }
5028
5029 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 /* Need to extract ALL of the configured WEP Keys */
5031 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5032 {
5033 val = SIR_MAC_KEY_LENGTH;
5034 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5035 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5036 pWdiKeys[j].key,
5037 &val ))
5038 {
5039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005040 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 }
5042 else
5043 {
5044 pWdiKeys[j].keyId = (tANI_U8) i;
5045 /*
5046 * Actually, a DC (Don't Care) because
5047 * this is determined (and set) by PE/MLME
5048 */
5049 pWdiKeys[j].unicast = 0;
5050 /*
5051 * Another DC (Don't Care)
5052 */
5053 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5054 /* Another DC (Don't Care). Unused for WEP */
5055 pWdiKeys[j].paeRole = 0;
5056 /* Determined from wlan_cfgGetStr() above.*/
5057 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 j++;
5059 *pNumKeys = (tANI_U8) j;
5060 }
5061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 return status;
5063}
Jeff Johnson295189b2012-06-20 16:38:30 -07005064/*
5065 * FUNCTION: WDA_SetBssKeyReqCallback
5066 * send SET BSS key RSP back to PE
5067 */
5068void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5069{
5070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5071 tWDA_CbContext *pWDA;
5072 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 if(NULL == pWdaParams)
5076 {
5077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005078 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 VOS_ASSERT(0) ;
5080 return ;
5081 }
5082 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5083 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305084 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5085 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5087 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005088 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 return ;
5091}
Jeff Johnson295189b2012-06-20 16:38:30 -07005092/*
5093 * FUNCTION: WDA_ProcessSetBssKeyReq
5094 * Request to WDI for programming the BSS key( key for
5095 * broadcast/multicast frames Encryption)
5096 */
5097VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5098 tSetBssKeyParams *setBssKeyParams )
5099{
5100 WDI_Status status = WDI_STATUS_SUCCESS ;
5101 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5102 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5103 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5104 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005107 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 if(NULL == wdiSetBssKeyParam)
5109 {
5110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005111 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 VOS_ASSERT(0);
5113 return VOS_STATUS_E_NOMEM;
5114 }
5115 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5116 if(NULL == pWdaParams)
5117 {
5118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 VOS_ASSERT(0);
5121 vos_mem_free(wdiSetBssKeyParam);
5122 return VOS_STATUS_E_NOMEM;
5123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 /* copy set BSS params to WDI structure */
5126 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5127 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5128 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 if(setBssKeyParams->encType != eSIR_ED_NONE)
5130 {
5131 if( setBssKeyParams->numKeys == 0 &&
5132 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5133 setBssKeyParams->encType == eSIR_ED_WEP104))
5134 {
5135 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5137 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5138 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5139 }
5140 else
5141 {
5142 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5143 {
5144 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5145 setBssKeyParams->key[keyIndex].keyId;
5146 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5147 setBssKeyParams->key[keyIndex].unicast;
5148 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5149 setBssKeyParams->key[keyIndex].keyDirection;
5150 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5151 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5152 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5153 setBssKeyParams->key[keyIndex].paeRole;
5154 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5155 setBssKeyParams->key[keyIndex].keyLength;
5156 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5157 setBssKeyParams->key[keyIndex].key,
5158 SIR_MAC_MAX_KEY_LENGTH);
5159 }
5160 }
5161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005162 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5163 setBssKeyParams->singleTidRc;
5164 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 /* Store set key pointer, as this will be used for response */
5166 /* store Params pass it to WDI */
5167 pWdaParams->pWdaContext = pWDA;
5168 pWdaParams->wdaMsgParam = setBssKeyParams;
5169 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5171 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5172
5173 if(IS_WDI_STATUS_FAILURE(status))
5174 {
5175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5176 "Failure in Set BSS Key Req WDI API, free all the memory " );
5177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5178 vos_mem_free(pWdaParams) ;
5179 setBssKeyParams->status = eSIR_FAILURE ;
5180 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 return CONVERT_WDI2VOS_STATUS(status) ;
5183}
Jeff Johnson295189b2012-06-20 16:38:30 -07005184/*
5185 * FUNCTION: WDA_RemoveBssKeyReqCallback
5186 * send SET BSS key RSP back to PE
5187 */
5188void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5189{
5190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5191 tWDA_CbContext *pWDA;
5192 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 if(NULL == pWdaParams)
5196 {
5197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005198 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 VOS_ASSERT(0) ;
5200 return ;
5201 }
5202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5203 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5205 vos_mem_free(pWdaParams) ;
5206
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005207 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 return ;
5210}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305211
5212/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305213 * FUNCTION: WDA_GetFrameLogRspCallback
5214 * recieves get frame log response from FW
5215 */
5216void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5217 void* pUserData)
5218{
5219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5220 tWDA_CbContext *pWDA = NULL;
5221 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5222
5223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5224 "<------ Entering: %s " ,__func__);
5225 if(NULL == pWdaParams)
5226 {
5227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5228 "%s: pWdaParams received NULL", __func__);
5229 VOS_ASSERT(0) ;
5230 return ;
5231 }
5232
5233 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5234 if (NULL == pWDA)
5235 {
5236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5237 "%s:pWDA is NULL", __func__);
5238 VOS_ASSERT(0);
5239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5240 vos_mem_free(pWdaParams);
5241 return ;
5242 }
5243
5244 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5245 if(NULL == pGetFrameLogReqParams)
5246 {
5247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5248 "%s: pGetFrameLogReqParams received NULL", __func__);
5249 VOS_ASSERT(0);
5250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5251 vos_mem_free(pWdaParams);
5252 return;
5253 }
5254
5255 pGetFrameLogReqParams->rspStatus = wdiRsp->wdiStatus;
5256 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "%s:GetFrameLog with rsp status %d", __func__, wdiRsp->wdiStatus);
5259 }
5260
5261 if(pGetFrameLogReqParams->getFramelogCallback)
5262 {
5263 pGetFrameLogReqParams->getFramelogCallback(
5264 pGetFrameLogReqParams->pDevContext);
5265 }
5266 else
5267 {
5268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5269 "%s: pGetFrameLogReqParams callback is NULL", __func__);
5270 }
5271
5272 /* free WDI command buffer only */
5273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5274 vos_mem_free(pWdaParams->wdaMsgParam);
5275 vos_mem_free(pWdaParams);
5276
5277 return ;
5278
5279}
5280/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305281 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305282 * recieves Mgmt Logging init response from FW
5283 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305284void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305285 void* pUserData)
5286{
5287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305288 tSirFWLoggingInitParam *pFWLoggingInitParams;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305289
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5291 "<------ %s " ,__func__);
5292
5293 if(NULL == pWdaParams)
5294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5296 "%s: pWdaParams received NULL", __func__);
5297 VOS_ASSERT(0);
5298 return ;
5299 }
5300
5301 if(NULL == pWdaParams->wdaMsgParam)
5302 {
5303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5304 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5305 VOS_ASSERT(0);
5306 vos_mem_free(pWdaParams);
5307 return ;
5308 }
5309
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305310 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305311
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305312 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305313 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305314 pFWLoggingInitParams->fwlogInitCallback(
5315 pFWLoggingInitParams->fwlogInitCbContext,
5316 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305317 }
5318 else
5319 {
5320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305321 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305322 }
5323
5324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5325 vos_mem_free(pWdaParams->wdaMsgParam);
5326 vos_mem_free(pWdaParams);
5327
5328 return;
5329}
5330
5331/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305332 * FUNCTION: WDA_SpoofMacAddrRspCallback
5333 * recieves spoof mac addr response from FW
5334 */
5335void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5336{
5337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5338 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305339
Siddharth Bhal171788a2014-09-29 21:02:40 +05305340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5341 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305342
Siddharth Bhal171788a2014-09-29 21:02:40 +05305343 if(NULL == pWdaParams)
5344 {
5345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5346 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305347 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305348 return ;
5349 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305351
Siddharth Bhal029d6732014-10-09 21:31:23 +05305352 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305354 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305355 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305356 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5357 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305358
Siddharth Bhal171788a2014-09-29 21:02:40 +05305359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305360 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305361 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305362
5363 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305364}
5365
Jeff Johnson295189b2012-06-20 16:38:30 -07005366/*
5367 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5368 * Request to WDI to remove the BSS key( key for broadcast/multicast
5369 * frames Encryption)
5370 */
5371VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5372 tRemoveBssKeyParams *removeBssKeyParams )
5373{
5374 WDI_Status status = WDI_STATUS_SUCCESS ;
5375 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5376 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5377 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5378 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005380 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 if(NULL == wdiRemoveBssKeyParam)
5382 {
5383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 VOS_ASSERT(0);
5386 return VOS_STATUS_E_NOMEM;
5387 }
5388 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5389 if(NULL == pWdaParams)
5390 {
5391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 VOS_ASSERT(0);
5394 vos_mem_free(wdiRemoveBssKeyParam);
5395 return VOS_STATUS_E_NOMEM;
5396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /* copy Remove BSS key params to WDI structure*/
5398 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5399 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5400 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5401 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5402 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 /* Store remove key pointer, as this will be used for response */
5404 /* store Params pass it to WDI */
5405 pWdaParams->pWdaContext = pWDA;
5406 pWdaParams->wdaMsgParam = removeBssKeyParams;
5407 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5409 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 if(IS_WDI_STATUS_FAILURE(status))
5411 {
5412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5413 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5415 vos_mem_free(pWdaParams) ;
5416 removeBssKeyParams->status = eSIR_FAILURE ;
5417 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 return CONVERT_WDI2VOS_STATUS(status) ;
5420}
Jeff Johnson295189b2012-06-20 16:38:30 -07005421/*
5422 * FUNCTION: WDA_SetBssKeyReqCallback
5423 * send SET BSS key RSP back to PE
5424 */
5425void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5426{
5427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5428 tWDA_CbContext *pWDA;
5429 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 if(NULL == pWdaParams)
5433 {
5434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005435 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005436 VOS_ASSERT(0) ;
5437 return ;
5438 }
5439 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5440 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305441 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5442 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5444 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005445 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 return ;
5448}
Jeff Johnson295189b2012-06-20 16:38:30 -07005449/*
5450 * FUNCTION: WDA_ProcessSetStaKeyReq
5451 * Request to WDI for programming the STA key( key for Unicast frames
5452 * Encryption)
5453 */
5454VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5455 tSetStaKeyParams *setStaKeyParams )
5456{
5457 WDI_Status status = WDI_STATUS_SUCCESS ;
5458 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5459 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5460 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5461 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005464 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 if(NULL == wdiSetStaKeyParam)
5466 {
5467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 VOS_ASSERT(0);
5470 return VOS_STATUS_E_NOMEM;
5471 }
5472 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5473 if(NULL == pWdaParams)
5474 {
5475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 VOS_ASSERT(0);
5478 vos_mem_free(wdiSetStaKeyParam);
5479 return VOS_STATUS_E_NOMEM;
5480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 /* copy set STA key params to WDI structure */
5484 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5485 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5486 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5487 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 if(setStaKeyParams->encType != eSIR_ED_NONE)
5489 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005490 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5492 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5493 {
5494 WDA_GetWepKeysFromCfg( pWDA,
5495 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5496 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5497 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5498 }
5499 else
5500 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5502 keyIndex++)
5503 {
5504 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5505 setStaKeyParams->key[keyIndex].keyId;
5506 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5507 setStaKeyParams->key[keyIndex].unicast;
5508 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5509 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5511 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5513 setStaKeyParams->key[keyIndex].paeRole;
5514 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5515 setStaKeyParams->key[keyIndex].keyLength;
5516 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5517 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5518 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5519 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5520 {
5521 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5522 }
5523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5525 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 }
5527 }
5528 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5529 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 /* Store set key pointer, as this will be used for response */
5531 /* store Params pass it to WDI */
5532 pWdaParams->pWdaContext = pWDA;
5533 pWdaParams->wdaMsgParam = setStaKeyParams;
5534 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5536 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 if(IS_WDI_STATUS_FAILURE(status))
5538 {
5539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5540 "Failure in set STA Key Req WDI API, free all the memory " );
5541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5542 vos_mem_free(pWdaParams) ;
5543 setStaKeyParams->status = eSIR_FAILURE ;
5544 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 return CONVERT_WDI2VOS_STATUS(status) ;
5547}
Jeff Johnson295189b2012-06-20 16:38:30 -07005548/*
5549 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5550 * send SET Bcast STA key RSP back to PE
5551 */
5552void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5553{
5554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5555 tWDA_CbContext *pWDA;
5556 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 if(NULL == pWdaParams)
5560 {
5561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005562 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_ASSERT(0) ;
5564 return ;
5565 }
5566 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5567 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5569 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005570 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 return ;
5573}
5574
Jeff Johnson295189b2012-06-20 16:38:30 -07005575/*
5576 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5577 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5578 * Encryption)
5579 */
5580VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5581 tSetStaKeyParams *setStaKeyParams )
5582{
5583 WDI_Status status = WDI_STATUS_SUCCESS ;
5584 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5585 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5586 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5587 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 if(NULL == wdiSetStaKeyParam)
5592 {
5593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 VOS_ASSERT(0);
5596 return VOS_STATUS_E_NOMEM;
5597 }
5598 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5599 if(NULL == pWdaParams)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0);
5604 vos_mem_free(wdiSetStaKeyParam);
5605 return VOS_STATUS_E_NOMEM;
5606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 /* copy set STA key params to WDI structure */
5610 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5611 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5612 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5613 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 if(setStaKeyParams->encType != eSIR_ED_NONE)
5615 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5617 keyIndex++)
5618 {
5619 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5620 setStaKeyParams->key[keyIndex].keyId;
5621 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5622 setStaKeyParams->key[keyIndex].unicast;
5623 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5624 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5626 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5627 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5628 setStaKeyParams->key[keyIndex].paeRole;
5629 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5630 setStaKeyParams->key[keyIndex].keyLength;
5631 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5632 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5635 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 }
5637 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 /* Store set key pointer, as this will be used for response */
5639 /* store Params pass it to WDI */
5640 pWdaParams->pWdaContext = pWDA;
5641 pWdaParams->wdaMsgParam = setStaKeyParams;
5642 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5644 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 if(IS_WDI_STATUS_FAILURE(status))
5646 {
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5648 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5650 vos_mem_free(pWdaParams) ;
5651 setStaKeyParams->status = eSIR_FAILURE ;
5652 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 return CONVERT_WDI2VOS_STATUS(status) ;
5655}
Jeff Johnson295189b2012-06-20 16:38:30 -07005656/*
5657 * FUNCTION: WDA_RemoveStaKeyReqCallback
5658 * send SET BSS key RSP back to PE
5659 */
5660void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5661{
5662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5663 tWDA_CbContext *pWDA;
5664 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 if(NULL == pWdaParams)
5668 {
5669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005670 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 VOS_ASSERT(0) ;
5672 return ;
5673 }
5674 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5675 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5677 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005678 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 return ;
5681}
5682
Jeff Johnson295189b2012-06-20 16:38:30 -07005683/*
5684 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5685 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5686 */
5687VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5688 tRemoveStaKeyParams *removeStaKeyParams )
5689{
5690 WDI_Status status = WDI_STATUS_SUCCESS ;
5691 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5692 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5693 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5694 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005696 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005697 if(NULL == wdiRemoveStaKeyParam)
5698 {
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 VOS_ASSERT(0);
5702 return VOS_STATUS_E_NOMEM;
5703 }
5704 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5705 if(NULL == pWdaParams)
5706 {
5707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 VOS_ASSERT(0);
5710 vos_mem_free(wdiRemoveStaKeyParam);
5711 return VOS_STATUS_E_NOMEM;
5712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 /* copy remove STA key params to WDI structure*/
5714 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5715 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5716 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5717 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5718 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 /* Store remove key pointer, as this will be used for response */
5720 /* store Params pass it to WDI */
5721 pWdaParams->pWdaContext = pWDA;
5722 pWdaParams->wdaMsgParam = removeStaKeyParams;
5723 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5725 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 if(IS_WDI_STATUS_FAILURE(status))
5727 {
5728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5729 "Failure in remove STA Key Req WDI API, free all the memory " );
5730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5731 vos_mem_free(pWdaParams) ;
5732 removeStaKeyParams->status = eSIR_FAILURE ;
5733 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 return CONVERT_WDI2VOS_STATUS(status) ;
5736}
Jeff Johnson295189b2012-06-20 16:38:30 -07005737/*
5738 * FUNCTION: WDA_IsHandleSetLinkStateReq
5739 * Update the WDA state and return the status to handle this message or not
5740 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005741WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5742 tWDA_CbContext *pWDA,
5743 tLinkStateParams *linkStateParams)
5744{
5745 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 switch(linkStateParams->state)
5747 {
5748 case eSIR_LINK_PREASSOC_STATE:
5749 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5750 /*
5751 * set the WDA state to PRE ASSOC
5752 * copy the BSSID into pWDA to use it in join request and return,
5753 * No need to handle these messages.
5754 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005755 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5756 {
5757 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005759 }
5760 else
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005763 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005764 VOS_ASSERT(0);
5765 }
5766
5767 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5768 {
5769 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005771 }
5772 else
5773 {
5774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005775 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005776 VOS_ASSERT(0);
5777 }
5778
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5780 *channel and after ) so reset the WDA state to ready when the second
5781 * time UMAC issue the link state with PREASSOC
5782 */
5783 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5784 {
5785 /* RESET WDA state back to WDA_READY_STATE */
5786 pWDA->wdaState = WDA_READY_STATE;
5787 }
5788 else
5789 {
5790 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5791 }
5792 //populate linkState info in WDACbCtxt
5793 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005795 default:
5796 if(pWDA->wdaState != WDA_READY_STATE)
5797 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005798 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5799 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5800 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5801 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5802 *the ASSERT in WDA_Stop during module unload.*/
5803 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5804 {
5805 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005806 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005807 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005808 else
5809 {
5810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005811 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005812 status = WDA_IGNORE_SET_LINK_STATE;
5813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005814 }
5815 break;
5816 }
5817
5818 return status;
5819}
Jeff Johnson295189b2012-06-20 16:38:30 -07005820/*
5821 * FUNCTION: WDA_SetLinkStateCallback
5822 * call back function for set link state from WDI
5823 */
5824void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5825{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305826 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005827 tLinkStateParams *linkStateParams;
5828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005830 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305831 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 {
5833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005834 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005835 VOS_ASSERT(0) ;
5836 return ;
5837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305839 if (NULL == pWDA)
5840 {
5841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5842 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5844 vos_mem_free(pWdaParams->wdaMsgParam);
5845 vos_mem_free(pWdaParams);
5846
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305847 VOS_ASSERT(0);
5848 return ;
5849 }
5850
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 /*
5853 * In STA mode start the BA activity check timer after association
5854 * and in AP mode start BA activity check timer after BSS start */
5855 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5856 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005857 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5858 ((status == WDI_STATUS_SUCCESS) &&
5859 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 {
5861 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 /*
5865 * No respone required for WDA_SET_LINK_STATE so free the request
5866 * param here
5867 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5869 vos_mem_free(pWdaParams);
5870
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 return ;
5872}
Jeff Johnson295189b2012-06-20 16:38:30 -07005873/*
5874 * FUNCTION: WDA_ProcessSetLinkState
5875 * Request to WDI to set the link status.
5876 */
5877VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5878 tLinkStateParams *linkStateParams)
5879{
5880 WDI_Status status = WDI_STATUS_SUCCESS ;
5881 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5882 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5883 sizeof(WDI_SetLinkReqParamsType)) ;
5884 tWDA_ReqParams *pWdaParams ;
5885 tpAniSirGlobal pMac;
5886 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5887
5888 if(NULL == pMac)
5889 {
5890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005891 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005893 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 return VOS_STATUS_E_FAILURE;
5895 }
5896
5897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 if(NULL == wdiSetLinkStateParam)
5900 {
5901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_ASSERT(0);
5904 return VOS_STATUS_E_NOMEM;
5905 }
5906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5907 if(NULL == pWdaParams)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_ASSERT(0);
5912 vos_mem_free(wdiSetLinkStateParam);
5913 return VOS_STATUS_E_NOMEM;
5914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 if(WDA_IGNORE_SET_LINK_STATE ==
5916 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5917 {
5918 status = WDI_STATUS_E_FAILURE;
5919 }
5920 else
5921 {
5922 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5923 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5925 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5927 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 pWdaParams->pWdaContext = pWDA;
5929 /* Store remove key pointer, as this will be used for response */
5930 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 /* store Params pass it to WDI */
5932 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5933 /* Stop Timer only other than GO role and concurrent session */
5934 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005935 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5937 {
5938 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5941 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 if(IS_WDI_STATUS_FAILURE(status))
5943 {
5944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5945 "Failure in set link state Req WDI API, free all the memory " );
5946 }
5947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 if(IS_WDI_STATUS_FAILURE(status))
5949 {
5950 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005951 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 vos_mem_free(pWdaParams);
5953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 return CONVERT_WDI2VOS_STATUS(status) ;
5955}
Jeff Johnson295189b2012-06-20 16:38:30 -07005956/*
5957 * FUNCTION: WDA_GetStatsReqParamsCallback
5958 * send the response to PE with Stats received from WDI
5959 */
5960void WDA_GetStatsReqParamsCallback(
5961 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5962 void* pUserData)
5963{
5964 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5965 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5966
5967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005968 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 pGetPEStatsRspParams =
5970 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5971 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5972
5973 if(NULL == pGetPEStatsRspParams)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 VOS_ASSERT(0);
5978 return;
5979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5981 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5982 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5983 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005984
5985 //Fill the Session Id Properly in PE
5986 pGetPEStatsRspParams->sessionId = 0;
5987 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005988 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5990 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 vos_mem_copy( pGetPEStatsRspParams + 1,
5992 wdiGetStatsRsp + 1,
5993 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 /* send response to UMAC*/
5995 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5996
5997 return;
5998}
5999
Jeff Johnson295189b2012-06-20 16:38:30 -07006000/*
6001 * FUNCTION: WDA_ProcessGetStatsReq
6002 * Request to WDI to get the statistics
6003 */
6004VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6005 tAniGetPEStatsReq *pGetStatsParams)
6006{
6007 WDI_Status status = WDI_STATUS_SUCCESS ;
6008 WDI_GetStatsReqParamsType wdiGetStatsParam;
6009 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6013 pGetStatsParams->staId;
6014 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6015 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 status = WDI_GetStatsReq(&wdiGetStatsParam,
6018 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 if(IS_WDI_STATUS_FAILURE(status))
6020 {
6021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6022 "Failure in Get Stats Req WDI API, free all the memory " );
6023 pGetPEStatsRspParams =
6024 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6025 if(NULL == pGetPEStatsRspParams)
6026 {
6027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006030 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 return VOS_STATUS_E_NOMEM;
6032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
6034 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6035 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6036 pGetPEStatsRspParams->rc = eSIR_FAILURE;
6037 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
6038 (void *)pGetPEStatsRspParams, 0) ;
6039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 /* Free the request message */
6041 vos_mem_free(pGetStatsParams);
6042 return CONVERT_WDI2VOS_STATUS(status);
6043}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006044
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006045#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006046/*
6047 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6048 * send the response to PE with roam Rssi received from WDI
6049 */
6050void WDA_GetRoamRssiReqParamsCallback(
6051 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6052 void* pUserData)
6053{
6054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6055 tWDA_CbContext *pWDA = NULL;
6056 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6057 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6059 "<------ %s " ,__func__);
6060 if(NULL == pWdaParams)
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6063 "%s: pWdaParams received NULL", __func__);
6064 VOS_ASSERT(0) ;
6065 return ;
6066 }
6067 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6068 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6069
6070 if(NULL == pGetRoamRssiReqParams)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6073 "%s: pGetRoamRssiReqParams received NULL", __func__);
6074 VOS_ASSERT(0);
6075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6076 vos_mem_free(pWdaParams);
6077 return ;
6078 }
6079 pGetRoamRssiRspParams =
6080 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6081
6082 if(NULL == pGetRoamRssiRspParams)
6083 {
6084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6085 "%s: VOS MEM Alloc Failure", __func__);
6086 VOS_ASSERT(0);
6087 return;
6088 }
6089 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6090 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006091 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006092 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6093 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6094
6095 /* Assign get roam rssi req (backup) in to the response */
6096 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6097
6098 /* free WDI command buffer */
6099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6100 vos_mem_free(pWdaParams) ;
6101
6102 /* send response to UMAC*/
6103 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6104
6105 return;
6106}
6107
6108
6109
6110/*
6111 * FUNCTION: WDA_ProcessGetRoamRssiReq
6112 * Request to WDI to get the statistics
6113 */
6114VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6115 tAniGetRssiReq *pGetRoamRssiParams)
6116{
6117 WDI_Status status = WDI_STATUS_SUCCESS ;
6118 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6119 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6120 tWDA_ReqParams *pWdaParams = NULL;
6121
6122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6123 "------> %s " ,__func__);
6124 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6125 pGetRoamRssiParams->staId;
6126 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6127
6128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6129 if(NULL == pWdaParams)
6130 {
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6132 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306133 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006134 VOS_ASSERT(0);
6135 return VOS_STATUS_E_NOMEM;
6136 }
6137
6138 /* Store Init Req pointer, as this will be used for response */
6139 pWdaParams->pWdaContext = pWDA;
6140
6141 /* Take Get roam Rssi req backup as it stores the callback to be called after
6142 receiving the response */
6143 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6144 pWdaParams->wdaWdiApiMsgParam = NULL;
6145
6146 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6147 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6148 if(IS_WDI_STATUS_FAILURE(status))
6149 {
6150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6151 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6152 pGetRoamRssiRspParams =
6153 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6154 if(NULL == pGetRoamRssiRspParams)
6155 {
6156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6157 "%s: VOS MEM Alloc Failure", __func__);
6158 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306159 vos_mem_free(pGetRoamRssiParams);
6160 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006161 return VOS_STATUS_E_NOMEM;
6162 }
6163 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6164 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6165 pGetRoamRssiRspParams->rssi = 0;
6166 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6167 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6168 (void *)pGetRoamRssiRspParams, 0) ;
6169 }
6170 return CONVERT_WDI2VOS_STATUS(status);
6171}
6172#endif
6173
6174
Jeff Johnson295189b2012-06-20 16:38:30 -07006175/*
6176 * FUNCTION: WDA_UpdateEDCAParamCallback
6177 * call back function for Update EDCA params from WDI
6178 */
6179void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6180{
6181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6182 tEdcaParams *pEdcaParams;
6183
6184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006185 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 if(NULL == pWdaParams)
6187 {
6188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006189 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 VOS_ASSERT(0) ;
6191 return ;
6192 }
6193 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6195 vos_mem_free(pWdaParams);
6196 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 return ;
6198}
Jeff Johnson295189b2012-06-20 16:38:30 -07006199/*
6200 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6201 * Request to WDI to Update the EDCA params.
6202 */
6203VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6204 tEdcaParams *pEdcaParams)
6205{
6206 WDI_Status status = WDI_STATUS_SUCCESS ;
6207 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6208 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6209 sizeof(WDI_UpdateEDCAParamsType)) ;
6210 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 if(NULL == wdiEdcaParam)
6214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006218 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 return VOS_STATUS_E_NOMEM;
6220 }
6221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6222 if(NULL == pWdaParams)
6223 {
6224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 VOS_ASSERT(0);
6227 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006228 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 return VOS_STATUS_E_NOMEM;
6230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006232 /*
6233 Since firmware is not using highperformance flag, we have removed
6234 this flag from wdiEDCAInfo structure to match sizeof the structure
6235 between host and firmware.In future if we are planning to use
6236 highperformance flag then Please define this flag in wdiEDCAInfo
6237 structure, update it here and send it to firmware. i.e.
6238 Following is the original line which we removed as part of the fix
6239 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6240 pEdcaParams->highPerformance;
6241 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6243 &pEdcaParams->acbe);
6244 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6245 &pEdcaParams->acbk);
6246 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6247 &pEdcaParams->acvi);
6248 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6249 &pEdcaParams->acvo);
6250 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 pWdaParams->pWdaContext = pWDA;
6252 /* Store remove key pointer, as this will be used for response */
6253 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 /* store Params pass it to WDI */
6255 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6257 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 if(IS_WDI_STATUS_FAILURE(status))
6259 {
6260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6261 "Failure in Update EDCA Params WDI API, free all the memory " );
6262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6263 vos_mem_free(pWdaParams);
6264 vos_mem_free(pEdcaParams);
6265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 return CONVERT_WDI2VOS_STATUS(status) ;
6267}
Jeff Johnson295189b2012-06-20 16:38:30 -07006268/*
6269 * FUNCTION: WDA_AddBAReqCallback
6270 * send ADD BA RSP back to PE
6271 */
6272void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6273 void* pUserData)
6274{
6275 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6276 tWDA_CbContext *pWDA;
6277 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006279 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306280 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 {
6282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006283 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 VOS_ASSERT(0) ;
6285 return ;
6286 }
6287 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306288 if (NULL == pWDA)
6289 {
6290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6291 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6293 vos_mem_free(pWdaParams->wdaMsgParam);
6294 vos_mem_free(pWdaParams);
6295
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306296 VOS_ASSERT(0);
6297 return ;
6298 }
6299
Jeff Johnson295189b2012-06-20 16:38:30 -07006300 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6302 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006303 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 return ;
6306}
6307
Jeff Johnson295189b2012-06-20 16:38:30 -07006308/*
6309 * FUNCTION: WDA_ProcessAddBAReq
6310 * Request to WDI to Update the ADDBA REQ params.
6311 */
6312VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306313 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006314{
Jeff Johnson43971f52012-07-17 12:26:56 -07006315 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6317 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6318 sizeof(WDI_AddBAReqParamsType)) ;
6319 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 if(NULL == wdiAddBAReqParam)
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 VOS_ASSERT(0);
6327 return VOS_STATUS_E_NOMEM;
6328 }
6329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6330 if(NULL == pWdaParams)
6331 {
6332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 VOS_ASSERT(0);
6335 vos_mem_free(wdiAddBAReqParam);
6336 return VOS_STATUS_E_NOMEM;
6337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 do
6339 {
6340 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 wdiAddBaInfo->ucSTAIdx = staIdx ;
6342 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306343 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 } while(0) ;
6345 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 pWdaParams->pWdaContext = pWDA;
6347 /* store Params pass it to WDI */
6348 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6349 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006350 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6351 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006352
Jeff Johnson43971f52012-07-17 12:26:56 -07006353 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 {
6355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006356 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6357 status = CONVERT_WDI2VOS_STATUS(wstatus);
6358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 vos_mem_free(pWdaParams);
6360 pAddBAReqParams->status = eSIR_FAILURE;
6361 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6362 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006363 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006364}
Jeff Johnson295189b2012-06-20 16:38:30 -07006365/*
6366 * FUNCTION: WDA_AddBASessionReqCallback
6367 * send ADD BA SESSION RSP back to PE/(or TL)
6368 */
6369void WDA_AddBASessionReqCallback(
6370 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6371{
6372 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306374 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006377 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 if(NULL == pWdaParams)
6379 {
6380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006381 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 VOS_ASSERT(0) ;
6383 return ;
6384 }
6385 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306386 if (NULL == pWDA)
6387 {
6388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6389 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6391 vos_mem_free(pWdaParams->wdaMsgParam);
6392 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306393 VOS_ASSERT(0);
6394 return ;
6395 }
6396
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 if( NULL == pAddBAReqParams )
6399 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006401 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6404 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 return ;
6406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6408 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306410 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 * another request to HAL(/WDI) (ADD_BA_REQ)
6412 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 if((VOS_STATUS_SUCCESS ==
6414 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306415 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 {
6417 /* Update TL with BA info received from HAL/WDI */
6418 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6419 wdiAddBaSession->usBaSessionID,
6420 wdiAddBaSession->ucSTAIdx,
6421 wdiAddBaSession->ucBaTID,
6422 wdiAddBaSession->ucBaBufferSize,
6423 wdiAddBaSession->ucWinSize,
6424 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306426 wdiAddBaSession->ucSTAIdx,
6427 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 }
6429 else
6430 {
6431 pAddBAReqParams->status =
6432 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6433
6434 /* Setting Flag to indicate that Set BA is success */
6435 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6436 {
6437 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6438 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6439 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 /*Reset the WDA state to READY */
6444 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006445 return ;
6446}
6447
Jeff Johnson295189b2012-06-20 16:38:30 -07006448/*
6449 * FUNCTION: WDA_ProcessAddBASessionReq
6450 * Request to WDI to Update the ADDBA REQ params.
6451 */
6452VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6453 tAddBAParams *pAddBAReqParams)
6454{
6455 WDI_Status status = WDI_STATUS_SUCCESS ;
6456 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6457 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6458 sizeof(WDI_AddBASessionReqParamsType)) ;
6459 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006460 WLANTL_STAStateType tlSTAState = 0;
6461
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006463 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 if(NULL == wdiAddBASessionReqParam)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 VOS_ASSERT(0);
6469 return VOS_STATUS_E_NOMEM;
6470 }
6471 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6472 if(NULL == pWdaParams)
6473 {
6474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006475 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 VOS_ASSERT(0);
6477 vos_mem_free(wdiAddBASessionReqParam);
6478 return VOS_STATUS_E_NOMEM;
6479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 /*
6481 * Populate ADD BA parameters and pass these paarmeters to WDI.
6482 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6483 * the state to track if these is BA recipient case or BA initiator
6484 * case.
6485 */
6486 do
6487 {
6488 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6489 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6490 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6491 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6492 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6493 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6494 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006495 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006496 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6497 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6498 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6499 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6500 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306501
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 }while(0) ;
6503 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 pWdaParams->pWdaContext = pWDA;
6505 /* Store ADD BA pointer, as this will be used for response */
6506 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6507 /* store Params pass it to WDI */
6508 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006509
6510 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6511 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6512 */
6513 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6514 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006517 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006518 status = WDI_STATUS_E_NOT_ALLOWED;
6519 pAddBAReqParams->status =
6520 CONVERT_WDI2SIR_STATUS(status) ;
6521 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6522 /*Reset the WDA state to READY */
6523 pWDA->wdaState = WDA_READY_STATE;
6524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6525 vos_mem_free(pWdaParams);
6526
6527 return CONVERT_WDI2VOS_STATUS(status) ;
6528 }
6529
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6531 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 if(IS_WDI_STATUS_FAILURE(status))
6533 {
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006535 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006537 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006538 pAddBAReqParams->status =
6539 CONVERT_WDI2SIR_STATUS(status) ;
6540 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006541 /*Reset the WDA state to READY */
6542 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 vos_mem_free(pWdaParams);
6545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006547}
Jeff Johnson295189b2012-06-20 16:38:30 -07006548/*
6549 * FUNCTION: WDA_DelBANotifyTL
6550 * send DEL BA IND to TL
6551 */
6552void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6553 tDelBAParams *pDelBAReqParams)
6554{
6555 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6556 //tSirMsgQ msg;
6557 vos_msg_t vosMsg;
6558 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 if(NULL == pDelBAInd)
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 VOS_ASSERT(0) ;
6564 return;
6565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6567 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6568 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6569 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006570
Jeff Johnson295189b2012-06-20 16:38:30 -07006571
6572 vosMsg.type = WDA_DELETEBA_IND;
6573 vosMsg.bodyptr = pDelBAInd;
6574 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6575 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6576 {
6577 vosStatus = VOS_STATUS_E_BADMSG;
6578 }
6579}
Jeff Johnson295189b2012-06-20 16:38:30 -07006580/*
6581 * FUNCTION: WDA_DelBAReqCallback
6582 * send DEL BA RSP back to PE
6583 */
6584void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6585{
6586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6587 tWDA_CbContext *pWDA;
6588 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006590 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 if(NULL == pWdaParams)
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006594 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 VOS_ASSERT(0) ;
6596 return ;
6597 }
6598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306599
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 /* Notify TL about DEL BA in case of recipinet */
6602 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6603 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6604 {
6605 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 /*
6608 * No respone required for WDA_DELBA_IND so just free the request
6609 * param here
6610 */
6611 vos_mem_free(pDelBAReqParams);
6612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6613 vos_mem_free(pWdaParams);
6614 return ;
6615}
6616
Jeff Johnson295189b2012-06-20 16:38:30 -07006617/*
6618 * FUNCTION: WDA_ProcessDelBAReq
6619 * Request to WDI to Update the DELBA REQ params.
6620 */
6621VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6622 tDelBAParams *pDelBAReqParams)
6623{
6624 WDI_Status status = WDI_STATUS_SUCCESS ;
6625 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6626 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6627 sizeof(WDI_DelBAReqParamsType)) ;
6628 tWDA_ReqParams *pWdaParams ;
6629 tANI_U16 staIdx = 0;
6630 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006632 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 if(NULL == wdiDelBAReqParam)
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_ASSERT(0);
6638 return VOS_STATUS_E_NOMEM;
6639 }
6640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6641 if(NULL == pWdaParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 VOS_ASSERT(0);
6646 vos_mem_free(wdiDelBAReqParam);
6647 return VOS_STATUS_E_NOMEM;
6648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6650 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6651 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6652 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 pWdaParams->pWdaContext = pWDA;
6654 /* Store DEL BA pointer, as this will be used for response */
6655 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 /* store Params pass it to WDI */
6657 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6659 * maintained in WDA, so that WDA can retry for another BA session
6660 */
6661 staIdx = pDelBAReqParams->staIdx;
6662 tid = pDelBAReqParams->baTID;
6663 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 status = WDI_DelBAReq(wdiDelBAReqParam,
6665 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 if(IS_WDI_STATUS_FAILURE(status))
6667 {
6668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6669 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6671 vos_mem_free(pWdaParams->wdaMsgParam);
6672 vos_mem_free(pWdaParams);
6673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006675}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006676
6677/*
6678 * FUNCTION: WDA_UpdateChReqCallback
6679 *
6680 */
6681void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6682{
Siddharth Bhala006c122014-05-03 12:13:27 +05306683 tWDA_ReqParams *pWdaParams;
6684 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6685 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6686 WDI_UpdateChannelReqinfoType *pChanInfoType;
6687 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006688
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6690 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306691 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006692 {
6693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306694 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006695 VOS_ASSERT(0);
6696 return;
6697 }
6698
Siddharth Bhala006c122014-05-03 12:13:27 +05306699 pWdaParams = (tWDA_ReqParams *)pUserData;
6700 pwdiUpdateChReqParam =
6701 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6702 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6703 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6704 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006705 /*
6706 * currently there is no response message is expected between PE and
6707 * WDA, Failure return from WDI is a ASSERT condition
6708 */
6709 vos_mem_free(pChanInfoType);
6710 vos_mem_free(pChanList);
6711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6712 vos_mem_free(pWdaParams);
6713
6714 return;
6715}
6716
6717/*
6718 * FUNCTION: WDA_ProcessUpdateChannelList
6719 * Request to WDI to Update the ChannelList params.
6720 */
6721VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6722 tSirUpdateChanList *pChanList)
6723{
6724 WDI_Status status = WDI_STATUS_SUCCESS;
6725 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6726 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6727 WDI_UpdateChannelReqinfoType *pChanInfoType;
6728 tWDA_ReqParams *pWdaParams;
6729 wpt_uint8 i;
6730
6731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6732 "------> %s " ,__func__);
6733 if(NULL == pChanList)
6734 {
6735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6736 "%s: NULL pChanList", __func__);
6737 VOS_ASSERT(0);
6738 return VOS_STATUS_E_INVAL;
6739 }
6740
6741 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6742 {
6743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6744 "Update channel list capability Not Supported");
6745 vos_mem_free(pChanList);
6746 return VOS_STATUS_E_INVAL;
6747 }
6748
6749 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6750 sizeof(WDI_UpdateChReqParamsType));
6751 if(NULL == pwdiUpdateChReqParam)
6752 {
6753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6754 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6755 __func__);
6756 VOS_ASSERT(0);
6757 vos_mem_free(pChanList);
6758 return VOS_STATUS_E_NOMEM;
6759 }
6760 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6761 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6762 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6763 pChanList->numChan);
6764 if(NULL == pChanInfoType)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6767 "%s: VOS MEM Alloc Failure", __func__);
6768 VOS_ASSERT(0);
6769 vos_mem_free(pChanList);
6770 vos_mem_free(pwdiUpdateChReqParam);
6771 return VOS_STATUS_E_NOMEM;
6772 }
6773 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6774 * pChanList->numChan);
6775 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6776
6777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6778 if(NULL == pWdaParams)
6779 {
6780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6781 "%s: VOS MEM Alloc Failure", __func__);
6782 VOS_ASSERT(0);
6783 vos_mem_free(pChanList);
6784 vos_mem_free(pChanInfoType);
6785 vos_mem_free(pwdiUpdateChReqParam);
6786 return VOS_STATUS_E_NOMEM;
6787 }
6788 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6789
6790 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6791 {
6792 pChanInfoType->mhz =
6793 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6794
6795 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6796 pChanInfoType->band_center_freq2 = 0;
6797
6798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6799 "chan[%d] = %u", i, pChanInfoType->mhz);
6800 if (pChanList->chanParam[i].dfsSet)
6801 {
6802 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6804 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6805 pChanList->chanParam[i].dfsSet);
6806 }
6807
6808 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6809 {
6810 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6811 }
6812 else
6813 {
6814 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6815 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6816 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6817 }
6818
6819 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6820 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306821 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006822 pChanInfoType++;
6823 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006824 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6825 pWdaParams->pWdaContext = pWDA;
6826 pWdaParams->wdaMsgParam = (void *)pChanList;
6827 /* store Params pass it to WDI */
6828 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6829 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6830 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6831 if(IS_WDI_STATUS_FAILURE(status))
6832 {
6833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6834 "Failure in Update Channel REQ Params WDI API, free all the memory");
6835 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6836 vos_mem_free(pwdiUpdateChReqParam);
6837 vos_mem_free(pWdaParams->wdaMsgParam);
6838 vos_mem_free(pWdaParams);
6839 }
6840 return CONVERT_WDI2VOS_STATUS(status);
6841}
6842
Jeff Johnson295189b2012-06-20 16:38:30 -07006843/*
6844 * FUNCTION: WDA_AddTSReqCallback
6845 * send ADD TS RSP back to PE
6846 */
6847void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6848{
6849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306850 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 tAddTsParams *pAddTsReqParams;
6852
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006854 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 if(NULL == pWdaParams)
6856 {
6857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006858 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 VOS_ASSERT(0) ;
6860 return ;
6861 }
6862 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306863 if (NULL == pWDA)
6864 {
6865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6866 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6868 vos_mem_free(pWdaParams->wdaMsgParam);
6869 vos_mem_free(pWdaParams);
6870
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306871 VOS_ASSERT(0);
6872 return ;
6873 }
6874
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6877 vos_mem_free(pWdaParams);
6878
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006879 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 return ;
6882}
6883
Jeff Johnson295189b2012-06-20 16:38:30 -07006884/*
6885 * FUNCTION: WDA_ProcessAddTSReq
6886 * Request to WDI to Update the ADD TS REQ params.
6887 */
6888VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6889 tAddTsParams *pAddTsReqParams)
6890{
6891 WDI_Status status = WDI_STATUS_SUCCESS ;
6892 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6893 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6894 sizeof(WDI_AddTSReqParamsType)) ;
6895 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 if(NULL == wdiAddTSReqParam)
6899 {
6900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 VOS_ASSERT(0);
6903 return VOS_STATUS_E_NOMEM;
6904 }
6905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6906 if(NULL == pWdaParams)
6907 {
6908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 VOS_ASSERT(0);
6911 vos_mem_free(wdiAddTSReqParam);
6912 return VOS_STATUS_E_NOMEM;
6913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6915 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 //TS IE
6917 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6918 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6919 pAddTsReqParams->tspec.length;
6920
6921 //TS IE : TS INFO : TRAFFIC
6922 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6923 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6924 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6925 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6926 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6927 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6928 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6929 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6930 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6931 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6932 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6933 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6934 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6935 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6936 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6937 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6938
6939 //TS IE : TS INFO : SCHEDULE
6940 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6941 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6942 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6943 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 //TS IE
6945 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6946 pAddTsReqParams->tspec.nomMsduSz;
6947 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6948 pAddTsReqParams->tspec.maxMsduSz;
6949 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6950 pAddTsReqParams->tspec.minSvcInterval;
6951 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6952 pAddTsReqParams->tspec.maxSvcInterval;
6953 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6954 pAddTsReqParams->tspec.inactInterval;
6955 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6956 pAddTsReqParams->tspec.suspendInterval;
6957 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6958 pAddTsReqParams->tspec.svcStartTime;
6959 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6960 pAddTsReqParams->tspec.minDataRate;
6961 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6962 pAddTsReqParams->tspec.meanDataRate;
6963 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6964 pAddTsReqParams->tspec.peakDataRate;
6965 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6966 pAddTsReqParams->tspec.maxBurstSz;
6967 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6968 pAddTsReqParams->tspec.delayBound;
6969 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6970 pAddTsReqParams->tspec.minPhyRate;
6971 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6972 pAddTsReqParams->tspec.surplusBw;
6973 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6974 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 /* TODO: tAddTsParams doesn't have the following fields */
6976#if 0
6977 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6978 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6979 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6980 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6981#endif
6982 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6983
6984 pWdaParams->pWdaContext = pWDA;
6985 /* Store ADD TS pointer, as this will be used for response */
6986 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 /* store Params pass it to WDI */
6988 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 status = WDI_AddTSReq(wdiAddTSReqParam,
6990 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 if(IS_WDI_STATUS_FAILURE(status))
6992 {
6993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6994 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6996 vos_mem_free(pWdaParams);
6997 pAddTsReqParams->status = eSIR_FAILURE ;
6998 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007001}
7002
Jeff Johnson295189b2012-06-20 16:38:30 -07007003/*
7004 * FUNCTION: WDA_DelTSReqCallback
7005 * send DEL TS RSP back to PE
7006 */
7007void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7008{
7009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007011 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7013 vos_mem_free(pWdaParams->wdaMsgParam) ;
7014 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 /*
7016 * No respone required for WDA_DEL_TS_REQ so just free the request
7017 * param here
7018 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 return ;
7020}
7021
Jeff Johnson295189b2012-06-20 16:38:30 -07007022/*
7023 * FUNCTION: WDA_ProcessDelTSReq
7024 * Request to WDI to Update the DELTS REQ params.
7025 */
7026VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7027 tDelTsParams *pDelTSReqParams)
7028{
7029 WDI_Status status = WDI_STATUS_SUCCESS ;
7030 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7031 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7032 sizeof(WDI_DelTSReqParamsType)) ;
7033 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 if(NULL == wdiDelTSReqParam)
7037 {
7038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_ASSERT(0);
7041 return VOS_STATUS_E_NOMEM;
7042 }
7043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7044 if(NULL == pWdaParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 VOS_ASSERT(0);
7049 vos_mem_free(wdiDelTSReqParam);
7050 return VOS_STATUS_E_NOMEM;
7051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007052 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7053 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7054 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7055 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7056 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 pWdaParams->pWdaContext = pWDA;
7058 /* Store DEL TS pointer, as this will be used for response */
7059 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 /* store Params pass it to WDI */
7061 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 status = WDI_DelTSReq(wdiDelTSReqParam,
7063 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 if(IS_WDI_STATUS_FAILURE(status))
7065 {
7066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7067 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7069 vos_mem_free(pWdaParams->wdaMsgParam);
7070 vos_mem_free(pWdaParams);
7071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073}
Jeff Johnson295189b2012-06-20 16:38:30 -07007074/*
7075 * FUNCTION: WDA_UpdateBeaconParamsCallback
7076 * Free the memory. No need to send any response to PE in this case
7077 */
7078void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7079{
7080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007082 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 if(NULL == pWdaParams)
7084 {
7085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007086 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_ASSERT(0) ;
7088 return ;
7089 }
7090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7091 vos_mem_free(pWdaParams->wdaMsgParam) ;
7092 vos_mem_free(pWdaParams);
7093 /*
7094 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7095 * param here
7096 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 return ;
7098}
Jeff Johnson295189b2012-06-20 16:38:30 -07007099/*
7100 * FUNCTION: WDA_ProcessUpdateBeaconParams
7101 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7102 */
7103VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7104 tUpdateBeaconParams *pUpdateBeaconParams)
7105{
7106 WDI_Status status = WDI_STATUS_SUCCESS ;
7107 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7108 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7109 sizeof(WDI_UpdateBeaconParamsType)) ;
7110 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 if(NULL == wdiUpdateBeaconParams)
7114 {
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_ASSERT(0);
7118 return VOS_STATUS_E_NOMEM;
7119 }
7120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7121 if(NULL == pWdaParams)
7122 {
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_ASSERT(0);
7126 vos_mem_free(wdiUpdateBeaconParams);
7127 return VOS_STATUS_E_NOMEM;
7128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7130 pUpdateBeaconParams->bssIdx;
7131 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7132 pUpdateBeaconParams->fShortPreamble;
7133 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7134 pUpdateBeaconParams->fShortSlotTime;
7135 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7136 pUpdateBeaconParams->beaconInterval;
7137 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7138 pUpdateBeaconParams->llaCoexist;
7139 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7140 pUpdateBeaconParams->llbCoexist;
7141 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7142 pUpdateBeaconParams->llgCoexist;
7143 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7144 pUpdateBeaconParams->ht20MhzCoexist;
7145 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7146 pUpdateBeaconParams->llnNonGFCoexist;
7147 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7148 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7149 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7150 pUpdateBeaconParams->fRIFSMode;
7151 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7152 pUpdateBeaconParams->paramChangeBitmap;
7153 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7154
7155 pWdaParams->pWdaContext = pWDA;
7156 /* Store UpdateBeacon Req pointer, as this will be used for response */
7157 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 /* store Params pass it to WDI */
7159 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7161 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7162 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 if(IS_WDI_STATUS_FAILURE(status))
7164 {
7165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7166 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7168 vos_mem_free(pWdaParams->wdaMsgParam);
7169 vos_mem_free(pWdaParams);
7170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007172}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007173#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007174/*
7175 * FUNCTION: WDA_TSMStatsReqCallback
7176 * send TSM Stats RSP back to PE
7177 */
7178void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7179{
7180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7181 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007182 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7183 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007184
7185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007186 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 if(NULL == pWdaParams)
7188 {
7189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 VOS_ASSERT(0) ;
7192 return ;
7193 }
7194 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307195 if (NULL == pWDA)
7196 {
7197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7198 "%s:pWDA is NULL", __func__);
7199 VOS_ASSERT(0);
7200 return ;
7201 }
7202
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007203 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7204
7205 if(NULL == pGetTsmStatsReqParams)
7206 {
7207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7208 "%s: pGetTsmStatsReqParams received NULL", __func__);
7209 VOS_ASSERT(0);
7210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7211 vos_mem_free(pWdaParams);
7212 return;
7213 }
7214
7215 pTsmRspParams =
7216 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 if( NULL == pTsmRspParams )
7218 {
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 VOS_ASSERT( 0 );
7222 return ;
7223 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007224 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7225 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7226 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7227
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7229 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7230 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7231 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7232 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7233 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7234 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7235 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7236 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7237 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007238
7239 /* Assign get tsm stats req req (backup) in to the response */
7240 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7241
7242 /* free WDI command buffer */
7243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7244 vos_mem_free(pWdaParams);
7245
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 return ;
7248}
7249
7250
Jeff Johnson295189b2012-06-20 16:38:30 -07007251/*
7252 * FUNCTION: WDA_ProcessTsmStatsReq
7253 * Request to WDI to get the TSM Stats params.
7254 */
7255VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007256 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007257{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007258 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007260 tWDA_ReqParams *pWdaParams = NULL;
7261 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7262
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007264 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7266 sizeof(WDI_TSMStatsReqParamsType));
7267 if(NULL == wdiTSMReqParam)
7268 {
7269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007271 VOS_ASSERT(0);
7272 return VOS_STATUS_E_NOMEM;
7273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7275 if(NULL == pWdaParams)
7276 {
7277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 VOS_ASSERT(0);
7280 vos_mem_free(wdiTSMReqParam);
7281 return VOS_STATUS_E_NOMEM;
7282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7284 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7285 pTsmStats->bssId,
7286 sizeof(wpt_macAddr));
7287 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7288
7289 pWdaParams->pWdaContext = pWDA;
7290 /* Store TSM Stats pointer, as this will be used for response */
7291 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007292 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007293 status = WDI_TSMStatsReq(wdiTSMReqParam,
7294 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 if(IS_WDI_STATUS_FAILURE(status))
7296 {
7297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7298 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007299 vos_mem_free(pWdaParams);
7300
7301 pGetTsmStatsRspParams =
7302 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7303 if(NULL == pGetTsmStatsRspParams)
7304 {
7305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7306 "%s: VOS MEM Alloc Failure", __func__);
7307 VOS_ASSERT(0);
7308 vos_mem_free(pTsmStats);
7309 return VOS_STATUS_E_NOMEM;
7310 }
7311 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7312 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7313 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7314
7315 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 return CONVERT_WDI2VOS_STATUS(status) ;
7318}
7319#endif
7320/*
7321 * FUNCTION: WDA_SendBeaconParamsCallback
7322 * No need to send any response to PE in this case
7323 */
7324void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7325{
7326
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 return ;
7330}
Jeff Johnson295189b2012-06-20 16:38:30 -07007331/*
7332 * FUNCTION: WDA_ProcessSendBeacon
7333 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7334 * start beacon trasmission
7335 */
7336VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7337 tSendbeaconParams *pSendbeaconParams)
7338{
7339 WDI_Status status = WDI_STATUS_SUCCESS ;
7340 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007342 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007343 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7344 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7345 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7346 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7348 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307349 /* p2pIeOffset should be atleast greater than timIeOffset */
7350 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7351 (pSendbeaconParams->p2pIeOffset <
7352 pSendbeaconParams->timIeOffset))
7353 {
7354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7355 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307356 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307357 VOS_ASSERT( 0 );
7358 return WDI_STATUS_E_FAILURE;
7359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7361 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 /* Copy the beacon template to local buffer */
7363 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7364 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7365 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7366
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7368 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 if(IS_WDI_STATUS_FAILURE(status))
7370 {
7371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7372 "Failure in SEND BEACON REQ Params WDI API" );
7373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007374 vos_mem_free(pSendbeaconParams);
7375 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007376}
Jeff Johnson295189b2012-06-20 16:38:30 -07007377/*
7378 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7379 * No need to send any response to PE in this case
7380 */
7381void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7382{
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 return ;
7386}
7387
Jeff Johnson295189b2012-06-20 16:38:30 -07007388/*
7389 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7390 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7391 * send probe response
7392 */
7393VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7394 tSendProbeRespParams *pSendProbeRspParams)
7395{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007396 WDI_Status status = WDI_STATUS_SUCCESS;
7397 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7398 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007400 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007401
7402 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307403 {
7404 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007405 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307406 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007407
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007409 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007411 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 /* Copy the Probe Response template to local buffer */
7414 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007415 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 pSendProbeRspParams->pProbeRespTemplate,
7417 pSendProbeRspParams->probeRespTemplateLen);
7418 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007419 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7421 WDI_PROBE_REQ_BITMAP_IE_LEN);
7422
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007423 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007425 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 if(IS_WDI_STATUS_FAILURE(status))
7428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7430 "Failure in SEND Probe RSP Params WDI API" );
7431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007433 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007435}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007436#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007437/*
7438 * FUNCTION: WDA_SetMaxTxPowerCallBack
7439 * send the response to PE with power value received from WDI
7440 */
7441void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7442 void* pUserData)
7443{
7444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7445 tWDA_CbContext *pWDA = NULL;
7446 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7447
7448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007449 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 if(NULL == pWdaParams)
7451 {
7452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007453 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 VOS_ASSERT(0) ;
7455 return ;
7456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307458 if (NULL == pWDA)
7459 {
7460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7461 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7463 vos_mem_free(pWdaParams->wdaMsgParam);
7464 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307465 VOS_ASSERT(0);
7466 return ;
7467 }
7468
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 if( NULL == pMaxTxPowerParams )
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007474 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7476 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 return ;
7478 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007479
Jeff Johnson295189b2012-06-20 16:38:30 -07007480
7481 /*need to free memory for the pointers used in the
7482 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7484 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007486
Jeff Johnson295189b2012-06-20 16:38:30 -07007487
7488 /* send response to UMAC*/
7489 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7490
7491 return;
7492}
Jeff Johnson295189b2012-06-20 16:38:30 -07007493/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 * Request to WDI to send set Max Tx Power Request
7496 */
7497 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7498 tMaxTxPowerParams *MaxTxPowerParams)
7499{
7500 WDI_Status status = WDI_STATUS_SUCCESS;
7501 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7502 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007503
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007505 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007506
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7508 sizeof(WDI_SetMaxTxPowerParamsType));
7509 if(NULL == wdiSetMaxTxPowerParams)
7510 {
7511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 VOS_ASSERT(0);
7514 return VOS_STATUS_E_NOMEM;
7515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7517 if(NULL == pWdaParams)
7518 {
7519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 vos_mem_free(wdiSetMaxTxPowerParams);
7522 VOS_ASSERT(0);
7523 return VOS_STATUS_E_NOMEM;
7524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 /* Copy.Max.Tx.Power Params to WDI structure */
7526 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7527 MaxTxPowerParams->bssId,
7528 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7530 MaxTxPowerParams->selfStaMacAddr,
7531 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7533 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 pWdaParams->pWdaContext = pWDA;
7536 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007537 /* store Params pass it to WDI */
7538 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7540 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 if(IS_WDI_STATUS_FAILURE(status))
7542 {
7543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7544 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7546 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007547 /* send response to UMAC*/
7548 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 }
7550 return CONVERT_WDI2VOS_STATUS(status);
7551
7552}
Jeff Johnson295189b2012-06-20 16:38:30 -07007553#endif
schang86c22c42013-03-13 18:41:24 -07007554
7555/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007556 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7557 * send the response to PE with power value received from WDI
7558 */
7559void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7560 *pwdiSetMaxTxPowerPerBandRsp,
7561 void* pUserData)
7562{
7563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7564 tWDA_CbContext *pWDA = NULL;
7565 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7566
7567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7568 "<------ %s ", __func__);
7569 if (NULL == pWdaParams)
7570 {
7571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7572 "%s: pWdaParams received NULL", __func__);
7573 VOS_ASSERT(0);
7574 return ;
7575 }
7576 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307577 if (NULL == pWDA)
7578 {
7579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7580 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7582 vos_mem_free(pWdaParams->wdaMsgParam);
7583 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307584 VOS_ASSERT(0);
7585 return ;
7586 }
7587
Arif Hussaina5ebce02013-08-09 15:09:58 -07007588 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7589 if ( NULL == pMxTxPwrPerBandParams )
7590 {
7591 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7592 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7593 VOS_ASSERT(0);
7594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7595 vos_mem_free(pWdaParams);
7596 return;
7597 }
7598
7599 /*need to free memory for the pointers used in the
7600 WDA Process.Set Max Tx Power Req function*/
7601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7602 vos_mem_free(pWdaParams);
7603 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7604
7605 /* send response to UMAC*/
7606 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7607 pMxTxPwrPerBandParams, 0);
7608
7609 return;
7610}
7611
7612/*
7613 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7614 * Request to WDI to send set Max Tx Power Per band Request
7615 */
7616 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7617 tMaxTxPowerPerBandParams
7618 *MaxTxPowerPerBandParams)
7619{
7620 WDI_Status status = WDI_STATUS_SUCCESS;
7621 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7622 tWDA_ReqParams *pWdaParams = NULL;
7623
7624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7625 "------> %s ", __func__);
7626
7627 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7628 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7629
7630 if (NULL == wdiSetMxTxPwrPerBandParams)
7631 {
7632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7633 "%s: VOS MEM Alloc Failure", __func__);
7634 VOS_ASSERT(0);
7635 return VOS_STATUS_E_NOMEM;
7636 }
7637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7638 if (NULL == pWdaParams)
7639 {
7640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7641 "%s: VOS MEM Alloc Failure", __func__);
7642 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7643 VOS_ASSERT(0);
7644 return VOS_STATUS_E_NOMEM;
7645 }
7646 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7647 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7648 MaxTxPowerPerBandParams->bandInfo;
7649 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7650 MaxTxPowerPerBandParams->power;
7651 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7652 pWdaParams->pWdaContext = pWDA;
7653 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7654 /* store Params pass it to WDI */
7655 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7656 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7657 WDA_SetMaxTxPowerPerBandCallBack,
7658 pWdaParams);
7659 if (IS_WDI_STATUS_FAILURE(status))
7660 {
7661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7662 "Failure in SET MAX TX Power REQ Params WDI API,"
7663 " free all the memory");
7664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7665 vos_mem_free(pWdaParams);
7666 /* send response to UMAC*/
7667 WDA_SendMsg(pWDA,
7668 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7669 MaxTxPowerPerBandParams, 0);
7670 }
7671 return CONVERT_WDI2VOS_STATUS(status);
7672}
7673
7674/*
schang86c22c42013-03-13 18:41:24 -07007675 * FUNCTION: WDA_SetTxPowerCallBack
7676 * send the response to PE with power value received from WDI
7677 */
7678void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7679 void* pUserData)
7680{
7681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7682 tWDA_CbContext *pWDA = NULL;
7683 tSirSetTxPowerReq *pTxPowerParams = NULL;
7684
7685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7686 "<------ %s ", __func__);
7687 if(NULL == pWdaParams)
7688 {
7689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7690 "%s: pWdaParams received NULL", __func__);
7691 VOS_ASSERT(0) ;
7692 return ;
7693 }
7694 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307695 if (NULL == pWDA)
7696 {
7697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7698 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7700 vos_mem_free(pWdaParams->wdaMsgParam);
7701 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307702 VOS_ASSERT(0);
7703 return ;
7704 }
7705
schang86c22c42013-03-13 18:41:24 -07007706 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7707 if(NULL == pTxPowerParams)
7708 {
7709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7710 "%s: pTxPowerParams received NULL " ,__func__);
7711 VOS_ASSERT(0);
7712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7713 vos_mem_free(pWdaParams);
7714 return ;
7715 }
7716
7717 /*need to free memory for the pointers used in the
7718 WDA Process.Set Max Tx Power Req function*/
7719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7720 vos_mem_free(pWdaParams);
7721
7722 /* send response to UMAC*/
7723 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7724 return;
7725}
7726
7727/*
7728 * FUNCTION: WDA_ProcessSetTxPowerReq
7729 * Request to WDI to send set Tx Power Request
7730 */
7731 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7732 tSirSetTxPowerReq *txPowerParams)
7733{
7734 WDI_Status status = WDI_STATUS_SUCCESS;
7735 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7736 tWDA_ReqParams *pWdaParams = NULL;
7737
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7739 "------> %s ", __func__);
7740
7741 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7742 sizeof(WDI_SetTxPowerParamsType));
7743 if(NULL == wdiSetTxPowerParams)
7744 {
7745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7746 "%s: VOS MEM Alloc Failure", __func__);
7747 VOS_ASSERT(0);
7748 return VOS_STATUS_E_NOMEM;
7749 }
7750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7751 if(NULL == pWdaParams)
7752 {
7753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7754 "%s: VOS MEM Alloc Failure", __func__);
7755 vos_mem_free(wdiSetTxPowerParams);
7756 VOS_ASSERT(0);
7757 return VOS_STATUS_E_NOMEM;
7758 }
7759 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7760 txPowerParams->bssIdx;
7761 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7762 txPowerParams->mwPower;
7763 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7764 pWdaParams->pWdaContext = pWDA;
7765 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7766 /* store Params pass it to WDI */
7767 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7768 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7769 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7770 if(IS_WDI_STATUS_FAILURE(status))
7771 {
7772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7773 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7775 vos_mem_free(pWdaParams);
7776 /* send response to UMAC*/
7777 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7778 }
7779 return CONVERT_WDI2VOS_STATUS(status);
7780}
7781
Jeff Johnson295189b2012-06-20 16:38:30 -07007782/*
7783 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7784 * Free the memory. No need to send any response to PE in this case
7785 */
7786void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7787{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7789
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007791 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007792
7793 if(NULL == pWdaParams)
7794 {
7795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007796 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007797 VOS_ASSERT(0) ;
7798 return ;
7799 }
7800
7801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7802 vos_mem_free(pWdaParams->wdaMsgParam) ;
7803 vos_mem_free(pWdaParams);
7804
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 /*
7806 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7807 * so just free the request param here
7808 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 return ;
7810}
7811
Jeff Johnson295189b2012-06-20 16:38:30 -07007812/*
7813 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7814 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7815 */
7816VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7817 tP2pPsParams *pP2pPsConfigParams)
7818{
7819 WDI_Status status = WDI_STATUS_SUCCESS ;
7820 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7821 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7822 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007823 tWDA_ReqParams *pWdaParams = NULL;
7824
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 if(NULL == wdiSetP2PGONOAReqParam)
7828 {
7829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007830 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307831 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 VOS_ASSERT(0);
7833 return VOS_STATUS_E_NOMEM;
7834 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007835
7836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7837 if(NULL == pWdaParams)
7838 {
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007840 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007841 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007842 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007843 VOS_ASSERT(0);
7844 return VOS_STATUS_E_NOMEM;
7845 }
7846
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7848 pP2pPsConfigParams->opp_ps;
7849 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7850 pP2pPsConfigParams->ctWindow;
7851 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7852 pP2pPsConfigParams->count;
7853 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7854 pP2pPsConfigParams->duration;
7855 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7856 pP2pPsConfigParams->interval;
7857 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7858 pP2pPsConfigParams->single_noa_duration;
7859 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7860 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007861
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7863 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007864 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7865
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007867 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7868 pWdaParams->pWdaContext = pWDA;
7869
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007871 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7872
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 if(IS_WDI_STATUS_FAILURE(status))
7874 {
7875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7876 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7878 vos_mem_free(pWdaParams->wdaMsgParam);
7879 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 return CONVERT_WDI2VOS_STATUS(status);
7882
Jeff Johnson295189b2012-06-20 16:38:30 -07007883}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307884
7885#ifdef FEATURE_WLAN_TDLS
7886/*
7887 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7888 * Free the memory. No need to send any response to PE in this case
7889 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307890void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7891 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307892{
7893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7894 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307895 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307896
7897
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7899 "<------ %s " ,__func__);
7900 if(NULL == pWdaParams)
7901 {
7902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7903 "%s: pWdaParams received NULL", __func__);
7904 VOS_ASSERT(0) ;
7905 return ;
7906 }
7907 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7908
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307909 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307910 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7912 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7914 vos_mem_free(pWdaParams->wdaMsgParam);
7915 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307916 VOS_ASSERT(0);
7917 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307918 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307919
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307920 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7921 if( NULL == pTdlsLinkEstablishParams )
7922 {
7923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7924 "%s: pTdlsLinkEstablishParams "
7925 "received NULL " ,__func__);
7926 VOS_ASSERT(0);
7927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7928 vos_mem_free(pWdaParams);
7929 return ;
7930 }
7931 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7932 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307934 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307935 /* send response to UMAC*/
7936 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7937
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307938 return ;
7939}
7940
7941VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7942 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7943{
7944 WDI_Status status = WDI_STATUS_SUCCESS ;
7945 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7946 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7947 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7948 tWDA_ReqParams *pWdaParams = NULL;
7949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7950 "------> %s " ,__func__);
7951 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7952 {
7953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7954 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307955 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307956 VOS_ASSERT(0);
7957 return VOS_STATUS_E_NOMEM;
7958 }
7959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7960 if(NULL == pWdaParams)
7961 {
7962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7963 "%s: VOS MEM Alloc Failure", __func__);
7964 vos_mem_free(pTdlsLinkEstablishParams);
7965 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7966 VOS_ASSERT(0);
7967 return VOS_STATUS_E_NOMEM;
7968 }
7969 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307970 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307971 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307972 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307973 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307974 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307975 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307976 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307977 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307978 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307979 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7980 pTdlsLinkEstablishParams->isOffChannelSupported;
7981
7982 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7983 pTdlsLinkEstablishParams->validChannels,
7984 pTdlsLinkEstablishParams->validChannelsLen);
7985
7986 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7987 pTdlsLinkEstablishParams->validChannelsLen;
7988
7989 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7990 pTdlsLinkEstablishParams->validOperClasses,
7991 pTdlsLinkEstablishParams->validOperClassesLen);
7992 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7993 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307994
7995 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7996 /* Store msg pointer from PE, as this will be used for response */
7997 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7998 /* store Params pass it to WDI */
7999 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8000 pWdaParams->pWdaContext = pWDA;
8001
8002 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8003 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8004 WDA_SetTDLSLinkEstablishReqParamsCallback,
8005 pWdaParams);
8006 if(IS_WDI_STATUS_FAILURE(status))
8007 {
8008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8009 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8011 vos_mem_free(pWdaParams->wdaMsgParam);
8012 vos_mem_free(pWdaParams);
8013 }
8014 return CONVERT_WDI2VOS_STATUS(status);
8015}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308016
8017// tdlsoffchan
8018void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8019 void* pUserData)
8020{
8021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8022 tWDA_CbContext *pWDA = NULL;
8023 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8024
8025
8026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8027 "<------ %s " ,__func__);
8028 if(NULL == pWdaParams)
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8031 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308032 VOS_ASSERT(0) ;
8033 return ;
8034 }
8035 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8036
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308037 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308038 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8040 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8042 vos_mem_free(pWdaParams->wdaMsgParam);
8043 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308044 VOS_ASSERT(0);
8045 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308046 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308047
Atul Mittalc0f739f2014-07-31 13:47:47 +05308048 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308049 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308050 {
8051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8052 "%s: pTdlsChanSwitchParams "
8053 "received NULL " ,__func__);
8054 VOS_ASSERT(0);
8055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8056 vos_mem_free(pWdaParams);
8057 return ;
8058 }
8059 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8060 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8062 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308063 /* send response to UMAC*/
8064 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308065
8066 return ;
8067}
8068VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8069 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8070{
8071 WDI_Status status = WDI_STATUS_SUCCESS ;
8072 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8073 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8074 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8075 tWDA_ReqParams *pWdaParams = NULL;
8076
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8078 "Enter: %s ",__func__);
8079 if(NULL == wdiSetTDLSChanSwitchReqParam)
8080 {
8081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8082 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308083 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308084 VOS_ASSERT(0);
8085 return VOS_STATUS_E_NOMEM;
8086 }
8087
8088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8089 if(NULL == pWdaParams)
8090 {
8091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8092 "%s: VOS MEM Alloc Failure", __func__);
8093 vos_mem_free(pTdlsChanSwitchParams);
8094 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8095 VOS_ASSERT(0);
8096 return VOS_STATUS_E_NOMEM;
8097 }
8098 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8099 pTdlsChanSwitchParams->staIdx;
8100 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8101 pTdlsChanSwitchParams->tdlsSwMode;
8102 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8103 pTdlsChanSwitchParams->operClass;
8104 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8105 pTdlsChanSwitchParams->tdlsOffCh;
8106 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8107 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8108
8109
8110 /* Store msg pointer from PE, as this will be used for response */
8111 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8112 /* store Params pass it to WDI */
8113 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8114 pWdaParams->pWdaContext = pWDA;
8115 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8116 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8117 WDA_SetTDLSChanSwitchReqParamsCallback,
8118 pWdaParams);
8119 if(IS_WDI_STATUS_FAILURE(status))
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8122 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8124 vos_mem_free(pWdaParams->wdaMsgParam);
8125 vos_mem_free(pWdaParams);
8126 }
8127 return CONVERT_WDI2VOS_STATUS(status);
8128}
8129#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308130
8131
Jeff Johnson295189b2012-06-20 16:38:30 -07008132#ifdef WLAN_FEATURE_VOWIFI_11R
8133/*
8134 * FUNCTION: WDA_AggrAddTSReqCallback
8135 * send ADD AGGREGATED TS RSP back to PE
8136 */
8137void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8138{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308140 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008141 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008144 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008145 if(NULL == pWdaParams)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008148 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008149 VOS_ASSERT(0) ;
8150 return ;
8151 }
8152
8153 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308154 if (NULL == pWDA)
8155 {
8156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8157 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8159 vos_mem_free(pWdaParams->wdaMsgParam);
8160 vos_mem_free(pWdaParams);
8161
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308162 VOS_ASSERT(0);
8163 return ;
8164 }
8165
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008166 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008167
8168 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8169 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008170 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008173
8174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8175 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 return ;
8177}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008178/*
8179 * FUNCTION: WDA_ProcessAddTSReq
8180 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8181 */
8182VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8183 tAggrAddTsParams *pAggrAddTsReqParams)
8184{
8185 WDI_Status status = WDI_STATUS_SUCCESS ;
8186 int i;
8187 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008188 tWDA_ReqParams *pWdaParams = NULL;
8189
8190
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008192 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008193 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8194 sizeof(WDI_AggrAddTSReqParamsType)) ;
8195 if(NULL == wdiAggrAddTSReqParam)
8196 {
8197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008198 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308199 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 VOS_ASSERT(0);
8201 return VOS_STATUS_E_NOMEM;
8202 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008203
8204
8205 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8206 if(NULL == pWdaParams)
8207 {
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008209 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008210 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008211 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008212 VOS_ASSERT(0);
8213 return VOS_STATUS_E_NOMEM;
8214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8216 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8217 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008218 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8219 {
8220 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8221 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8222 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8224 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8225 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8226 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8227 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8228 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8229 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8230 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8231 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8232 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8233 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8234 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8235 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8236 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8237 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8238 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8240 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8242 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8243 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8244 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8245 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8246 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8247 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8248 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8249 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8250 pAggrAddTsReqParams->tspec[i].inactInterval;
8251 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8252 pAggrAddTsReqParams->tspec[i].suspendInterval;
8253 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8254 pAggrAddTsReqParams->tspec[i].svcStartTime;
8255 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8256 pAggrAddTsReqParams->tspec[i].minDataRate;
8257 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8258 pAggrAddTsReqParams->tspec[i].meanDataRate;
8259 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8260 pAggrAddTsReqParams->tspec[i].peakDataRate;
8261 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8262 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8263 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8264 pAggrAddTsReqParams->tspec[i].delayBound;
8265 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8266 pAggrAddTsReqParams->tspec[i].minPhyRate;
8267 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8268 pAggrAddTsReqParams->tspec[i].surplusBw;
8269 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8270 pAggrAddTsReqParams->tspec[i].mediumTime;
8271 }
8272
8273 /* TODO: tAggrAddTsParams doesn't have the following fields */
8274#if 0
8275 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8276 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8277 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8278 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8279#endif
8280 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8281
8282 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008283 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008285 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8286
8287 pWdaParams->pWdaContext = pWDA;
8288
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008290 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8291
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 if(IS_WDI_STATUS_FAILURE(status))
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8297 vos_mem_free(pWdaParams);
8298
8299 /* send the failure response back to PE*/
8300 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8301 {
8302 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8303 }
8304
8305 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8306 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 return CONVERT_WDI2VOS_STATUS(status) ;
8309}
8310#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008311/*
Mihir Shetea4306052014-03-25 00:02:54 +05308312 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 * send Enter IMPS RSP back to PE
8314 */
Mihir Shetea4306052014-03-25 00:02:54 +05308315void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008316{
Mihir Shetea4306052014-03-25 00:02:54 +05308317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308318 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308319
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308321 "<------ %s status=%d" ,__func__,status);
8322 if(NULL == pWdaParams)
8323 {
8324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8325 "%s: pWdaParams received NULL", __func__);
8326 VOS_ASSERT(0);
8327 return;
8328 }
8329
8330 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308331 if (NULL == pWDA)
8332 {
8333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8334 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8336 vos_mem_free(pWdaParams->wdaMsgParam);
8337 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308338 VOS_ASSERT(0);
8339 return ;
8340 }
Mihir Shetea4306052014-03-25 00:02:54 +05308341
8342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8343 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008344 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 return ;
8346}
Mihir Shetea4306052014-03-25 00:02:54 +05308347
8348
8349/*
8350 * FUNCTION: WDA_EnterImpsReqCallback
8351 * Free memory and send Enter IMPS RSP back to PE.
8352 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8353 */
8354void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8355{
8356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308357 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308358
8359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8360 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8361
8362 if(NULL == pWdaParams)
8363 {
8364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8365 "%s: pWdaParams received NULL", __func__);
8366 VOS_ASSERT(0);
8367 return;
8368 }
8369
8370 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308371 if (NULL == pWDA)
8372 {
8373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8374 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8376 vos_mem_free(pWdaParams->wdaMsgParam);
8377 vos_mem_free(pWdaParams);
8378
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308379 VOS_ASSERT(0);
8380 return ;
8381 }
8382
Mihir Shetea4306052014-03-25 00:02:54 +05308383
8384 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8385 {
8386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8387 vos_mem_free(pWdaParams);
8388 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8389 CONVERT_WDI2SIR_STATUS(wdiStatus));
8390 }
8391
8392 return;
8393}
Jeff Johnson295189b2012-06-20 16:38:30 -07008394/*
8395 * FUNCTION: WDA_ProcessEnterImpsReq
8396 * Request to WDI to Enter IMPS power state.
8397 */
8398VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8399{
8400 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308401 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8402 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308403 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008405 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308406
8407
8408 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8409 if (NULL == wdiEnterImpsReqParams)
8410 {
8411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8412 "%s: VOS MEM Alloc Failure", __func__);
8413 VOS_ASSERT(0);
8414 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8415 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8416 return VOS_STATUS_E_NOMEM;
8417 }
8418
8419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8420 if (NULL == pWdaParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8423 "%s: VOS MEM Alloc Failure", __func__);
8424 VOS_ASSERT(0);
8425 vos_mem_free(wdiEnterImpsReqParams);
8426 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8427 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8428 return VOS_STATUS_E_NOMEM;
8429 }
8430
8431 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8432 wdiEnterImpsReqParams->pUserData = pWdaParams;
8433
8434 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8435 pWdaParams->wdaMsgParam = NULL;
8436 pWdaParams->pWdaContext = pWDA;
8437
8438 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8439 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8440 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 if(IS_WDI_STATUS_FAILURE(status))
8442 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308443 if (! (failcnt & 0xF))
8444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8445 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8446 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308447 vos_mem_free(wdiEnterImpsReqParams);
8448 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008449 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 return CONVERT_WDI2VOS_STATUS(status) ;
8452}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308453
8454/*
8455 * FUNCTION: WDA_ExitImpsRespCallback
8456 * send Exit IMPS RSP back to PE
8457 */
8458void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8459{
8460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8461 tWDA_CbContext *pWDA;
8462
8463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8464 "<------ %s " ,__func__);
8465
8466 if (NULL == pWdaParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8469 "%s: pWdaParams received NULL", __func__);
8470 VOS_ASSERT(0);
8471 return;
8472 }
8473 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8474
8475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8476 vos_mem_free(pWdaParams);
8477
8478 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8479 return;
8480}
8481
Jeff Johnson295189b2012-06-20 16:38:30 -07008482/*
8483 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 */
8485void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8486{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308487 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008489 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308490 if(NULL == pWdaParams)
8491 {
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8493 "%s: pWdaParams received NULL", __func__);
8494 VOS_ASSERT(0);
8495 return;
8496 }
8497
8498 if (IS_WDI_STATUS_FAILURE(status))
8499 {
8500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8501 vos_mem_free(pWdaParams);
8502 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8503 {
8504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8505 FL("reload wlan driver"));
8506 wpalWlanReload();
8507 }
8508 }
8509 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008510}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308511
Jeff Johnson295189b2012-06-20 16:38:30 -07008512/*
8513 * FUNCTION: WDA_ProcessExitImpsReq
8514 * Request to WDI to Exit IMPS power state.
8515 */
8516VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8517{
8518 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308519 tWDA_ReqParams *pWdaParams;
8520 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8521
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008523 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308524 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8525 sizeof(WDI_ExitImpsReqParamsType));
8526 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8529 "%s: VOS MEM Alloc Failure", __func__);
8530 VOS_ASSERT(0);
8531 return VOS_STATUS_E_NOMEM;
8532 }
8533 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8534 if(NULL == pWdaParams)
8535 {
8536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8537 "%s: VOS MEM Alloc Failure", __func__);
8538 VOS_ASSERT(0);
8539 vos_mem_free(wdiExitImpsReqParams);
8540 return VOS_STATUS_E_NOMEM;
8541 }
8542 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8543 wdiExitImpsReqParams->pUserData = pWdaParams;
8544
8545 /* Store param pointer as passed in by caller */
8546 /* store Params pass it to WDI */
8547 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8548 pWdaParams->pWdaContext = pWDA;
8549 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8550 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8551 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8552 pWdaParams);
8553 if (IS_WDI_STATUS_FAILURE(status))
8554 {
8555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8556 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8558 vos_mem_free(pWdaParams);
8559 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 return CONVERT_WDI2VOS_STATUS(status) ;
8562}
Jeff Johnson295189b2012-06-20 16:38:30 -07008563/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008564 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 * send Enter BMPS RSP back to PE
8566 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008567void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008568{
8569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308570 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008571 tEnterBmpsParams *pEnterBmpsRspParams;
8572
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 if(NULL == pWdaParams)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008578 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 VOS_ASSERT(0) ;
8580 return ;
8581 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008582
8583 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308584 if (NULL == pWDA)
8585 {
8586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8587 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308588
8589 if(pWdaParams->wdaWdiApiMsgParam)
8590 {
8591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8592 }
8593 vos_mem_free(pWdaParams);
8594
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308595 VOS_ASSERT(0);
8596 return ;
8597 }
8598
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008599 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8600
8601 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008602 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008603
8604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008606 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8607
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 return ;
8609}
Jeff Johnson295189b2012-06-20 16:38:30 -07008610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008611 * FUNCTION: WDA_EnterBmpsReqCallback
8612 * Free memory and send Enter BMPS RSP back to PE.
8613 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8614 */
8615void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8616{
8617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308618 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008619 tEnterBmpsParams *pEnterBmpsRspParams;
8620
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8622 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8623
8624 if(NULL == pWdaParams)
8625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8627 "%s: pWdaParams received NULL", __func__);
8628 VOS_ASSERT(0);
8629 return;
8630 }
8631
8632 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308633 if (NULL == pWDA)
8634 {
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8636 "%s:pWDA is NULL", __func__);
8637 VOS_ASSERT(0);
8638 return ;
8639 }
8640
Yue Ma7f44bbe2013-04-12 11:47:39 -07008641 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8642 pEnterBmpsRspParams->status = wdiStatus;
8643
8644 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8645 {
8646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8647 vos_mem_free(pWdaParams);
8648 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8649 }
8650
8651 return;
8652}
8653/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 * FUNCTION: WDA_ProcessEnterBmpsReq
8655 * Request to WDI to Enter BMPS power state.
8656 */
8657VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8658 tEnterBmpsParams *pEnterBmpsReqParams)
8659{
8660 WDI_Status status = WDI_STATUS_SUCCESS;
8661 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8662 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008664 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008665 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8666 {
8667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008668 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008669 VOS_ASSERT(0);
8670 return VOS_STATUS_E_FAILURE;
8671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8673 if (NULL == wdiEnterBmpsReqParams)
8674 {
8675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008678 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8679 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 return VOS_STATUS_E_NOMEM;
8681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8683 if (NULL == pWdaParams)
8684 {
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 VOS_ASSERT(0);
8688 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008689 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8690 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 return VOS_STATUS_E_NOMEM;
8692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8694 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8695 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8696 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008697 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8699 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8700 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008701 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8702 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008703
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 /* Store param pointer as passed in by caller */
8705 /* store Params pass it to WDI */
8706 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008707 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008710 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 if (IS_WDI_STATUS_FAILURE(status))
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8714 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008716 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008718 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 return CONVERT_WDI2VOS_STATUS(status);
8721}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008722
8723
8724static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8725 WDI_Status wdiStatus,
8726 tExitBmpsParams *pExitBmpsReqParams)
8727{
8728 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8729
8730 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8731}
8732
8733
Jeff Johnson295189b2012-06-20 16:38:30 -07008734/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008735 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 * send Exit BMPS RSP back to PE
8737 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008739{
8740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308741 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008742 tExitBmpsParams *pExitBmpsRspParams;
8743
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008745 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 if(NULL == pWdaParams)
8747 {
8748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 VOS_ASSERT(0) ;
8751 return ;
8752 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008753
8754 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308755 if (NULL == pWDA)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8758 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308759
8760 if(pWdaParams->wdaWdiApiMsgParam)
8761 {
8762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8763 }
8764 vos_mem_free(pWdaParams);
8765
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308766 VOS_ASSERT(0);
8767 return ;
8768 }
8769
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008770 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8771
8772 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008773 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8776 vos_mem_free(pWdaParams) ;
8777
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008778 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 return ;
8780}
Jeff Johnson295189b2012-06-20 16:38:30 -07008781/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008782 * FUNCTION: WDA_ExitBmpsReqCallback
8783 * Free memory and send Exit BMPS RSP back to PE.
8784 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8785 */
8786void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8787{
8788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308789 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008790 tExitBmpsParams *pExitBmpsRspParams;
8791
8792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8793 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8794
8795 if(NULL == pWdaParams)
8796 {
8797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8798 "%s: pWdaParams received NULL", __func__);
8799 VOS_ASSERT(0);
8800 return;
8801 }
8802
8803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308804 if (NULL == pWDA)
8805 {
8806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8807 "%s:pWDA is NULL", __func__);
8808 VOS_ASSERT(0);
8809 return ;
8810 }
8811
Yue Ma7f44bbe2013-04-12 11:47:39 -07008812 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8813 pExitBmpsRspParams->status = wdiStatus;
8814
8815 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8816 {
8817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8818 vos_mem_free(pWdaParams);
8819 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8820 }
8821
8822 return;
8823}
8824/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 * FUNCTION: WDA_ProcessExitBmpsReq
8826 * Request to WDI to Exit BMPS power state.
8827 */
8828VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8829 tExitBmpsParams *pExitBmpsReqParams)
8830{
8831 WDI_Status status = WDI_STATUS_SUCCESS ;
8832 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8833 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8834 sizeof(WDI_ExitBmpsReqParamsType)) ;
8835 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 if(NULL == wdiExitBmpsReqParams)
8839 {
8840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008843 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 return VOS_STATUS_E_NOMEM;
8845 }
8846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8847 if(NULL == pWdaParams)
8848 {
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 VOS_ASSERT(0);
8852 vos_mem_free(wdiExitBmpsReqParams);
8853 return VOS_STATUS_E_NOMEM;
8854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008856
8857 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8858
Yue Ma7f44bbe2013-04-12 11:47:39 -07008859 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8860 wdiExitBmpsReqParams->pUserData = pWdaParams;
8861
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 /* Store param pointer as passed in by caller */
8863 /* store Params pass it to WDI */
8864 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8865 pWdaParams->pWdaContext = pWDA;
8866 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008868 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 if(IS_WDI_STATUS_FAILURE(status))
8870 {
8871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8872 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8874 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008875 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 return CONVERT_WDI2VOS_STATUS(status) ;
8878}
Jeff Johnson295189b2012-06-20 16:38:30 -07008879/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008880 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 * send Enter UAPSD RSP back to PE
8882 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008883void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008884{
8885 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308886 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008887 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008889 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 if(NULL == pWdaParams)
8891 {
8892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008893 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 VOS_ASSERT(0) ;
8895 return ;
8896 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008897
8898 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308899 if (NULL == pWDA)
8900 {
8901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8902 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308903
8904 if(pWdaParams->wdaWdiApiMsgParam)
8905 {
8906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8907 }
8908 vos_mem_free(pWdaParams);
8909
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308910 VOS_ASSERT(0);
8911 return ;
8912 }
8913
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008914 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8915
8916 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008917 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008918
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8920 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008921 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 return ;
8923}
Jeff Johnson295189b2012-06-20 16:38:30 -07008924/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008925 * FUNCTION: WDA_EnterUapsdReqCallback
8926 * Free memory and send Enter UAPSD RSP back to PE.
8927 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8928 */
8929void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8930{
8931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8932 tWDA_CbContext *pWDA;
8933 tUapsdParams *pEnterUapsdRsqParams;
8934
8935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8936 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8937
8938 if(NULL == pWdaParams)
8939 {
8940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8941 "%s: pWdaParams received NULL", __func__);
8942 VOS_ASSERT(0);
8943 return;
8944 }
8945
8946 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308947 if (NULL == pWDA)
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8950 "%s:pWDA is NULL", __func__);
8951 VOS_ASSERT(0);
8952 return ;
8953 }
8954
Yue Ma7f44bbe2013-04-12 11:47:39 -07008955 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8956 pEnterUapsdRsqParams->status = wdiStatus;
8957
8958 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8959 {
8960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8961 vos_mem_free(pWdaParams);
8962 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8963 }
8964
8965 return;
8966}
8967/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 * FUNCTION: WDA_ProcessEnterUapsdReq
8969 * Request to WDI to Enter UAPSD power state.
8970 */
8971VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8972 tUapsdParams *pEnterUapsdReqParams)
8973{
8974 WDI_Status status = WDI_STATUS_SUCCESS ;
8975 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8976 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8977 sizeof(WDI_EnterUapsdReqParamsType)) ;
8978 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 if(NULL == wdiEnterUapsdReqParams)
8982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 VOS_ASSERT(0);
8986 return VOS_STATUS_E_NOMEM;
8987 }
8988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8989 if(NULL == pWdaParams)
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 VOS_ASSERT(0);
8994 vos_mem_free(wdiEnterUapsdReqParams);
8995 return VOS_STATUS_E_NOMEM;
8996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8998 pEnterUapsdReqParams->beDeliveryEnabled;
8999 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9000 pEnterUapsdReqParams->beTriggerEnabled;
9001 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9002 pEnterUapsdReqParams->bkDeliveryEnabled;
9003 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9004 pEnterUapsdReqParams->bkTriggerEnabled;
9005 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9006 pEnterUapsdReqParams->viDeliveryEnabled;
9007 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9008 pEnterUapsdReqParams->viTriggerEnabled;
9009 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9010 pEnterUapsdReqParams->voDeliveryEnabled;
9011 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9012 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009013 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009014
Yue Ma7f44bbe2013-04-12 11:47:39 -07009015 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9016 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009017
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 /* Store param pointer as passed in by caller */
9019 /* store Params pass it to WDI */
9020 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9021 pWdaParams->pWdaContext = pWDA;
9022 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009024 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 if(IS_WDI_STATUS_FAILURE(status))
9026 {
9027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9028 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9029 vos_mem_free(pWdaParams->wdaMsgParam) ;
9030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9031 vos_mem_free(pWdaParams) ;
9032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 return CONVERT_WDI2VOS_STATUS(status) ;
9034}
Jeff Johnson295189b2012-06-20 16:38:30 -07009035/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009036 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 * send Exit UAPSD RSP back to PE
9038 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009039void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009040{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009041
9042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9043 tWDA_CbContext *pWDA;
9044 tExitUapsdParams *pExitUapsdRspParams;
9045
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009048 if(NULL == pWdaParams)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009052 VOS_ASSERT(0);
9053 return;
9054 }
9055
9056 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9057 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9058
9059 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009060 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009061
9062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9063 vos_mem_free(pWdaParams) ;
9064
9065 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 return ;
9067}
Jeff Johnson295189b2012-06-20 16:38:30 -07009068/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009069 * FUNCTION: WDA_ExitUapsdReqCallback
9070 * Free memory and send Exit UAPSD RSP back to PE.
9071 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9072 */
9073void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9074{
9075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309076 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009077 tExitUapsdParams *pExitUapsdRspParams;
9078
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9080 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9081
9082 if(NULL == pWdaParams)
9083 {
9084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9085 "%s: pWdaParams received NULL", __func__);
9086 VOS_ASSERT(0);
9087 return;
9088 }
9089
9090 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309091 if (NULL == pWDA)
9092 {
9093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9094 "%s:pWDA is NULL", __func__);
9095 VOS_ASSERT(0);
9096 return ;
9097 }
9098
Yue Ma7f44bbe2013-04-12 11:47:39 -07009099 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9100 pExitUapsdRspParams->status = wdiStatus;
9101
9102 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9103 {
9104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9105 vos_mem_free(pWdaParams);
9106 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9107 }
9108
9109 return;
9110}
9111/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 * FUNCTION: WDA_ProcessExitUapsdReq
9113 * Request to WDI to Exit UAPSD power state.
9114 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009115VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9116 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009117{
9118 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009119 tWDA_ReqParams *pWdaParams ;
9120 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9121 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9122 sizeof(WDI_ExitUapsdReqParamsType)) ;
9123
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009126
9127 if(NULL == wdiExitUapsdReqParams)
9128 {
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009130 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009131 VOS_ASSERT(0);
9132 return VOS_STATUS_E_NOMEM;
9133 }
9134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9135 if(NULL == pWdaParams)
9136 {
9137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009138 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009139 VOS_ASSERT(0);
9140 vos_mem_free(wdiExitUapsdReqParams);
9141 return VOS_STATUS_E_NOMEM;
9142 }
9143
9144 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009145 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9146 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009147
9148 /* Store param pointer as passed in by caller */
9149 /* store Params pass it to WDI */
9150 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9151 pWdaParams->pWdaContext = pWDA;
9152 pWdaParams->wdaMsgParam = pExitUapsdParams;
9153
Yue Ma7f44bbe2013-04-12 11:47:39 -07009154 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 if(IS_WDI_STATUS_FAILURE(status))
9156 {
9157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9158 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009159 vos_mem_free(pWdaParams->wdaMsgParam) ;
9160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9161 vos_mem_free(pWdaParams) ;
9162
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 return CONVERT_WDI2VOS_STATUS(status) ;
9165}
9166
Jeff Johnson295189b2012-06-20 16:38:30 -07009167/*
9168 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9169 *
9170 */
9171void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9172{
9173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 if(NULL == pWdaParams)
9177 {
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009180 VOS_ASSERT(0) ;
9181 return ;
9182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 if( pWdaParams != NULL )
9184 {
9185 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9186 {
9187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9188 }
9189 if( pWdaParams->wdaMsgParam != NULL )
9190 {
9191 vos_mem_free(pWdaParams->wdaMsgParam) ;
9192 }
9193 vos_mem_free(pWdaParams) ;
9194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 return ;
9196}
Jeff Johnson295189b2012-06-20 16:38:30 -07009197/*
9198 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9199 * Request to WDI to set the power save params at start.
9200 */
9201VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9202 tSirPowerSaveCfg *pPowerSaveCfg)
9203{
9204 WDI_Status status = WDI_STATUS_SUCCESS ;
9205 tHalCfg *tlvStruct = NULL ;
9206 tANI_U8 *tlvStructStart = NULL ;
9207 v_PVOID_t *configParam;
9208 tANI_U32 configParamSize;
9209 tANI_U32 *configDataValue;
9210 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9211 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009217 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009219 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 return VOS_STATUS_E_FAILURE;
9221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9223 if (NULL == wdiPowerSaveCfg)
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009228 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 return VOS_STATUS_E_NOMEM;
9230 }
9231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9232 if(NULL == pWdaParams)
9233 {
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009236 VOS_ASSERT(0);
9237 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009238 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 return VOS_STATUS_E_NOMEM;
9240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9242 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 if(NULL == configParam)
9244 {
9245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009246 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009247 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 vos_mem_free(pWdaParams);
9249 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009250 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009251 return VOS_STATUS_E_NOMEM;
9252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 vos_mem_set(configParam, configParamSize, 0);
9254 wdiPowerSaveCfg->pConfigBuffer = configParam;
9255 tlvStruct = (tHalCfg *)configParam;
9256 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9258 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9259 tlvStruct->length = sizeof(tANI_U32);
9260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9261 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9263 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9265 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9266 tlvStruct->length = sizeof(tANI_U32);
9267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9268 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9270 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009271 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9272 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9273 tlvStruct->length = sizeof(tANI_U32);
9274 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9275 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9277 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9279 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9280 tlvStruct->length = sizeof(tANI_U32);
9281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9282 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9284 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9286 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9287 tlvStruct->length = sizeof(tANI_U32);
9288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9289 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9291 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009292 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9293 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9294 tlvStruct->length = sizeof(tANI_U32);
9295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9296 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9298 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009299 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9300 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9301 tlvStruct->length = sizeof(tANI_U32);
9302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9303 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9305 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9307 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9308 tlvStruct->length = sizeof(tANI_U32);
9309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9310 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9311 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9312 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9314 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9315 tlvStruct->length = sizeof(tANI_U32);
9316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9317 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9318 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9319 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9321 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9322 tlvStruct->length = sizeof(tANI_U32);
9323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9324 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009325 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9326 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9328 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9329 tlvStruct->length = sizeof(tANI_U32);
9330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9331 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9333 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 /* store Params pass it to WDI */
9337 pWdaParams->wdaMsgParam = configParam;
9338 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9339 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9341 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 if(IS_WDI_STATUS_FAILURE(status))
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9345 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9346 vos_mem_free(pWdaParams->wdaMsgParam);
9347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9348 vos_mem_free(pWdaParams);
9349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 return CONVERT_WDI2VOS_STATUS(status);
9352}
Jeff Johnson295189b2012-06-20 16:38:30 -07009353/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009354 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009355 *
9356 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009357void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009358{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9360
Jeff Johnson295189b2012-06-20 16:38:30 -07009361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009362 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009363
9364 if(NULL == pWdaParams)
9365 {
9366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9367 "%s: pWdaParams received NULL", __func__);
9368 VOS_ASSERT(0);
9369 return ;
9370 }
9371
9372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 vos_mem_free(pWdaParams);
9374
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 return ;
9376}
Jeff Johnson295189b2012-06-20 16:38:30 -07009377/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009378 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9379 * Free memory.
9380 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9381 */
9382void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9383{
9384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9385
9386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9387 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9388
9389 if(NULL == pWdaParams)
9390 {
9391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9392 "%s: pWdaParams received NULL", __func__);
9393 VOS_ASSERT(0);
9394 return;
9395 }
9396
9397 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9398 {
9399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9400 vos_mem_free(pWdaParams);
9401 }
9402
9403 return;
9404}
9405/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 * FUNCTION: WDA_SetUapsdAcParamsReq
9407 * Request to WDI to set the UAPSD params for an ac (sta mode).
9408 */
9409VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9410 tUapsdInfo *pUapsdInfo)
9411{
9412 WDI_Status status = WDI_STATUS_SUCCESS;
9413 tWDA_CbContext *pWDA = NULL ;
9414 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9415 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9416 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9417 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 if(NULL == wdiUapsdParams)
9421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 VOS_ASSERT(0);
9425 return VOS_STATUS_E_NOMEM;
9426 }
9427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9428 if(NULL == pWdaParams)
9429 {
9430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 VOS_ASSERT(0);
9433 vos_mem_free(wdiUapsdParams);
9434 return VOS_STATUS_E_NOMEM;
9435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9437 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9438 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9439 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9440 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9441 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009442 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9443 wdiUapsdParams->pUserData = pWdaParams;
9444
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 pWdaParams->pWdaContext = pWDA;
9447 /* Store param pointer as passed in by caller */
9448 pWdaParams->wdaMsgParam = pUapsdInfo;
9449 /* store Params pass it to WDI */
9450 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009452 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 if(IS_WDI_STATUS_FAILURE(status))
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9457 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9459 vos_mem_free(pWdaParams);
9460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9462 return VOS_STATUS_SUCCESS;
9463 else
9464 return VOS_STATUS_E_FAILURE;
9465
Jeff Johnson295189b2012-06-20 16:38:30 -07009466}
9467/*
9468 * FUNCTION: WDA_ClearUapsdAcParamsReq
9469 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9470 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9471 * and again enter the UPASD with the modified params. Hence the disable
9472 * function was kept empty.
9473 *
9474 */
9475VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9476{
9477 /* do nothing */
9478 return VOS_STATUS_SUCCESS;
9479}
Jeff Johnson295189b2012-06-20 16:38:30 -07009480/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009481 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 *
9483 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009484void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009485{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9487
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009489 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009490
9491 if(NULL == pWdaParams)
9492 {
9493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009494 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009495 VOS_ASSERT(0) ;
9496 return ;
9497 }
9498
9499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9500 vos_mem_free(pWdaParams->wdaMsgParam);
9501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 //print a msg, nothing else to do
9504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009505 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 return ;
9507}
Jeff Johnson295189b2012-06-20 16:38:30 -07009508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009509 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9510 * Free memory.
9511 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9512 */
9513void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9514{
9515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9516
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9518 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9519
9520 if(NULL == pWdaParams)
9521 {
9522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9523 "%s: pWdaParams received NULL", __func__);
9524 VOS_ASSERT(0);
9525 return;
9526 }
9527
9528 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9529 {
9530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9531 vos_mem_free(pWdaParams->wdaMsgParam);
9532 vos_mem_free(pWdaParams);
9533 }
9534
9535 return;
9536}
9537/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 * FUNCTION: WDA_UpdateUapsdParamsReq
9539 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9540 */
9541VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9542 tUpdateUapsdParams* pUpdateUapsdInfo)
9543{
9544 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009545 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9547 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9548 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009549 tWDA_ReqParams *pWdaParams = NULL;
9550
Jeff Johnson295189b2012-06-20 16:38:30 -07009551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009552 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 if(NULL == wdiUpdateUapsdParams)
9554 {
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_ASSERT(0);
9558 return VOS_STATUS_E_NOMEM;
9559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009560 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9561 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9562 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009563 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9564 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009565
9566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9567 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 {
9569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009572 vos_mem_free(pUpdateUapsdInfo);
9573 vos_mem_free(wdiUpdateUapsdParams);
9574 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009577 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009579 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9580 pWdaParams->pWdaContext = pWDA;
9581
Jeff Johnson43971f52012-07-17 12:26:56 -07009582 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009583 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009584 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009585
Jeff Johnson43971f52012-07-17 12:26:56 -07009586 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 {
9588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9589 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009590 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9592 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009593 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009595 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009596}
Jeff Johnson295189b2012-06-20 16:38:30 -07009597/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009598 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 *
9600 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009601void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009602{
9603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 if(WDI_STATUS_SUCCESS != wdiStatus)
9607 {
9608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009609 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 if(NULL == pWdaParams)
9612 {
9613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009614 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 VOS_ASSERT(0) ;
9616 return ;
9617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9619 vos_mem_free(pWdaParams->wdaMsgParam);
9620 vos_mem_free(pWdaParams);
9621 return ;
9622}
Jeff Johnson295189b2012-06-20 16:38:30 -07009623/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009624 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9625 * Free memory.
9626 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9627 */
9628void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9629{
9630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9631
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9633 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9634
9635 if(NULL == pWdaParams)
9636 {
9637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9638 "%s: pWdaParams received NULL", __func__);
9639 VOS_ASSERT(0);
9640 return;
9641 }
9642
9643 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9644 {
9645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9646 vos_mem_free(pWdaParams->wdaMsgParam);
9647 vos_mem_free(pWdaParams);
9648 }
9649
9650 return;
9651}
9652/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9654 *
9655 */
9656VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9657 tSirWlanSetRxpFilters *pWlanSuspendParam)
9658{
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009660 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309661 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309663 /* Sanity Check
9664 * This is very unlikely and add assert to collect more info next time */
9665 if(NULL == pWlanSuspendParam)
9666 {
9667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9668 "%s: pWlanSuspendParam received NULL", __func__);
9669 VOS_ASSERT(0) ;
9670 return VOS_STATUS_E_FAULT;
9671 }
9672 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9673 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009675 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 if(NULL == wdiRxpFilterParams)
9677 {
9678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 VOS_ASSERT(0);
9681 vos_mem_free(pWlanSuspendParam);
9682 return VOS_STATUS_E_NOMEM;
9683 }
9684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9685 if(NULL == pWdaParams)
9686 {
9687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009689 VOS_ASSERT(0);
9690 vos_mem_free(wdiRxpFilterParams);
9691 vos_mem_free(pWlanSuspendParam);
9692 return VOS_STATUS_E_NOMEM;
9693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9695 pWlanSuspendParam->setMcstBcstFilter;
9696 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9697 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9698
Yue Ma7f44bbe2013-04-12 11:47:39 -07009699 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9700 wdiRxpFilterParams->pUserData = pWdaParams;
9701
Jeff Johnson295189b2012-06-20 16:38:30 -07009702 pWdaParams->pWdaContext = pWDA;
9703 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9704 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009705 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009706 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009708 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009709 {
9710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9711 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009712 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9714 vos_mem_free(pWdaParams->wdaMsgParam);
9715 vos_mem_free(pWdaParams);
9716 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009717 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009718}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309719
9720/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309721 * FUNCTION: WDA_ProcessGetFrameLogReq
9722 * Request to WDI to get the Frame Log.
9723 */
9724VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9725 tAniGetFrameLogReq *pGetFrameLog)
9726{
9727 VOS_STATUS status = VOS_STATUS_SUCCESS;
9728 WDI_Status wstatus;
9729 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9730 tWDA_ReqParams *pWdaParams ;
9731
9732 /* Sanity Check*/
9733 if(NULL == pGetFrameLog)
9734 {
9735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309736 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +05309737 VOS_ASSERT(0) ;
9738 return VOS_STATUS_E_FAULT;
9739 }
9740
9741 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9742 sizeof(WDI_GetFrameLogReqInfoType));
9743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9744 "------> %s " ,__func__);
9745
9746 if(NULL == wdiGetFrameLogInfo)
9747 {
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9749 "%s: VOS MEM Alloc Failure", __func__);
9750 VOS_ASSERT(0);
9751 vos_mem_free(pGetFrameLog);
9752 return VOS_STATUS_E_NOMEM;
9753 }
9754
9755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9756 if(NULL == pWdaParams)
9757 {
9758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9759 "%s: VOS MEM Alloc Failure", __func__);
9760 VOS_ASSERT(0);
9761 vos_mem_free(wdiGetFrameLogInfo);
9762 vos_mem_free(pGetFrameLog);
9763 return VOS_STATUS_E_NOMEM;
9764 }
9765
9766 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9767
9768 pWdaParams->pWdaContext = pWDA;
9769 pWdaParams->wdaMsgParam = pGetFrameLog;
9770 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9771
9772 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9773 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9774 pWdaParams);
9775 if(IS_WDI_STATUS_FAILURE(wstatus))
9776 {
9777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9778 "Failure in get frame log REQ WDI API, free all the memory" );
9779 status = CONVERT_WDI2VOS_STATUS(wstatus);
9780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9781 vos_mem_free(pWdaParams->wdaMsgParam);
9782 vos_mem_free(pWdaParams);
9783 }
9784 return status;
9785}
9786
9787/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309788 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309789 *
9790 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309791VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
9792 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309793{
9794 VOS_STATUS status = VOS_STATUS_SUCCESS;
9795 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309796 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309797 tWDA_ReqParams *pWdaParams ;
9798
9799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9800 "------> %s " ,__func__);
9801
9802 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309803 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309804 {
9805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309806 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309807 VOS_ASSERT(0) ;
9808 return VOS_STATUS_E_FAULT;
9809 }
9810
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309811 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
9812 sizeof(WDI_FWLoggingInitReqInfoType));
9813 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309814 {
9815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9816 "%s: VOS MEM Alloc Failure", __func__);
9817 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309818 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309819 return VOS_STATUS_E_NOMEM;
9820 }
9821
9822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9823 if(NULL == pWdaParams)
9824 {
9825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9826 "%s: VOS MEM Alloc Failure", __func__);
9827 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309828 vos_mem_free(wdiFWLoggingInitInfo);
9829 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309830 return VOS_STATUS_E_NOMEM;
9831 }
9832
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309833 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
9834 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
9835 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
9836 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
9837 wdiFWLoggingInitInfo->continuousFrameLogging =
9838 pFWLoggingInitParam->continuousFrameLogging;
9839 wdiFWLoggingInitInfo->minLogBufferSize=
9840 pFWLoggingInitParam->minLogBufferSize;
9841 wdiFWLoggingInitInfo->maxLogBufferSize=
9842 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309843
9844 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309845 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
9846 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309847
Siddharth Bhald1be97f2015-05-27 22:39:59 +05309848 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
9849 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309850 pWdaParams);
9851 if(IS_WDI_STATUS_FAILURE(wstatus))
9852 {
9853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9854 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9855 status = CONVERT_WDI2VOS_STATUS(wstatus);
9856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9857 vos_mem_free(pWdaParams->wdaMsgParam);
9858 vos_mem_free(pWdaParams);
9859 }
9860
9861 return status;
9862}
9863
Jeff Johnson295189b2012-06-20 16:38:30 -07009864/*
9865 * FUNCTION: WDA_WdiIndicationCallback
9866 *
9867 */
9868void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9869 void* pUserData)
9870{
9871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009872 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009873}
Jeff Johnson295189b2012-06-20 16:38:30 -07009874/*
9875 * FUNCTION: WDA_ProcessWlanSuspendInd
9876 *
9877 */
9878VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9879 tSirWlanSuspendParam *pWlanSuspendParam)
9880{
9881 WDI_Status wdiStatus;
9882 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009884 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9886 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9887 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9888 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9891 if(WDI_STATUS_PENDING == wdiStatus)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 }
9896 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9897 {
9898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009899 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 vos_mem_free(pWlanSuspendParam);
9902 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9903}
9904
Chet Lanctot186b5732013-03-18 10:26:30 -07009905#ifdef WLAN_FEATURE_11W
9906/*
9907 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9908 *
9909 */
9910VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9911 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9912{
9913 WDI_Status wdiStatus;
9914 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9916 "------> %s ", __func__);
9917
9918 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9919 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9920 sizeof(tSirMacAddr));
9921
9922 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9923 wdiExclUnencryptParams.pUserData = pWDA;
9924
9925 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9926 if(WDI_STATUS_PENDING == wdiStatus)
9927 {
9928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9929 "Pending received for %s:%d ", __func__, __LINE__ );
9930 }
9931 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9932 {
9933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9934 "Failure in %s:%d ", __func__, __LINE__ );
9935 }
9936 vos_mem_free(pExclUnencryptParam);
9937 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9938}
9939#endif
9940
Jeff Johnson295189b2012-06-20 16:38:30 -07009941/*
9942 * FUNCTION: WDA_ProcessWlanResumeCallback
9943 *
9944 */
9945void WDA_ProcessWlanResumeCallback(
9946 WDI_SuspendResumeRspParamsType *resumeRspParams,
9947 void* pUserData)
9948{
9949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009951 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 if(NULL == pWdaParams)
9953 {
9954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009955 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 VOS_ASSERT(0) ;
9957 return ;
9958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9960 {
9961 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009962 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9965 vos_mem_free(pWdaParams->wdaMsgParam);
9966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 return ;
9968}
Jeff Johnson295189b2012-06-20 16:38:30 -07009969/*
9970 * FUNCTION: WDA_ProcessWlanResumeReq
9971 *
9972 */
9973VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9974 tSirWlanResumeParam *pWlanResumeParam)
9975{
9976 WDI_Status wdiStatus;
9977 WDI_ResumeParamsType *wdiResumeParams =
9978 (WDI_ResumeParamsType *)vos_mem_malloc(
9979 sizeof(WDI_ResumeParamsType) ) ;
9980 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009983 if(NULL == wdiResumeParams)
9984 {
9985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 VOS_ASSERT(0);
9988 return VOS_STATUS_E_NOMEM;
9989 }
9990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9991 if(NULL == pWdaParams)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 VOS_ASSERT(0);
9996 vos_mem_free(wdiResumeParams);
9997 return VOS_STATUS_E_NOMEM;
9998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10000 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 wdiResumeParams->wdiReqStatusCB = NULL;
10003 pWdaParams->wdaMsgParam = pWlanResumeParam;
10004 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10005 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10007 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10008 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10012 "Failure in Host Resume REQ WDI API, free all the memory " );
10013 VOS_ASSERT(0);
10014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10015 vos_mem_free(pWdaParams->wdaMsgParam);
10016 vos_mem_free(pWdaParams);
10017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10019}
10020
Jeff Johnson295189b2012-06-20 16:38:30 -070010021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010022 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 *
10024 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010025void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010026{
10027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 if(NULL == pWdaParams)
10031 {
10032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010033 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010034 VOS_ASSERT(0) ;
10035 return ;
10036 }
10037
10038 vos_mem_free(pWdaParams->wdaMsgParam) ;
10039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10040 vos_mem_free(pWdaParams) ;
10041 /*
10042 * No respone required for SetBeaconFilter req so just free the request
10043 * param here
10044 */
10045
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 return ;
10047}
Jeff Johnson295189b2012-06-20 16:38:30 -070010048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010049 * FUNCTION: WDA_SetBeaconFilterReqCallback
10050 * Free memory.
10051 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10052 */
10053void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10054{
10055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10056
10057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10058 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10059
10060 if(NULL == pWdaParams)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10063 "%s: pWdaParams received NULL", __func__);
10064 VOS_ASSERT(0);
10065 return;
10066 }
10067
10068 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10069 {
10070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10071 vos_mem_free(pWdaParams->wdaMsgParam);
10072 vos_mem_free(pWdaParams);
10073 }
10074
10075 return;
10076}
10077/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 * FUNCTION: WDA_SetBeaconFilterReq
10079 * Request to WDI to send the beacon filtering related information.
10080 */
10081VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10082 tBeaconFilterMsg* pBeaconFilterInfo)
10083{
10084 WDI_Status status = WDI_STATUS_SUCCESS;
10085 tANI_U8 *dstPtr, *srcPtr;
10086 tANI_U8 filterLength;
10087 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10088 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10089 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10090 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 if(NULL == wdiBeaconFilterInfo)
10094 {
10095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010097 VOS_ASSERT(0);
10098 return VOS_STATUS_E_NOMEM;
10099 }
10100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10101 if(NULL == pWdaParams)
10102 {
10103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 VOS_ASSERT(0);
10106 vos_mem_free(wdiBeaconFilterInfo);
10107 return VOS_STATUS_E_NOMEM;
10108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10110 pBeaconFilterInfo->beaconInterval;
10111 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10112 pBeaconFilterInfo->capabilityInfo;
10113 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10114 pBeaconFilterInfo->capabilityMask;
10115 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010116
10117 //Fill the BssIdx
10118 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10119
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 //Fill structure with info contained in the beaconFilterTable
10121 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10122 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10123 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10124 if(WDI_BEACON_FILTER_LEN < filterLength)
10125 {
10126 filterLength = WDI_BEACON_FILTER_LEN;
10127 }
10128 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010129 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10130 wdiBeaconFilterInfo->pUserData = pWdaParams;
10131
Jeff Johnson295189b2012-06-20 16:38:30 -070010132 /* Store param pointer as passed in by caller */
10133 /* store Params pass it to WDI */
10134 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10135 pWdaParams->pWdaContext = pWDA;
10136 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10137
Jeff Johnson295189b2012-06-20 16:38:30 -070010138 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010139 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 if(IS_WDI_STATUS_FAILURE(status))
10141 {
10142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10143 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10144 vos_mem_free(pWdaParams->wdaMsgParam) ;
10145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10146 vos_mem_free(pWdaParams) ;
10147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 return CONVERT_WDI2VOS_STATUS(status) ;
10149}
Jeff Johnson295189b2012-06-20 16:38:30 -070010150/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010151 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 *
10153 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010154void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010155{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10157
Jeff Johnson295189b2012-06-20 16:38:30 -070010158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010159 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010160
10161 if(NULL == pWdaParams)
10162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010164 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010165 VOS_ASSERT(0) ;
10166 return ;
10167 }
10168
10169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10170 vos_mem_free(pWdaParams->wdaMsgParam);
10171 vos_mem_free(pWdaParams);
10172
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 //print a msg, nothing else to do
10174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010175 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 return ;
10177}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010178/*
10179 * FUNCTION: WDA_RemBeaconFilterReqCallback
10180 * Free memory.
10181 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10182 */
10183void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10184{
10185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10186
10187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10188 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10189
10190 if(NULL == pWdaParams)
10191 {
10192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10193 "%s: pWdaParams received NULL", __func__);
10194 VOS_ASSERT(0);
10195 return;
10196 }
10197
10198 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10199 {
10200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10201 vos_mem_free(pWdaParams->wdaMsgParam);
10202 vos_mem_free(pWdaParams);
10203 }
10204
10205 return;
10206}
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 // TODO: PE does not have this feature for now implemented,
10208 // but the support for removing beacon filter exists between
10209 // HAL and FW. This function can be called whenever PE defines
10210 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010211/*
10212 * FUNCTION: WDA_RemBeaconFilterReq
10213 * Request to WDI to send the removal of beacon filtering related information.
10214 */
10215VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10216 tRemBeaconFilterMsg* pBeaconFilterInfo)
10217{
10218 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010219 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10221 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10222 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010223 tWDA_ReqParams *pWdaParams ;
10224
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 if(NULL == wdiBeaconFilterInfo)
10228 {
10229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 VOS_ASSERT(0);
10232 return VOS_STATUS_E_NOMEM;
10233 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10235 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 {
10237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010240 vos_mem_free(wdiBeaconFilterInfo);
10241 vos_mem_free(pBeaconFilterInfo);
10242 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010244
10245 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10246 pBeaconFilterInfo->ucIeCount;
10247 //Fill structure with info contained in the ucRemIeId
10248 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10249 pBeaconFilterInfo->ucRemIeId,
10250 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10251 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10252 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253
10254 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010255 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010257 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10258
10259 pWdaParams->pWdaContext = pWDA;
10260
Jeff Johnson43971f52012-07-17 12:26:56 -070010261 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010262 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010263 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 {
10265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10266 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010267 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10269 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010270 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010272 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010273}
Jeff Johnson295189b2012-06-20 16:38:30 -070010274/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010275 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 *
10277 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010278void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010279{
10280 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010282 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 if(NULL == pWdaParams)
10284 {
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010286 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 VOS_ASSERT(0) ;
10288 return ;
10289 }
10290
10291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10292 vos_mem_free(pWdaParams) ;
10293
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 return ;
10295}
Jeff Johnson295189b2012-06-20 16:38:30 -070010296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010297 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10298 * Free memory.
10299 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10300 */
10301void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10302{
10303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10304
10305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10306 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10307
10308 if(NULL == pWdaParams)
10309 {
10310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10311 "%s: pWdaParams received NULL", __func__);
10312 VOS_ASSERT(0);
10313 return;
10314 }
10315
10316 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10317 {
10318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10319 vos_mem_free(pWdaParams);
10320 }
10321
10322 return;
10323}
10324/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 * FUNCTION: WDA_SetRSSIThresholdsReq
10326 * Request to WDI to set the RSSI thresholds (sta mode).
10327 */
10328VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10329{
10330 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010331 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 tWDA_CbContext *pWDA = NULL ;
10333 v_PVOID_t pVosContext = NULL;
10334 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10335 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10336 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 if(NULL == wdiRSSIThresholdsInfo)
10341 {
10342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 VOS_ASSERT(0);
10345 return VOS_STATUS_E_NOMEM;
10346 }
10347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10348 if(NULL == pWdaParams)
10349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_ASSERT(0);
10353 vos_mem_free(wdiRSSIThresholdsInfo);
10354 return VOS_STATUS_E_NOMEM;
10355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10358 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10359 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10361 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10362 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10364 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10365 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010366 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10367 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10369 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10370
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 /* Store param pointer as passed in by caller */
10372 /* store Params pass it to WDI */
10373 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10374 pWdaParams->pWdaContext = pWDA;
10375 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010376 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010377 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010378 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 {
10380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10381 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010382 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10384 vos_mem_free(pWdaParams) ;
10385 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010386 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387
10388}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010389/*
Yue Madb90ac12013-04-04 13:39:13 -070010390 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 *
10392 */
Yue Madb90ac12013-04-04 13:39:13 -070010393void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010394{
10395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10396
10397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 if(NULL == pWdaParams)
10400 {
10401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010402 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 VOS_ASSERT(0) ;
10404 return ;
10405 }
10406
10407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10408 vos_mem_free(pWdaParams->wdaMsgParam);
10409 vos_mem_free(pWdaParams) ;
10410
10411 //print a msg, nothing else to do
10412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010413 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 return ;
10415}
Jeff Johnson295189b2012-06-20 16:38:30 -070010416/*
Yue Madb90ac12013-04-04 13:39:13 -070010417 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010418 * Free memory.
10419 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010420 */
10421void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10422{
10423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10424
10425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10426 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10427
10428 if(NULL == pWdaParams)
10429 {
10430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10431 "%s: Invalid pWdaParams pointer", __func__);
10432 VOS_ASSERT(0);
10433 return;
10434 }
10435
10436 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10437 {
10438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10439 vos_mem_free(pWdaParams->wdaMsgParam);
10440 vos_mem_free(pWdaParams);
10441 }
10442
10443 return;
10444}
10445/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 * FUNCTION: WDA_ProcessHostOffloadReq
10447 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10448 * to broadcast traffic (sta mode).
10449 */
10450VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10451 tSirHostOffloadReq *pHostOffloadParams)
10452{
10453 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010454 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10456 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10457 sizeof(WDI_HostOffloadReqParamsType)) ;
10458 tWDA_ReqParams *pWdaParams ;
10459
10460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010461 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010462
10463 if(NULL == wdiHostOffloadInfo)
10464 {
10465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 VOS_ASSERT(0);
10468 return VOS_STATUS_E_NOMEM;
10469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10471 if(NULL == pWdaParams)
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010475 VOS_ASSERT(0);
10476 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010477 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 return VOS_STATUS_E_NOMEM;
10479 }
10480
10481 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10482 pHostOffloadParams->offloadType;
10483 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10484 pHostOffloadParams->enableOrDisable;
10485
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010486 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10487 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10488
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10490 {
10491 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10492 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10493 pHostOffloadParams->params.hostIpv4Addr,
10494 4);
10495 break;
10496 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10497 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10498 pHostOffloadParams->params.hostIpv6Addr,
10499 16);
10500 break;
10501 case SIR_IPV6_NS_OFFLOAD:
10502 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10503 pHostOffloadParams->params.hostIpv6Addr,
10504 16);
10505
10506#ifdef WLAN_NS_OFFLOAD
10507 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10508 {
10509 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10510 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10511 16);
10512 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10513 }
10514 else
10515 {
10516 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10517 }
10518
10519 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10520 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10521 16);
10522 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10523 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10524 6);
10525
10526 //Only two are supported so let's go through them without a loop
10527 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10528 {
10529 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10530 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10531 16);
10532 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10533 }
10534 else
10535 {
10536 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10537 }
10538
10539 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10540 {
10541 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10542 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10543 16);
10544 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10545 }
10546 else
10547 {
10548 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10549 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010550 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10551 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 break;
10553#endif //WLAN_NS_OFFLOAD
10554 default:
10555 {
10556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10557 "No Handling for Offload Type %x in WDA "
10558 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10559 //WDA_VOS_ASSERT(0) ;
10560 }
10561 }
Yue Madb90ac12013-04-04 13:39:13 -070010562 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10563 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010564
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010566 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 /* store Params pass it to WDI */
10568 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10569 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010570
Jeff Johnson295189b2012-06-20 16:38:30 -070010571
Jeff Johnson43971f52012-07-17 12:26:56 -070010572 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010573 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010574
Jeff Johnson43971f52012-07-17 12:26:56 -070010575 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010576 {
10577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010578 "Failure in host offload REQ WDI API, free all the memory %d",
10579 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010580 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10582 vos_mem_free(pWdaParams->wdaMsgParam);
10583 vos_mem_free(pWdaParams) ;
10584 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010585 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010586
10587}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010588/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010589 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 *
10591 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010592void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010593{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10595
Jeff Johnson295189b2012-06-20 16:38:30 -070010596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010597 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010598
10599 if(NULL == pWdaParams)
10600 {
10601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010602 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010603 VOS_ASSERT(0) ;
10604 return ;
10605 }
10606
10607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10608 vos_mem_free(pWdaParams->wdaMsgParam);
10609 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010610
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 //print a msg, nothing else to do
10612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010613 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010614 return ;
10615}
Jeff Johnson295189b2012-06-20 16:38:30 -070010616/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010617 * FUNCTION: WDA_KeepAliveReqCallback
10618 * Free memory.
10619 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10620 */
10621void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10622{
10623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10624
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10626 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10627
10628 if(NULL == pWdaParams)
10629 {
10630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10631 "%s: pWdaParams received NULL", __func__);
10632 VOS_ASSERT(0);
10633 return;
10634 }
10635
10636 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10637 {
10638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10639 vos_mem_free(pWdaParams->wdaMsgParam);
10640 vos_mem_free(pWdaParams);
10641 }
10642
10643 return;
10644}
10645/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 * FUNCTION: WDA_ProcessKeepAliveReq
10647 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10648 * wakeup due to broadcast traffic (sta mode).
10649 */
10650VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10651 tSirKeepAliveReq *pKeepAliveParams)
10652{
10653 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010654 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10656 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10657 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010658 tWDA_ReqParams *pWdaParams;
10659
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010661 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 if(NULL == wdiKeepAliveInfo)
10663 {
10664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010667 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 return VOS_STATUS_E_NOMEM;
10669 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010670
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__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010676 VOS_ASSERT(0);
10677 vos_mem_free(wdiKeepAliveInfo);
10678 vos_mem_free(pKeepAliveParams);
10679 return VOS_STATUS_E_NOMEM;
10680 }
10681
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10683 pKeepAliveParams->packetType;
10684 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10685 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010686
10687 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10688 pKeepAliveParams->bssId,
10689 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010690
10691 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10692 {
10693 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10694 pKeepAliveParams->hostIpv4Addr,
10695 SIR_IPV4_ADDR_LEN);
10696 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10697 pKeepAliveParams->destIpv4Addr,
10698 SIR_IPV4_ADDR_LEN);
10699 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10700 pKeepAliveParams->destMacAddr,
10701 SIR_MAC_ADDR_LEN);
10702 }
10703 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10704 {
10705 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10706 SIR_IPV4_ADDR_LEN,
10707 0);
10708 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10709 SIR_IPV4_ADDR_LEN,
10710 0);
10711 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10712 SIR_MAC_ADDR_LEN,
10713 0);
10714 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010715 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10716 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010717
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010719 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010721 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10722 pWdaParams->pWdaContext = pWDA;
10723
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10725 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10726 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10727 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10728 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10730 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10731 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10732 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10733 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10735 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10736 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10737 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10738 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10739 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10740 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10741 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10743 "TimePeriod %d PacketType %d",
10744 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10745 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010746 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010747 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010748
Jeff Johnson43971f52012-07-17 12:26:56 -070010749 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10752 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010753 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10755 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010756 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010758 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010759
10760}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010761/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010762 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010763 *
10764 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010765void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010766 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10767 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010768{
10769 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010771 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 if(NULL == pWdaParams)
10773 {
10774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010775 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 VOS_ASSERT(0) ;
10777 return ;
10778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10780 vos_mem_free(pWdaParams->wdaMsgParam);
10781 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 return ;
10783}
Jeff Johnson295189b2012-06-20 16:38:30 -070010784/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010785 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10786 * Free memory.
10787 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10788 */
10789void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10790{
10791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10792
10793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10794 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10795
10796 if(NULL == pWdaParams)
10797 {
10798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10799 "%s: pWdaParams received NULL", __func__);
10800 VOS_ASSERT(0);
10801 return;
10802 }
10803
10804 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10805 {
10806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10807 vos_mem_free(pWdaParams->wdaMsgParam);
10808 vos_mem_free(pWdaParams);
10809 }
10810
10811 return;
10812}
10813
10814/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10816 * Request to WDI to add WOWL Bcast pattern
10817 */
10818VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10819 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10820{
10821 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010822 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10824 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10825 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10826 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010828 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 if(NULL == wdiWowlAddBcPtrnInfo)
10830 {
10831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 VOS_ASSERT(0);
10834 return VOS_STATUS_E_NOMEM;
10835 }
10836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10837 if(NULL == pWdaParams)
10838 {
10839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_ASSERT(0);
10842 vos_mem_free(wdiWowlAddBcPtrnInfo);
10843 return VOS_STATUS_E_NOMEM;
10844 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10846 pWowlAddBcPtrnParams->ucPatternId;
10847 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10848 pWowlAddBcPtrnParams->ucPatternByteOffset;
10849 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10850 pWowlAddBcPtrnParams->ucPatternMaskSize;
10851 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10852 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010853 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10854 {
10855 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10856 pWowlAddBcPtrnParams->ucPattern,
10857 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10858 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10859 pWowlAddBcPtrnParams->ucPatternMask,
10860 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10861 }
10862 else
10863 {
10864 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10865 pWowlAddBcPtrnParams->ucPattern,
10866 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10867 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10868 pWowlAddBcPtrnParams->ucPatternMask,
10869 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10870
10871 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10872 pWowlAddBcPtrnParams->ucPatternExt,
10873 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10874 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10875 pWowlAddBcPtrnParams->ucPatternMaskExt,
10876 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10877 }
10878
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010879 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10880 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10881
Yue Ma7f44bbe2013-04-12 11:47:39 -070010882 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10883 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 /* Store param pointer as passed in by caller */
10885 /* store Params pass it to WDI */
10886 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10887 pWdaParams->pWdaContext = pWDA;
10888 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010889 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010890 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010891 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 {
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10894 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010895 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010896 vos_mem_free(pWdaParams->wdaMsgParam) ;
10897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10898 vos_mem_free(pWdaParams) ;
10899 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010900 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010901
10902}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010903/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010904 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 *
10906 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010907void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010908 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10909 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010910{
10911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010913 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 if(NULL == pWdaParams)
10915 {
10916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010917 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010918 VOS_ASSERT(0) ;
10919 return ;
10920 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10922 vos_mem_free(pWdaParams->wdaMsgParam);
10923 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 return ;
10925}
Jeff Johnson295189b2012-06-20 16:38:30 -070010926/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010927 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10928 * Free memory.
10929 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10930 */
10931void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10932{
10933 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10934
10935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10936 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10937
10938 if(NULL == pWdaParams)
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10941 "%s: pWdaParams received NULL", __func__);
10942 VOS_ASSERT(0);
10943 return;
10944 }
10945
10946 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10947 {
10948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10949 vos_mem_free(pWdaParams->wdaMsgParam);
10950 vos_mem_free(pWdaParams);
10951 }
10952
10953 return;
10954}
10955/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10957 * Request to WDI to delete WOWL Bcast pattern
10958 */
10959VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10960 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10961{
10962 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010963 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10965 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10966 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10967 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010969 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 if(NULL == wdiWowlDelBcPtrnInfo)
10971 {
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 VOS_ASSERT(0);
10975 return VOS_STATUS_E_NOMEM;
10976 }
10977 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10978 if(NULL == pWdaParams)
10979 {
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010982 VOS_ASSERT(0);
10983 vos_mem_free(wdiWowlDelBcPtrnInfo);
10984 return VOS_STATUS_E_NOMEM;
10985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10987 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010988
10989 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10990 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10991
Yue Ma7f44bbe2013-04-12 11:47:39 -070010992 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10993 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010994 /* Store param pointer as passed in by caller */
10995 /* store Params pass it to WDI */
10996 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10997 pWdaParams->pWdaContext = pWDA;
10998 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010999 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011000 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011001 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 {
11003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11004 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011005 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 vos_mem_free(pWdaParams->wdaMsgParam) ;
11007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11008 vos_mem_free(pWdaParams) ;
11009 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011010 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011011
11012}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011013/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011014 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 *
11016 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011017void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011018{
11019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011020 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 if(NULL == pWdaParams)
11025 {
11026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011027 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011028 VOS_ASSERT(0) ;
11029 return ;
11030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011032 if (NULL == pWDA)
11033 {
11034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11035 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011036
11037 if(pWdaParams->wdaWdiApiMsgParam)
11038 {
11039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11040 }
11041 vos_mem_free(pWdaParams);
11042
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011043 VOS_ASSERT(0);
11044 return ;
11045 }
11046
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11048
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011049 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11050
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11052 vos_mem_free(pWdaParams) ;
11053
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011054 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011055 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 return ;
11058}
Jeff Johnson295189b2012-06-20 16:38:30 -070011059/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011060 * FUNCTION: WDA_WowlEnterReqCallback
11061 * Free memory and send WOWL Enter RSP back to PE.
11062 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11063 */
11064void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11065{
11066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011067 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011068 tSirHalWowlEnterParams *pWowlEnterParams;
11069
11070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11071 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11072
11073 if(NULL == pWdaParams)
11074 {
11075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11076 "%s: pWdaParams received NULL", __func__);
11077 VOS_ASSERT(0);
11078 return;
11079 }
11080
11081 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011082 if (NULL == pWDA)
11083 {
11084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11085 "%s:pWDA is NULL", __func__);
11086 VOS_ASSERT(0);
11087 return ;
11088 }
11089
Yue Ma7f44bbe2013-04-12 11:47:39 -070011090 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11091 pWowlEnterParams->status = wdiStatus;
11092
11093 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11094 {
11095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11096 vos_mem_free(pWdaParams);
11097 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11098 }
11099
11100 return;
11101}
11102/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 * FUNCTION: WDA_ProcessWowlEnterReq
11104 * Request to WDI to enter WOWL
11105 */
11106VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11107 tSirHalWowlEnterParams *pWowlEnterParams)
11108{
11109 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011110 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11112 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11113 sizeof(WDI_WowlEnterReqParamsType)) ;
11114 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011116 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 if(NULL == wdiWowlEnterInfo)
11118 {
11119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 VOS_ASSERT(0);
11122 return VOS_STATUS_E_NOMEM;
11123 }
11124 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11125 if(NULL == pWdaParams)
11126 {
11127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 VOS_ASSERT(0);
11130 vos_mem_free(wdiWowlEnterInfo);
11131 return VOS_STATUS_E_NOMEM;
11132 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011133
11134 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11135
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11137 pWowlEnterParams->magicPtrn,
11138 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11140 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011141 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11142 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11144 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11146 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11148 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11150 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11152 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11154 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011155#ifdef WLAN_WAKEUP_EVENTS
11156 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11157 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11158
11159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11160 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11161
11162 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11163 pWowlEnterParams->ucWowNetScanOffloadMatch;
11164
11165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11166 pWowlEnterParams->ucWowGTKRekeyError;
11167
11168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11169 pWowlEnterParams->ucWoWBSSConnLoss;
11170#endif // WLAN_WAKEUP_EVENTS
11171
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011172 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11173 pWowlEnterParams->bssIdx;
11174
Yue Ma7f44bbe2013-04-12 11:47:39 -070011175 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11176 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 /* Store param pointer as passed in by caller */
11178 /* store Params pass it to WDI */
11179 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11180 pWdaParams->pWdaContext = pWDA;
11181 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011182 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011183 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011184 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 {
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11187 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011188 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 vos_mem_free(pWdaParams->wdaMsgParam) ;
11190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11191 vos_mem_free(pWdaParams) ;
11192 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011193 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011194
11195}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011196/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011197 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 *
11199 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011200void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011201{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011203 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011204 tSirHalWowlExitParams *pWowlExitParams;
11205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011206 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011207 if(NULL == pWdaParams)
11208 {
11209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011210 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011211 VOS_ASSERT(0) ;
11212 return ;
11213 }
11214 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011215 if (NULL == pWDA)
11216 {
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11218 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011219
11220 if(pWdaParams->wdaWdiApiMsgParam)
11221 {
11222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11223 }
11224 vos_mem_free(pWdaParams);
11225
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011226 VOS_ASSERT(0);
11227 return ;
11228 }
11229
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011230 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11231
11232 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011233 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011234
11235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11236 vos_mem_free(pWdaParams) ;
11237
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011239 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011240 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 return ;
11242}
Jeff Johnson295189b2012-06-20 16:38:30 -070011243/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011244 * FUNCTION: WDA_WowlExitReqCallback
11245 * Free memory and send WOWL Exit RSP back to PE.
11246 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11247 */
11248void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11249{
11250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011251 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011252 tSirHalWowlExitParams *pWowlExitParams;
11253
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11255 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11256
11257 if(NULL == pWdaParams)
11258 {
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11260 "%s: pWdaParams received NULL", __func__);
11261 VOS_ASSERT(0);
11262 return;
11263 }
11264
11265 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011266 if (NULL == pWDA)
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11269 "%s:pWDA is NULL", __func__);
11270 VOS_ASSERT(0);
11271 return ;
11272 }
11273
Yue Ma7f44bbe2013-04-12 11:47:39 -070011274 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11275 pWowlExitParams->status = wdiStatus;
11276
11277 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11278 {
11279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11280 vos_mem_free(pWdaParams);
11281 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11282 }
11283
11284 return;
11285}
11286/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 * FUNCTION: WDA_ProcessWowlExitReq
11288 * Request to WDI to add WOWL Bcast pattern
11289 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011290VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11291 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011292{
11293 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011294 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011295 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11296 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11297 sizeof(WDI_WowlExitReqParamsType)) ;
11298 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011300 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011301 if(NULL == wdiWowlExitInfo)
11302 {
11303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011304 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011305 VOS_ASSERT(0);
11306 return VOS_STATUS_E_NOMEM;
11307 }
11308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11309 if(NULL == pWdaParams)
11310 {
11311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011312 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011313 VOS_ASSERT(0);
11314 vos_mem_free(wdiWowlExitInfo);
11315 return VOS_STATUS_E_NOMEM;
11316 }
11317
11318 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11319 pWowlExitParams->bssIdx;
11320
Yue Ma7f44bbe2013-04-12 11:47:39 -070011321 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11322 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011323
11324 /* Store param pointer as passed in by caller */
11325 /* store Params pass it to WDI */
11326 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11327 pWdaParams->pWdaContext = pWDA;
11328 pWdaParams->wdaMsgParam = pWowlExitParams;
11329
11330 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011331 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332
Jeff Johnson43971f52012-07-17 12:26:56 -070011333 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 {
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11336 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011337 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11339 vos_mem_free(pWdaParams->wdaMsgParam);
11340 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011342 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011343}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011344/*
11345 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11346 * Request to WDI to determine whether a given station is capable of
11347 * using HW-based frame translation
11348 */
11349v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11350 tANI_U8 staIdx)
11351{
11352 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11353}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011354
11355/*
11356 * FUNCTION: WDA_IsSelfSTA
11357 * Request to WDI to determine whether a given STAID is self station
11358 * index.
11359 */
11360v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11361{
11362
11363 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11364
Girish Gowli05cf44e2014-06-12 21:53:37 +053011365 if (NULL != pWDA)
11366 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11367 else
11368 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011369}
Jeff Johnson295189b2012-06-20 16:38:30 -070011370/*
11371 * FUNCTION: WDA_NvDownloadReqCallback
11372 * send NV Download RSP back to PE
11373 */
11374void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11375 void* pUserData)
11376{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011377
11378 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011379 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011380
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011382 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011383
11384 if(NULL == pWdaParams)
11385 {
11386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011387 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011388 VOS_ASSERT(0) ;
11389 return ;
11390 }
11391
11392 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011393 if (NULL == pWDA)
11394 {
11395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11396 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011397
11398 if(pWdaParams->wdaWdiApiMsgParam)
11399 {
11400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11401 }
11402 vos_mem_free(pWdaParams);
11403
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011404 VOS_ASSERT(0);
11405 return ;
11406 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011407
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11410 vos_mem_free(pWdaParams);
11411
Jeff Johnson295189b2012-06-20 16:38:30 -070011412 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 return ;
11414}
Jeff Johnson295189b2012-06-20 16:38:30 -070011415/*
11416 * FUNCTION: WDA_ProcessNvDownloadReq
11417 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11418 */
11419VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11420{
11421 /* Initialize the local Variables*/
11422 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11423 v_VOID_t *pNvBuffer=NULL;
11424 v_SIZE_t bufferSize = 0;
11425 WDI_Status status = WDI_STATUS_E_FAILURE;
11426 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011427 tWDA_ReqParams *pWdaParams ;
11428
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011430 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011431 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 {
11433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011434 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011435 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 return VOS_STATUS_E_FAILURE;
11437 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011438
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011440 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11441
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11443 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 if(NULL == wdiNvDownloadReqParam)
11445 {
11446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 VOS_ASSERT(0);
11449 return VOS_STATUS_E_NOMEM;
11450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 /* Copy Params to wdiNvDownloadReqParam*/
11452 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11453 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011454
11455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11456 if(NULL == pWdaParams)
11457 {
11458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011459 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011460 VOS_ASSERT(0);
11461 vos_mem_free(wdiNvDownloadReqParam);
11462 return VOS_STATUS_E_NOMEM;
11463 }
11464
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011466 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11467 pWdaParams->wdaMsgParam = NULL;
11468 pWdaParams->pWdaContext = pWDA;
11469
11470
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011472
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011474 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11475
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 if(IS_WDI_STATUS_FAILURE(status))
11477 {
11478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11479 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11481 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011484}
11485/*
11486 * FUNCTION: WDA_FlushAcReqCallback
11487 * send Flush AC RSP back to TL
11488 */
11489void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11490{
11491 vos_msg_t wdaMsg = {0} ;
11492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11493 tFlushACReq *pFlushACReqParams;
11494 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 if(NULL == pWdaParams)
11498 {
11499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011500 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 VOS_ASSERT(0) ;
11502 return ;
11503 }
11504
11505 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11506 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11507 if(NULL == pFlushACRspParams)
11508 {
11509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 return ;
11514 }
11515 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11516 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11517 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11518 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11519 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011520 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 vos_mem_free(pWdaParams->wdaMsgParam) ;
11522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11523 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11525 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11526 // POST message to TL
11527 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11528
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 return ;
11530}
Jeff Johnson295189b2012-06-20 16:38:30 -070011531/*
11532 * FUNCTION: WDA_ProcessFlushAcReq
11533 * Request to WDI to Update the DELBA REQ params.
11534 */
11535VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11536 tFlushACReq *pFlushAcReqParams)
11537{
11538 WDI_Status status = WDI_STATUS_SUCCESS ;
11539 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11540 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11541 sizeof(WDI_FlushAcReqParamsType)) ;
11542 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 if(NULL == wdiFlushAcReqParam)
11544 {
11545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011547 VOS_ASSERT(0);
11548 return VOS_STATUS_E_NOMEM;
11549 }
11550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11551 if(NULL == pWdaParams)
11552 {
11553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 VOS_ASSERT(0);
11556 vos_mem_free(wdiFlushAcReqParam);
11557 return VOS_STATUS_E_NOMEM;
11558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11562 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11563 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11564 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 /* Store Flush AC pointer, as this will be used for response */
11566 /* store Params pass it to WDI */
11567 pWdaParams->pWdaContext = pWDA;
11568 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11569 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11571 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 if(IS_WDI_STATUS_FAILURE(status))
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11575 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11576 vos_mem_free(pWdaParams->wdaMsgParam) ;
11577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11578 vos_mem_free(pWdaParams) ;
11579 //TODO: respond to TL with failure
11580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011582}
Jeff Johnson295189b2012-06-20 16:38:30 -070011583/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011584 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011585 *
11586 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011587void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011588{
11589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011590 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011591 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011592
11593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011594 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 if(NULL == pWdaParams)
11596 {
11597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011598 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 VOS_ASSERT(0) ;
11600 return ;
11601 }
11602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011603 if (NULL == pWDA)
11604 {
11605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11606 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011607 vos_mem_free(pWdaParams->wdaMsgParam) ;
11608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11609 vos_mem_free(pWdaParams) ;
11610
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011611 VOS_ASSERT(0);
11612 return ;
11613 }
11614
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11616 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11617 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11618 {
11619 pWDA->wdaAmpSessionOn = VOS_FALSE;
11620 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 vos_mem_free(pWdaParams->wdaMsgParam) ;
11622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11623 vos_mem_free(pWdaParams) ;
11624 /*
11625 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11626 * param here
11627 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 return ;
11629}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011630/*
11631 * FUNCTION: WDA_BtAmpEventReqCallback
11632 * Free memory.
11633 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11634 */
11635void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11636{
11637 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011638 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011639 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011640
Yue Ma7f44bbe2013-04-12 11:47:39 -070011641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11642 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11643
11644 if(NULL == pWdaParams)
11645 {
11646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11647 "%s: pWdaParams received NULL", __func__);
11648 VOS_ASSERT(0);
11649 return;
11650 }
11651
11652 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011653 if (NULL == pWDA)
11654 {
11655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11656 "%s:pWDA is NULL", __func__);
11657 VOS_ASSERT(0);
11658 return ;
11659 }
11660
Yue Ma7f44bbe2013-04-12 11:47:39 -070011661 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11662
11663 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11664 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11665 {
11666 pWDA->wdaAmpSessionOn = VOS_FALSE;
11667 }
11668
11669 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11670 {
11671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11672 vos_mem_free(pWdaParams->wdaMsgParam);
11673 vos_mem_free(pWdaParams);
11674 }
11675
11676 return;
11677}
Jeff Johnson295189b2012-06-20 16:38:30 -070011678/*
11679 * FUNCTION: WDA_ProcessBtAmpEventReq
11680 * Request to WDI to Update with BT AMP events.
11681 */
11682VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11683 tSmeBtAmpEvent *pBtAmpEventParams)
11684{
11685 WDI_Status status = WDI_STATUS_SUCCESS ;
11686 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11687 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11688 sizeof(WDI_BtAmpEventParamsType)) ;
11689 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011692 if(NULL == wdiBtAmpEventParam)
11693 {
11694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 VOS_ASSERT(0);
11697 return VOS_STATUS_E_NOMEM;
11698 }
11699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11700 if(NULL == pWdaParams)
11701 {
11702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 VOS_ASSERT(0);
11705 vos_mem_free(wdiBtAmpEventParam);
11706 return VOS_STATUS_E_NOMEM;
11707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11709 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011710 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11711 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 /* Store BT AMP event pointer, as this will be used for response */
11713 /* store Params pass it to WDI */
11714 pWdaParams->pWdaContext = pWDA;
11715 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11716 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011718 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 if(IS_WDI_STATUS_FAILURE(status))
11720 {
11721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11722 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11723 vos_mem_free(pWdaParams->wdaMsgParam) ;
11724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11725 vos_mem_free(pWdaParams) ;
11726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11728 {
11729 pWDA->wdaAmpSessionOn = VOS_TRUE;
11730 }
11731 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011732}
11733
Jeff Johnson295189b2012-06-20 16:38:30 -070011734/*
11735 * FUNCTION: WDA_FTMCommandReqCallback
11736 * Handle FTM CMD response came from HAL
11737 * Route responce to HDD FTM
11738 */
11739void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11740 void *usrData)
11741{
11742 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11744 {
11745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011746 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 return;
11748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 /* Release Current FTM Command Request */
11750 vos_mem_free(pWDA->wdaFTMCmdReq);
11751 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 /* Post FTM Responce to HDD FTM */
11753 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 return;
11755}
Jeff Johnson295189b2012-06-20 16:38:30 -070011756/*
11757 * FUNCTION: WDA_ProcessFTMCommand
11758 * Send FTM command to WDI
11759 */
11760VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11761 tPttMsgbuffer *pPTTFtmCmd)
11762{
11763 WDI_Status status = WDI_STATUS_SUCCESS;
11764 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011765 ftmCMDReq = (WDI_FTMCommandReqType *)
11766 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11767 if(NULL == ftmCMDReq)
11768 {
11769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11770 "WDA FTM Command buffer alloc fail");
11771 return VOS_STATUS_E_NOMEM;
11772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11774 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 /* Send command to WDI */
11777 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 return status;
11779}
Jeff Johnsone7245742012-09-05 17:12:55 -070011780#ifdef FEATURE_OEM_DATA_SUPPORT
11781/*
11782 * FUNCTION: WDA_StartOemDataReqCallback
11783 *
11784 */
11785void WDA_StartOemDataReqCallback(
11786 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11787 void* pUserData)
11788{
11789 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011791 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011792 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011793
Jeff Johnsone7245742012-09-05 17:12:55 -070011794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011795 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011796
11797 if(NULL == pWdaParams)
11798 {
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011800 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011801 VOS_ASSERT(0) ;
11802 return ;
11803 }
11804 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11805
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011806 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011807 {
11808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011809 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011810 VOS_ASSERT(0);
11811 return ;
11812 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011813
Jeff Johnsone7245742012-09-05 17:12:55 -070011814 /*
11815 * Allocate memory for response params sent to PE
11816 */
11817 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11818
11819 // Check if memory is allocated for OemdataMeasRsp Params.
11820 if(NULL == pOemDataRspParams)
11821 {
11822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11823 "OEM DATA WDA callback alloc fail");
11824 VOS_ASSERT(0) ;
11825 return;
11826 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011827
Jeff Johnsone7245742012-09-05 17:12:55 -070011828 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11830 vos_mem_free(pWdaParams->wdaMsgParam);
11831 vos_mem_free(pWdaParams) ;
11832
Jeff Johnsone7245742012-09-05 17:12:55 -070011833 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011834 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011835 * Also, here success always means that we have atleast one BSSID.
11836 */
11837 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11838
11839 //enable Tx
11840 status = WDA_ResumeDataTx(pWDA);
11841 if(status != VOS_STATUS_SUCCESS)
11842 {
11843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11844 }
11845 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11846 return ;
11847}
11848/*
11849 * FUNCTION: WDA_ProcessStartOemDataReq
11850 * Send Start Oem Data Req to WDI
11851 */
11852VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11853 tStartOemDataReq *pOemDataReqParams)
11854{
11855 WDI_Status status = WDI_STATUS_SUCCESS;
11856 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011857 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011858
11859 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11860
11861 if(NULL == wdiOemDataReqParams)
11862 {
11863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011865 VOS_ASSERT(0);
11866 return VOS_STATUS_E_NOMEM;
11867 }
11868
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011869 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11870 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11871 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11872 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011873
11874 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11875
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11877 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011878 {
11879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011881 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011882 vos_mem_free(pOemDataReqParams);
11883 VOS_ASSERT(0);
11884 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011885 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011886
Bernald44a1ae2013-01-09 08:30:39 -080011887 pWdaParams->pWdaContext = (void*)pWDA;
11888 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11889 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011890
11891 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11892 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011893
11894 if(IS_WDI_STATUS_FAILURE(status))
11895 {
11896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11897 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11899 vos_mem_free(pWdaParams->wdaMsgParam);
11900 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011901 }
11902 return CONVERT_WDI2VOS_STATUS(status) ;
11903}
11904#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011905/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011906 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 *
11908 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011909void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011910{
11911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011913 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 if(NULL == pWdaParams)
11915 {
11916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011917 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 VOS_ASSERT(0) ;
11919 return ;
11920 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011921
11922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11923 vos_mem_free(pWdaParams->wdaMsgParam);
11924 vos_mem_free(pWdaParams);
11925
11926 return ;
11927}
11928/*
11929 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11930 * Free memory.
11931 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11932 */
11933void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11934{
11935 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11936
11937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11938 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11939
11940 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11943 "%s: pWdaParams received NULL", __func__);
11944 VOS_ASSERT(0);
11945 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011947
11948 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 {
11950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011951 vos_mem_free(pWdaParams->wdaMsgParam);
11952 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011953 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011954
11955 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011956}
Jeff Johnson295189b2012-06-20 16:38:30 -070011957#ifdef WLAN_FEATURE_GTK_OFFLOAD
11958/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011959 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 *
11961 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011962void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011963 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011964{
11965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11966
11967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011968 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011969 if(NULL == pWdaParams)
11970 {
11971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11972 "%s: pWdaParams received NULL", __func__);
11973 VOS_ASSERT(0);
11974 return;
11975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011976
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 vos_mem_free(pWdaParams->wdaMsgParam) ;
11978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11979 vos_mem_free(pWdaParams) ;
11980
11981 //print a msg, nothing else to do
11982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011983 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011984
11985 return ;
11986}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011987/*
11988 * FUNCTION: WDA_GTKOffloadReqCallback
11989 * Free memory.
11990 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11991 */
11992void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11993{
11994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011995
Yue Ma7f44bbe2013-04-12 11:47:39 -070011996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11997 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11998
11999 if(NULL == pWdaParams)
12000 {
12001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12002 "%s: pWdaParams received NULL", __func__);
12003 VOS_ASSERT(0);
12004 return;
12005 }
12006
12007 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12008 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012009 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12010 sizeof(WDI_GtkOffloadReqMsg));
12011 vos_mem_zero(pWdaParams->wdaMsgParam,
12012 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12014 vos_mem_free(pWdaParams->wdaMsgParam);
12015 vos_mem_free(pWdaParams);
12016 }
12017
12018 return;
12019}
Jeff Johnson295189b2012-06-20 16:38:30 -070012020/*
12021 * FUNCTION: WDA_ProcessGTKOffloadReq
12022 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12023 * to broadcast traffic (sta mode).
12024 */
12025VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12026 tpSirGtkOffloadParams pGtkOffloadParams)
12027{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012028 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12030 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12031 sizeof(WDI_GtkOffloadReqMsg)) ;
12032 tWDA_ReqParams *pWdaParams ;
12033
12034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012036
12037 if(NULL == wdiGtkOffloadReqMsg)
12038 {
12039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 VOS_ASSERT(0);
12042 return VOS_STATUS_E_NOMEM;
12043 }
12044
12045 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12046 if(NULL == pWdaParams)
12047 {
12048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 VOS_ASSERT(0);
12051 vos_mem_free(wdiGtkOffloadReqMsg);
12052 return VOS_STATUS_E_NOMEM;
12053 }
12054
12055 //
12056 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12057 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012058
12059 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012060 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012061
Jeff Johnson295189b2012-06-20 16:38:30 -070012062 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12063 // Copy KCK
12064 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12065 // Copy KEK
12066 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12067 // Copy KeyReplayCounter
12068 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12069 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12070
Yue Ma7f44bbe2013-04-12 11:47:39 -070012071 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12072 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012073
Jeff Johnson295189b2012-06-20 16:38:30 -070012074
12075 /* Store Params pass it to WDI */
12076 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12077 pWdaParams->pWdaContext = pWDA;
12078 /* Store param pointer as passed in by caller */
12079 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12080
Yue Ma7f44bbe2013-04-12 11:47:39 -070012081 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012082
12083 if(IS_WDI_STATUS_FAILURE(status))
12084 {
12085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12086 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012087 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12088 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12090 vos_mem_free(pWdaParams->wdaMsgParam);
12091 vos_mem_free(pWdaParams);
12092 }
12093
12094 return CONVERT_WDI2VOS_STATUS(status) ;
12095}
12096
12097/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012098 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 *
12100 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012101void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012102 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012103{
12104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12105 tWDA_CbContext *pWDA;
12106 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012107 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 vos_msg_t vosMsg;
12109
12110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012111 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012112
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012113 if(NULL == pWdaParams)
12114 {
12115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12116 "%s: pWdaParams received NULL", __func__);
12117 VOS_ASSERT(0);
12118 return;
12119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012120
Nirav Shah374de6e2014-02-13 16:40:01 +053012121 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12122 if(NULL == pGtkOffloadGetInfoRsp)
12123 {
12124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12125 "%s: vos_mem_malloc failed ", __func__);
12126 VOS_ASSERT(0);
12127 return;
12128 }
12129
Jeff Johnson295189b2012-06-20 16:38:30 -070012130 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12131 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12132
12133 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12134 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12135
12136 /* Message Header */
12137 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012138 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012139
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012140 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12141 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12142 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12143 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12144 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012145
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012146 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12147 pwdiGtkOffloadGetInfoRsparams->bssId,
12148 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 /* VOS message wrapper */
12150 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12151 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12152 vosMsg.bodyval = 0;
12153
12154 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12155 {
12156 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012157 vos_mem_zero(pGtkOffloadGetInfoRsp,
12158 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12160 }
12161
12162 vos_mem_free(pWdaParams->wdaMsgParam) ;
12163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12164 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012165
12166 return;
12167}
12168/*
12169 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12170 * Free memory and send RSP back to SME.
12171 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12172 */
12173void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12174{
12175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12176 vos_msg_t vosMsg;
12177
12178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12179 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12180
12181 if(NULL == pWdaParams)
12182 {
12183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12184 "%s: pWdaParams received NULL", __func__);
12185 VOS_ASSERT(0);
12186 return;
12187 }
12188
12189 /* VOS message wrapper */
12190 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12191 vosMsg.bodyptr = NULL;
12192 vosMsg.bodyval = 0;
12193
12194 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12195 {
12196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12197 vos_mem_free(pWdaParams->wdaMsgParam);
12198 vos_mem_free(pWdaParams);
12199 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12200 }
12201
12202 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012203}
12204#endif
12205
12206/*
12207 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12208 * Request to WDI to set Tx Per Tracking configurations
12209 */
12210VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12211{
12212 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012213 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012214 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12215 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12216 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12217 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012219 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 if(NULL == pwdiSetTxPerTrackingReqParams)
12221 {
12222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 vos_mem_free(pTxPerTrackingParams);
12225 VOS_ASSERT(0);
12226 return VOS_STATUS_E_NOMEM;
12227 }
12228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12229 if(NULL == pWdaParams)
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012233 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12234 vos_mem_free(pTxPerTrackingParams);
12235 VOS_ASSERT(0);
12236 return VOS_STATUS_E_NOMEM;
12237 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12239 pTxPerTrackingParams->ucTxPerTrackingEnable;
12240 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12241 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12242 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12243 pTxPerTrackingParams->ucTxPerTrackingRatio;
12244 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12245 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012246 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12247 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 /* Store param pointer as passed in by caller */
12249 /* store Params pass it to WDI
12250 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12251 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12252 pWdaParams->pWdaContext = pWDA;
12253 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012254 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012255 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012256 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12259 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012260 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 vos_mem_free(pWdaParams->wdaMsgParam) ;
12262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12263 vos_mem_free(pWdaParams) ;
12264 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012265 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012266
12267}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012268/*
12269 * FUNCTION: WDA_HALDumpCmdCallback
12270 * Send the VOS complete .
12271 */
12272void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12273 void* pUserData)
12274{
12275 tANI_U8 *buffer = NULL;
12276 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012277 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 if(NULL == pWdaParams)
12279 {
12280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012281 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 VOS_ASSERT(0) ;
12283 return ;
12284 }
12285
12286 pWDA = pWdaParams->pWdaContext;
12287 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012288 if(wdiRspParams->usBufferLen > 0)
12289 {
12290 /*Copy the Resp data to UMAC supplied buffer*/
12291 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12292 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012293
12294 if (!pWdaParams->wdaHALDumpAsync)
12295 {/* Indicate VOSS about the start complete */
12296 vos_WDAComplete_cback(pWDA->pVosContext);
12297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12299 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 return ;
12301}
12302
Jeff Johnson295189b2012-06-20 16:38:30 -070012303/*
12304 * FUNCTION: WDA_ProcessHALDumpCmdReq
12305 * Send Dump command to WDI
12306 */
12307VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12308 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012309 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012310{
12311 WDI_Status status = WDI_STATUS_SUCCESS;
12312 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12313 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012314 tWDA_HalDumpReqParams *pWdaParams ;
12315
Jeff Johnson295189b2012-06-20 16:38:30 -070012316 pVosContextType pVosContext = NULL;
12317 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012318 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12319 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012320 if(pVosContext)
12321 {
12322 if (pVosContext->isLogpInProgress)
12323 {
12324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12325 "%s:LOGP in Progress. Ignore!!!", __func__);
12326 return VOS_STATUS_E_BUSY;
12327 }
12328 }
12329 else
12330 {
12331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12332 "%s: VOS Context Null", __func__);
12333 return VOS_STATUS_E_RESOURCES;
12334 }
12335
Siddharth Bhal68115602015-01-18 20:44:55 +053012336 if (NULL == pVosContext->pWDAContext)
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12339 "%s: WDA Context Null", __func__);
12340 return VOS_STATUS_E_RESOURCES;
12341 }
12342 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012343 if(NULL == pWdaParams)
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 return VOS_STATUS_E_NOMEM;
12348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012349 /* Allocate memory WDI request structure*/
12350 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12351 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12352 if(NULL == wdiHALDumpCmdReqParam)
12353 {
12354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12355 "WDA HAL DUMP Command buffer alloc fail");
12356 vos_mem_free(pWdaParams);
12357 return WDI_STATUS_E_FAILURE;
12358 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012359 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 /* Extract the arguments */
12361 wdiHalDumpCmdInfo->command = cmd;
12362 wdiHalDumpCmdInfo->argument1 = arg1;
12363 wdiHalDumpCmdInfo->argument2 = arg2;
12364 wdiHalDumpCmdInfo->argument3 = arg3;
12365 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012368 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012369
12370 /* Response message will be passed through the buffer */
12371 pWdaParams->wdaMsgParam = (void *)pBuffer;
12372
12373 /* store Params pass it to WDI */
12374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012376 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12377 pWdaParams);
12378 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12379 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012380 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012381 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12382 WDA_DUMPCMD_WAIT_TIMEOUT );
12383 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012384 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012385 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12386 {
12387 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12388 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12389 }
12390 else
12391 {
12392 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12393 "%s: WDA_HALDUMP reporting other error",__func__);
12394 }
12395 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 }
12398 return status;
12399}
Jeff Johnson295189b2012-06-20 16:38:30 -070012400#ifdef WLAN_FEATURE_GTK_OFFLOAD
12401/*
12402 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12403 * Request to WDI to get GTK Offload Information
12404 */
12405VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12406 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12407{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012408 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12410 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12411 tWDA_ReqParams *pWdaParams ;
12412
12413 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12414 {
12415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012416 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012417 VOS_ASSERT(0);
12418 return VOS_STATUS_E_NOMEM;
12419 }
12420
12421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12422 if(NULL == pWdaParams)
12423 {
12424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012426 VOS_ASSERT(0);
12427 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12428 return VOS_STATUS_E_NOMEM;
12429 }
12430
Yue Ma7f44bbe2013-04-12 11:47:39 -070012431 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12432 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012433
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 /* Store Params pass it to WDI */
12435 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12436 pWdaParams->pWdaContext = pWDA;
12437 /* Store param pointer as passed in by caller */
12438 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12439
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012440 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012441 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012442
Yue Ma7f44bbe2013-04-12 11:47:39 -070012443 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012444
12445 if(IS_WDI_STATUS_FAILURE(status))
12446 {
12447 /* failure returned by WDI API */
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12449 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12451 vos_mem_free(pWdaParams) ;
12452 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12453 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12454 }
12455
12456 return CONVERT_WDI2VOS_STATUS(status) ;
12457}
12458#endif // WLAN_FEATURE_GTK_OFFLOAD
12459
12460/*
Yue Mab9c86f42013-08-14 15:59:08 -070012461 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12462 *
12463 */
12464VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12465 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12466{
12467 WDI_Status wdiStatus;
12468 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12469
12470 addPeriodicTxPtrnParams =
12471 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12472
12473 if (NULL == addPeriodicTxPtrnParams)
12474 {
12475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12476 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12477 __func__);
12478
12479 return VOS_STATUS_E_NOMEM;
12480 }
12481
12482 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12483 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12484
12485 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12486 addPeriodicTxPtrnParams->pUserData = pWDA;
12487
12488 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12489
12490 if (WDI_STATUS_PENDING == wdiStatus)
12491 {
12492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12493 "Pending received for %s:%d", __func__, __LINE__ );
12494 }
12495 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12496 {
12497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12498 "Failure in %s:%d", __func__, __LINE__ );
12499 }
12500
12501 vos_mem_free(addPeriodicTxPtrnParams);
12502
12503 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12504}
12505
12506/*
12507 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12508 *
12509 */
12510VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12511 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12512{
12513 WDI_Status wdiStatus;
12514 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12515
12516 delPeriodicTxPtrnParams =
12517 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12518
12519 if (NULL == delPeriodicTxPtrnParams)
12520 {
12521 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12522 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12523 __func__);
12524
12525 return VOS_STATUS_E_NOMEM;
12526 }
12527
12528 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12529 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12530
12531 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12532 delPeriodicTxPtrnParams->pUserData = pWDA;
12533
12534 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12535
12536 if (WDI_STATUS_PENDING == wdiStatus)
12537 {
12538 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12539 "Pending received for %s:%d", __func__, __LINE__ );
12540 }
12541 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12542 {
12543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12544 "Failure in %s:%d", __func__, __LINE__ );
12545 }
12546
12547 vos_mem_free(delPeriodicTxPtrnParams);
12548
12549 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12550}
12551
Rajeev79dbe4c2013-10-05 11:03:42 +053012552#ifdef FEATURE_WLAN_BATCH_SCAN
12553/*
12554 * FUNCTION: WDA_ProcessStopBatchScanInd
12555 *
12556 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12557 *
12558 * PARAM:
12559 * pWDA: pointer to WDA context
12560 * pReq: pointer to stop batch scan request
12561 */
12562VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12563 tSirStopBatchScanInd *pReq)
12564{
12565 WDI_Status wdiStatus;
12566 WDI_StopBatchScanIndType wdiReq;
12567
12568 wdiReq.param = pReq->param;
12569
12570 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12571
12572 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12573 {
12574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12575 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12576 }
12577
12578 vos_mem_free(pReq);
12579
12580 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12581}
12582/*==========================================================================
12583 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12584
12585 DESCRIPTION
12586 API to pull batch scan result from FW
12587
12588 PARAMETERS
12589 pWDA: Pointer to WDA context
12590 pGetBatchScanReq: Pointer to get batch scan result indication
12591
12592 RETURN VALUE
12593 NONE
12594
12595===========================================================================*/
12596VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12597 tSirTriggerBatchScanResultInd *pReq)
12598{
12599 WDI_Status wdiStatus;
12600 WDI_TriggerBatchScanResultIndType wdiReq;
12601
12602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12603 "------> %s " ,__func__);
12604
12605 wdiReq.param = pReq->param;
12606
12607 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12608
12609 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12610 {
12611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12612 "Trigger batch scan result ind failed %s:%d",
12613 __func__, wdiStatus);
12614 }
12615
12616 vos_mem_free(pReq);
12617
12618 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12619}
12620
12621/*==========================================================================
12622 FUNCTION WDA_SetBatchScanRespCallback
12623
12624 DESCRIPTION
12625 API to process set batch scan response from FW
12626
12627 PARAMETERS
12628 pRsp: Pointer to set batch scan response
12629 pUserData: Pointer to user data
12630
12631 RETURN VALUE
12632 NONE
12633
12634===========================================================================*/
12635void WDA_SetBatchScanRespCallback
12636(
12637 WDI_SetBatchScanRspType *pRsp,
12638 void* pUserData
12639)
12640{
12641 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12642 tpAniSirGlobal pMac;
12643 void *pCallbackContext;
12644 tWDA_CbContext *pWDA = NULL ;
12645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12646
12647
12648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12649 "<------ %s " ,__func__);
12650 if (NULL == pWdaParams)
12651 {
12652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12653 "%s: pWdaParams received NULL", __func__);
12654 VOS_ASSERT(0) ;
12655 return ;
12656 }
12657
12658 /*extract WDA context*/
12659 pWDA = pWdaParams->pWdaContext;
12660 if (NULL == pWDA)
12661 {
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12663 "%s:pWDA is NULL can't invole HDD callback",
12664 __func__);
12665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12666 vos_mem_free(pWdaParams->wdaMsgParam);
12667 vos_mem_free(pWdaParams);
12668 VOS_ASSERT(0);
12669 return;
12670 }
12671
12672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12673 vos_mem_free(pWdaParams->wdaMsgParam);
12674 vos_mem_free(pWdaParams);
12675
12676 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12677 if (NULL == pMac)
12678 {
12679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12680 "%s:pMac is NULL", __func__);
12681 VOS_ASSERT(0);
12682 return;
12683 }
12684
12685 pHddSetBatchScanRsp =
12686 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12687 if (NULL == pHddSetBatchScanRsp)
12688 {
12689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12690 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12691 VOS_ASSERT(0);
12692 return;
12693 }
12694
12695 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12696
12697 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12698 /*call hdd callback with set batch scan response data*/
12699 if(pMac->pmc.setBatchScanReqCallback)
12700 {
12701 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12702 }
12703 else
12704 {
12705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12706 "%s:HDD callback is null", __func__);
12707 VOS_ASSERT(0);
12708 }
12709
12710 vos_mem_free(pHddSetBatchScanRsp);
12711 return ;
12712}
12713
12714/*==========================================================================
12715 FUNCTION WDA_ProcessSetBatchScanReq
12716
12717 DESCRIPTION
12718 API to send set batch scan request to WDI
12719
12720 PARAMETERS
12721 pWDA: Pointer to WDA context
12722 pSetBatchScanReq: Pointer to set batch scan req
12723
12724 RETURN VALUE
12725 NONE
12726
12727===========================================================================*/
12728VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12729 tSirSetBatchScanReq *pSetBatchScanReq)
12730{
12731 WDI_Status status;
12732 tWDA_ReqParams *pWdaParams ;
12733 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12734
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12736 "------> %s " ,__func__);
12737
12738 pWdiSetBatchScanReq =
12739 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12740 if (NULL == pWdiSetBatchScanReq)
12741 {
12742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12743 "%s: VOS MEM Alloc Failure", __func__);
12744 vos_mem_free(pSetBatchScanReq);
12745 VOS_ASSERT(0);
12746 return VOS_STATUS_E_NOMEM;
12747 }
12748
12749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12750 if (NULL == pWdaParams)
12751 {
12752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12753 "%s: VOS MEM Alloc Failure", __func__);
12754 VOS_ASSERT(0);
12755 vos_mem_free(pSetBatchScanReq);
12756 vos_mem_free(pWdiSetBatchScanReq);
12757 return VOS_STATUS_E_NOMEM;
12758 }
12759
12760 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12761 pWdiSetBatchScanReq->numberOfScansToBatch =
12762 pSetBatchScanReq->numberOfScansToBatch;
12763 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12764 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12765 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12766
12767 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12768 pWdaParams->pWdaContext = pWDA;
12769 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12770
12771 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12772 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12773 if (IS_WDI_STATUS_FAILURE(status))
12774 {
12775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12776 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12778 vos_mem_free(pWdaParams->wdaMsgParam);
12779 vos_mem_free(pWdaParams);
12780 }
12781 return CONVERT_WDI2VOS_STATUS(status);
12782}
12783
12784#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012785/*
12786 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12787 *
12788 * DESCRIPTION: This function sends start/update OBSS scan
12789 * inidcation message to WDI
12790 *
12791 * PARAM:
12792 * pWDA: pointer to WDA context
12793 * pReq: pointer to start OBSS scan request
12794 */
12795VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12796 tSirHT40OBSSScanInd *pReq)
12797{
12798 WDI_Status status;
12799 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12800 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012801
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12803 "------> %s " ,__func__);
12804 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12805 wdiOBSSScanParams.pUserData = pWDA;
12806
12807 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12808 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12809 pWdiOBSSScanInd->scanType = pReq->scanType;
12810 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12811 pReq->OBSSScanActiveDwellTime;
12812 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12813 pReq->OBSSScanPassiveDwellTime;
12814 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12815 pReq->BSSChannelWidthTriggerScanInterval;
12816 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12817 pReq->BSSWidthChannelTransitionDelayFactor;
12818 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12819 pReq->OBSSScanActiveTotalPerChannel;
12820 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12821 pReq->OBSSScanPassiveTotalPerChannel;
12822 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12823 pReq->OBSSScanActivityThreshold;
12824 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12825 vos_mem_copy(pWdiOBSSScanInd->channels,
12826 pReq->channels,
12827 pReq->channelCount);
12828 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12829 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12830 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12831 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12832 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12833
12834 vos_mem_copy(pWdiOBSSScanInd->ieField,
12835 pReq->ieField,
12836 pReq->ieFieldLen);
12837
12838 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12839 if (WDI_STATUS_PENDING == status)
12840 {
12841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12842 "Pending received for %s:%d ",__func__,__LINE__ );
12843 }
12844 else if (WDI_STATUS_SUCCESS_SYNC != status)
12845 {
12846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12847 "Failure in %s:%d ",__func__,__LINE__ );
12848 }
12849 return CONVERT_WDI2VOS_STATUS(status) ;
12850}
12851/*
12852 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12853 *
12854 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12855 *
12856 * PARAM:
12857 * pWDA: pointer to WDA context
12858 * pReq: pointer to stop batch scan request
12859 */
12860VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12861 tANI_U8 *bssIdx)
12862{
12863 WDI_Status status;
12864
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12866 "------> %s " ,__func__);
12867
12868 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12869 if (WDI_STATUS_PENDING == status)
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12872 "Pending received for %s:%d ",__func__,__LINE__ );
12873 }
12874 else if (WDI_STATUS_SUCCESS_SYNC != status)
12875 {
12876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12877 "Failure in %s:%d ",__func__,__LINE__ );
12878 }
12879 return CONVERT_WDI2VOS_STATUS(status) ;
12880}
Yue Mab9c86f42013-08-14 15:59:08 -070012881/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012882 * FUNCTION: WDA_ProcessRateUpdateInd
12883 *
12884 */
12885VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12886 tSirRateUpdateInd *pRateUpdateParams)
12887{
12888 WDI_Status wdiStatus;
12889 WDI_RateUpdateIndParams rateUpdateParams;
12890
12891 vos_mem_copy(rateUpdateParams.bssid,
12892 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12893
12894 rateUpdateParams.ucastDataRateTxFlag =
12895 pRateUpdateParams->ucastDataRateTxFlag;
12896 rateUpdateParams.reliableMcastDataRateTxFlag =
12897 pRateUpdateParams->reliableMcastDataRateTxFlag;
12898 rateUpdateParams.mcastDataRate24GHzTxFlag =
12899 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12900 rateUpdateParams.mcastDataRate5GHzTxFlag =
12901 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12902
12903 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12904 rateUpdateParams.reliableMcastDataRate =
12905 pRateUpdateParams->reliableMcastDataRate;
12906 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12907 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12908
12909 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12910 rateUpdateParams.pUserData = pWDA;
12911
12912 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12913
12914 if (WDI_STATUS_PENDING == wdiStatus)
12915 {
12916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12917 "Pending received for %s:%d", __func__, __LINE__ );
12918 }
12919 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12920 {
12921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12922 "Failure in %s:%d", __func__, __LINE__ );
12923 }
12924
12925 vos_mem_free(pRateUpdateParams);
12926
12927 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12928}
12929
12930/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012931 * -------------------------------------------------------------------------
12932 * DATA interface with WDI for Mgmt Frames
12933 * -------------------------------------------------------------------------
12934 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012935/*
12936 * FUNCTION: WDA_TxComplete
12937 * Callback function for the WDA_TxPacket
12938 */
12939VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12940 VOS_STATUS status )
12941{
12942
12943 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12944 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012945 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012946
Mihir Shete63341222015-03-24 15:39:18 +053012947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12948
Jeff Johnson295189b2012-06-20 16:38:30 -070012949 if(NULL == wdaContext)
12950 {
12951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12952 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012953 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012955 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 return VOS_STATUS_E_FAILURE;
12957 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012958
12959 /*Check if frame was timed out or not*/
12960 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12961 (v_PVOID_t)&uUserData);
12962
12963 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12964 {
12965 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012966 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12967 "%s: MGMT Frame Tx timed out",
12968 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012969 vos_pkt_return_packet(pData);
12970 return VOS_STATUS_SUCCESS;
12971 }
12972
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12974 if( NULL!=wdaContext->pTxCbFunc)
12975 {
12976 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012977 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 {
12979 wdaContext->pTxCbFunc(pMac, pData);
12980 }
12981 else
12982 {
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012984 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012985 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012986 //Return from here since we reaching here because the packet already timeout
12987 return status;
12988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 }
12990
12991 /*
12992 * Trigger the event to bring the HAL TL Tx complete function to come
12993 * out of wait
12994 * Let the coe above to complete the packet first. When this event is set,
12995 * the thread waiting for the event may run and set Vospacket_freed causing the original
12996 * packet not being freed.
12997 */
12998 status = vos_event_set(&wdaContext->txFrameEvent);
12999 if(!VOS_IS_STATUS_SUCCESS(status))
13000 {
13001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013002 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013004 return status;
13005}
Jeff Johnson295189b2012-06-20 16:38:30 -070013006/*
13007 * FUNCTION: WDA_TxPacket
13008 * Forward TX management frame to WDI
13009 */
13010VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13011 void *pFrmBuf,
13012 tANI_U16 frmLen,
13013 eFrameType frmType,
13014 eFrameTxDir txDir,
13015 tANI_U8 tid,
13016 pWDATxRxCompFunc pCompFunc,
13017 void *pData,
13018 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013019 tANI_U32 txFlag,
13020 tANI_U32 txBdToken
13021 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013022{
13023 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13024 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13025 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13026 tANI_U8 eventIdx = 0;
13027 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13028 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013029 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013030
Jeff Johnson295189b2012-06-20 16:38:30 -070013031 if((NULL == pWDA)||(NULL == pFrmBuf))
13032 {
13033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013034 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013035 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013036 VOS_ASSERT(0);
13037 return VOS_STATUS_E_FAILURE;
13038 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013039
Jeff Johnson295189b2012-06-20 16:38:30 -070013040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013041 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13042 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13044 if(NULL == pMac)
13045 {
13046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013047 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 VOS_ASSERT(0);
13049 return VOS_STATUS_E_FAILURE;
13050 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013051
Jeff Johnson295189b2012-06-20 16:38:30 -070013052 /* store the call back function in WDA context */
13053 pWDA->pTxCbFunc = pCompFunc;
13054 /* store the call back for the function of ackTxComplete */
13055 if( pAckTxComp )
13056 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013057 if( NULL != pWDA->pAckTxCbFunc )
13058 {
13059 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013061 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013062 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013063 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013064
Jeff Johnsone7245742012-09-05 17:12:55 -070013065 if( VOS_STATUS_SUCCESS !=
13066 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13067 {
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13069 "Tx Complete timeout Timer Stop Failed ");
13070 }
13071 else
13072 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013074 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013075 }
13076 }
13077
13078 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13079 pWDA->pAckTxCbFunc = pAckTxComp;
13080 if( VOS_STATUS_SUCCESS !=
13081 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13082 {
13083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13084 "Tx Complete Timer Start Failed ");
13085 pWDA->pAckTxCbFunc = NULL;
13086 return eHAL_STATUS_FAILURE;
13087 }
13088 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 /* Reset the event to be not signalled */
13090 status = vos_event_reset(&pWDA->txFrameEvent);
13091 if(!VOS_IS_STATUS_SUCCESS(status))
13092 {
13093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013094 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13096 if( pAckTxComp )
13097 {
13098 pWDA->pAckTxCbFunc = NULL;
13099 if( VOS_STATUS_SUCCESS !=
13100 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13101 {
13102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13103 "Tx Complete timeout Timer Stop Failed ");
13104 }
13105 }
13106 return VOS_STATUS_E_FAILURE;
13107 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013108
13109 /* If Peer Sta mask is set don't overwrite to self sta */
13110 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013111 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013112 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013114 else
13115 {
Ganesh K08bce952012-12-13 15:04:41 -080013116 /* Get system role, use the self station if in unknown role or STA role */
13117 systemRole = wdaGetGlobalSystemRole(pMac);
13118 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13119 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013120#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013121 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013122#endif
Ganesh K08bce952012-12-13 15:04:41 -080013123 ))
13124 {
13125 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13126 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013128
Jeff Johnsone7245742012-09-05 17:12:55 -070013129 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13130 disassoc frame reaches the HW, HAL has already deleted the peer station */
13131 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013133 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013134 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013135 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 /*Send Probe request frames on self sta idx*/
13137 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013138 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013139 /* Since we donot want probe responses to be retried, send probe responses
13140 through the NO_ACK queues */
13141 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13142 {
13143 //probe response is sent out using self station and no retries options.
13144 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13145 }
13146 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13147 {
13148 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13149 }
13150 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053013151#ifdef FEATURE_WLAN_TDLS
13152 /* TDLS Management frames are sent using Peer Sta mask */
13153 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
13154 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
13155 {
13156 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
13157
13158 }
13159#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013160 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013161
13162 /*Set frame tag to 0
13163 We will use the WDA user data in order to tag a frame as expired*/
13164 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13165 (v_PVOID_t)0);
13166
13167
13168 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013169 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13170 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 {
13172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013173 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013175 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 -070013176 if( pAckTxComp )
13177 {
13178 pWDA->pAckTxCbFunc = NULL;
13179 if( VOS_STATUS_SUCCESS !=
13180 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13181 {
13182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13183 "Tx Complete timeout Timer Stop Failed ");
13184 }
13185 }
13186 return VOS_STATUS_E_FAILURE;
13187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 /*
13189 * Wait for the event to be set by the TL, to get the response of TX
13190 * complete, this event should be set by the Callback function called by TL
13191 */
13192 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13193 &eventIdx);
13194 if(!VOS_IS_STATUS_SUCCESS(status))
13195 {
13196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13197 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013198 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013199
Mukul Sharma5a7553f2015-06-11 19:54:43 +053013200 VOS_BUG(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013201 /*Tag Frame as timed out for later deletion*/
13202 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13203 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13205 after the packet gets completed(packet freed once)*/
13206
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013207 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013208 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013209
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 /* check whether the packet was freed already,so need not free again when
13211 * TL calls the WDA_Txcomplete routine
13212 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013213 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13214 /*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 -070013215 {
13216 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013217 } */
13218
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 if( pAckTxComp )
13220 {
13221 pWDA->pAckTxCbFunc = NULL;
13222 if( VOS_STATUS_SUCCESS !=
13223 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13224 {
13225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13226 "Tx Complete timeout Timer Stop Failed ");
13227 }
13228 }
13229 status = VOS_STATUS_E_FAILURE;
13230 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013231#ifdef WLAN_DUMP_MGMTFRAMES
13232 if (VOS_IS_STATUS_SUCCESS(status))
13233 {
13234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13235 "%s() TX packet : SubType %d", __func__,pFc->subType);
13236 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13237 pData, frmLen);
13238 }
13239#endif
13240
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013241 if (VOS_IS_STATUS_SUCCESS(status))
13242 {
13243 if (pMac->fEnableDebugLog & 0x1)
13244 {
13245 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13246 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13247 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13248 {
13249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13250 pFc->type, pFc->subType);
13251 }
13252 }
13253 }
13254
13255
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 return status;
13257}
Jeff Johnson295189b2012-06-20 16:38:30 -070013258/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013259 * FUNCTION: WDA_ProcessDHCPStartInd
13260 * Forward DHCP Start to WDI
13261 */
13262static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13263 tAniDHCPInd *dhcpStartInd)
13264{
13265 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013266 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013267
c_hpothu0b0cab72014-02-13 21:52:40 +053013268 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13269 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013270 sizeof(tSirMacAddr));
13271
c_hpothu0b0cab72014-02-13 21:52:40 +053013272 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013273
c_hpothu0b0cab72014-02-13 21:52:40 +053013274 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013275 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13277 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013278 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013279 else if (WDI_STATUS_SUCCESS_SYNC != status)
13280 {
13281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13282 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13283 }
13284
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013285 vos_mem_free(dhcpStartInd);
13286 return CONVERT_WDI2VOS_STATUS(status) ;
13287}
13288
13289 /*
13290 * FUNCTION: WDA_ProcessDHCPStopInd
13291 * Forward DHCP Stop to WDI
13292 */
13293 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13294 tAniDHCPInd *dhcpStopInd)
13295 {
13296 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013297 WDI_DHCPInd wdiDHCPInd;
13298
13299 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13300 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13301
13302 status = WDI_dhcpStopInd(&wdiDHCPInd);
13303
13304 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013305 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13307 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013308 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013309 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013310 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13312 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013313 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013314
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013315 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013316
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013317 return CONVERT_WDI2VOS_STATUS(status) ;
13318 }
13319
13320/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013321 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13322 *
13323 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13324 *
13325 * PARAM:
13326 * pWDA: pointer to WDA context
13327 * pReq: pointer to stop batch scan request
13328 */
13329VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13330 tpSpoofMacAddrReqParams pReq)
13331{
13332 WDI_Status wdiStatus;
13333 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13334 tWDA_ReqParams *pWdaParams;
13335
13336 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13337 sizeof(WDI_SpoofMacAddrInfoType));
13338 if(NULL == WDI_SpoofMacAddrInfoParams) {
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13340 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13341 VOS_ASSERT(0);
13342 return VOS_STATUS_E_NOMEM;
13343 }
13344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13345 if(NULL == pWdaParams) {
13346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13347 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013348 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013349 VOS_ASSERT(0);
13350 return VOS_STATUS_E_NOMEM;
13351 }
13352
13353 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13354 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13355
13356 pWdaParams->pWdaContext = pWDA;
13357 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013358 pWdaParams->wdaMsgParam = (void *)pReq;
13359
13360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13361 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13362
Siddharth Bhal171788a2014-09-29 21:02:40 +053013363 /* store Params pass it to WDI */
13364 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13365
13366 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013367 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13368 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013369
13370 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13371 {
13372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13373 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13375 vos_mem_free(pWdaParams->wdaMsgParam);
13376 vos_mem_free(pWdaParams);
13377 }
13378
13379 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13380}
13381
13382/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 * FUNCTION: WDA_McProcessMsg
13384 * Trigger DAL-AL to start CFG download
13385 */
13386VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13387{
13388 VOS_STATUS status = VOS_STATUS_SUCCESS;
13389 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013390 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013391 {
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013393 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 VOS_ASSERT(0);
13395 return VOS_STATUS_E_FAILURE;
13396 }
13397
13398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013399 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400
13401 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13402 if(NULL == pWDA )
13403 {
13404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013405 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013406 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013407 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 return VOS_STATUS_E_FAILURE;
13409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013410 /* Process all the WDA messages.. */
13411 switch( pMsg->type )
13412 {
13413 case WNI_CFG_DNLD_REQ:
13414 {
13415 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013416 /* call WDA complete event if config download success */
13417 if( VOS_IS_STATUS_SUCCESS(status) )
13418 {
13419 vos_WDAComplete_cback(pVosContext);
13420 }
13421 else
13422 {
13423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13424 "WDA Config Download failure" );
13425 }
13426 break ;
13427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 /*
13429 * Init SCAN request from PE, convert it into DAL format
13430 * and send it to DAL
13431 */
13432 case WDA_INIT_SCAN_REQ:
13433 {
13434 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13435 break ;
13436 }
13437 /* start SCAN request from PE */
13438 case WDA_START_SCAN_REQ:
13439 {
13440 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13441 break ;
13442 }
13443 /* end SCAN request from PE */
13444 case WDA_END_SCAN_REQ:
13445 {
13446 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13447 break ;
13448 }
13449 /* end SCAN request from PE */
13450 case WDA_FINISH_SCAN_REQ:
13451 {
13452 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13453 break ;
13454 }
13455 /* join request from PE */
13456 case WDA_CHNL_SWITCH_REQ:
13457 {
13458 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13459 {
13460 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13461 }
13462 else
13463 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013464 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13465 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13466 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13467 {
13468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13469 "call ProcessChannelSwitchReq_V1" );
13470 WDA_ProcessChannelSwitchReq_V1(pWDA,
13471 (tSwitchChannelParams*)pMsg->bodyptr) ;
13472 }
13473 else
13474 {
13475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13476 "call ProcessChannelSwitchReq" );
13477 WDA_ProcessChannelSwitchReq(pWDA,
13478 (tSwitchChannelParams*)pMsg->bodyptr) ;
13479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 }
13481 break ;
13482 }
13483 /* ADD BSS request from PE */
13484 case WDA_ADD_BSS_REQ:
13485 {
13486 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13487 break ;
13488 }
13489 case WDA_ADD_STA_REQ:
13490 {
13491 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13492 break ;
13493 }
13494 case WDA_DELETE_BSS_REQ:
13495 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13497 break ;
13498 }
13499 case WDA_DELETE_STA_REQ:
13500 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13502 break ;
13503 }
13504 case WDA_CONFIG_PARAM_UPDATE_REQ:
13505 {
13506 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13507 break ;
13508 }
13509 case WDA_SET_BSSKEY_REQ:
13510 {
13511 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13512 break ;
13513 }
13514 case WDA_SET_STAKEY_REQ:
13515 {
13516 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13517 break ;
13518 }
13519 case WDA_SET_STA_BCASTKEY_REQ:
13520 {
13521 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13522 break ;
13523 }
13524 case WDA_REMOVE_BSSKEY_REQ:
13525 {
13526 WDA_ProcessRemoveBssKeyReq(pWDA,
13527 (tRemoveBssKeyParams *)pMsg->bodyptr);
13528 break ;
13529 }
13530 case WDA_REMOVE_STAKEY_REQ:
13531 {
13532 WDA_ProcessRemoveStaKeyReq(pWDA,
13533 (tRemoveStaKeyParams *)pMsg->bodyptr);
13534 break ;
13535 }
13536 case WDA_REMOVE_STA_BCASTKEY_REQ:
13537 {
13538 /* TODO: currently UMAC is not sending this request, Add the code for
13539 handling this request when UMAC supports */
13540 break;
13541 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013542#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013543 case WDA_TSM_STATS_REQ:
13544 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013545 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013546 break;
13547 }
13548#endif
13549 case WDA_UPDATE_EDCA_PROFILE_IND:
13550 {
13551 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13552 break;
13553 }
13554 case WDA_ADD_TS_REQ:
13555 {
13556 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13557 break;
13558 }
13559 case WDA_DEL_TS_REQ:
13560 {
13561 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13562 break;
13563 }
13564 case WDA_ADDBA_REQ:
13565 {
13566 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13567 break;
13568 }
13569 case WDA_DELBA_IND:
13570 {
13571 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13572 break;
13573 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013574 case WDA_UPDATE_CHAN_LIST_REQ:
13575 {
13576 WDA_ProcessUpdateChannelList(pWDA,
13577 (tSirUpdateChanList *)pMsg->bodyptr);
13578 break;
13579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 case WDA_SET_LINK_STATE:
13581 {
13582 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13583 break;
13584 }
13585 case WDA_GET_STATISTICS_REQ:
13586 {
13587 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13588 break;
13589 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013590#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013591 case WDA_GET_ROAM_RSSI_REQ:
13592 {
13593 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13594 break;
13595 }
13596#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013597 case WDA_PWR_SAVE_CFG:
13598 {
13599 if(pWDA->wdaState == WDA_READY_STATE)
13600 {
13601 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13602 }
13603 else
13604 {
13605 if(NULL != pMsg->bodyptr)
13606 {
13607 vos_mem_free(pMsg->bodyptr);
13608 }
13609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13610 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13611 }
13612 break;
13613 }
13614 case WDA_ENTER_IMPS_REQ:
13615 {
13616 if(pWDA->wdaState == WDA_READY_STATE)
13617 {
13618 WDA_ProcessEnterImpsReq(pWDA);
13619 }
13620 else
13621 {
13622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13623 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13624 }
13625 break;
13626 }
13627 case WDA_EXIT_IMPS_REQ:
13628 {
13629 if(pWDA->wdaState == WDA_READY_STATE)
13630 {
13631 WDA_ProcessExitImpsReq(pWDA);
13632 }
13633 else
13634 {
13635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13636 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13637 }
13638 break;
13639 }
13640 case WDA_ENTER_BMPS_REQ:
13641 {
13642 if(pWDA->wdaState == WDA_READY_STATE)
13643 {
13644 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13645 }
13646 else
13647 {
13648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13649 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13650 }
13651 break;
13652 }
13653 case WDA_EXIT_BMPS_REQ:
13654 {
13655 if(pWDA->wdaState == WDA_READY_STATE)
13656 {
13657 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13658 }
13659 else
13660 {
13661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13662 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13663 }
13664 break;
13665 }
13666 case WDA_ENTER_UAPSD_REQ:
13667 {
13668 if(pWDA->wdaState == WDA_READY_STATE)
13669 {
13670 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13671 }
13672 else
13673 {
13674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13675 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13676 }
13677 break;
13678 }
13679 case WDA_EXIT_UAPSD_REQ:
13680 {
13681 if(pWDA->wdaState == WDA_READY_STATE)
13682 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013683 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013684 }
13685 else
13686 {
13687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13688 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13689 }
13690 break;
13691 }
13692 case WDA_UPDATE_UAPSD_IND:
13693 {
13694 if(pWDA->wdaState == WDA_READY_STATE)
13695 {
13696 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13697 }
13698 else
13699 {
13700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13701 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13702 }
13703 break;
13704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013705 case WDA_REGISTER_PE_CALLBACK :
13706 {
13707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13708 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13709 /*TODO: store the PE callback */
13710 /* Do Nothing? MSG Body should be freed at here */
13711 if(NULL != pMsg->bodyptr)
13712 {
13713 vos_mem_free(pMsg->bodyptr);
13714 }
13715 break;
13716 }
13717 case WDA_SYS_READY_IND :
13718 {
13719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13720 "Handling msg type WDA_SYS_READY_IND " );
13721 pWDA->wdaState = WDA_READY_STATE;
13722 if(NULL != pMsg->bodyptr)
13723 {
13724 vos_mem_free(pMsg->bodyptr);
13725 }
13726 break;
13727 }
13728 case WDA_BEACON_FILTER_IND :
13729 {
13730 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13731 break;
13732 }
13733 case WDA_BTC_SET_CFG:
13734 {
13735 /*TODO: handle this while dealing with BTC */
13736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13737 "Handling msg type WDA_BTC_SET_CFG " );
13738 /* Do Nothing? MSG Body should be freed at here */
13739 if(NULL != pMsg->bodyptr)
13740 {
13741 vos_mem_free(pMsg->bodyptr);
13742 }
13743 break;
13744 }
13745 case WDA_SIGNAL_BT_EVENT:
13746 {
13747 /*TODO: handle this while dealing with BTC */
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13749 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13750 /* Do Nothing? MSG Body should be freed at here */
13751 if(NULL != pMsg->bodyptr)
13752 {
13753 vos_mem_free(pMsg->bodyptr);
13754 }
13755 break;
13756 }
13757 case WDA_CFG_RXP_FILTER_REQ:
13758 {
13759 WDA_ProcessConfigureRxpFilterReq(pWDA,
13760 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13761 break;
13762 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013763 case WDA_MGMT_LOGGING_INIT_REQ:
13764 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053013765 WDA_ProcessFWLoggingInitReq(pWDA,
13766 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013767 break;
13768 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013769 case WDA_GET_FRAME_LOG_REQ:
13770 {
13771 WDA_ProcessGetFrameLogReq(pWDA,
13772 (tAniGetFrameLogReq *)pMsg->bodyptr);
13773 break;
13774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013775 case WDA_SET_HOST_OFFLOAD:
13776 {
13777 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13778 break;
13779 }
13780 case WDA_SET_KEEP_ALIVE:
13781 {
13782 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13783 break;
13784 }
13785#ifdef WLAN_NS_OFFLOAD
13786 case WDA_SET_NS_OFFLOAD:
13787 {
13788 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13789 break;
13790 }
13791#endif //WLAN_NS_OFFLOAD
13792 case WDA_ADD_STA_SELF_REQ:
13793 {
13794 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13795 break;
13796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 case WDA_DEL_STA_SELF_REQ:
13798 {
13799 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13800 break;
13801 }
13802 case WDA_WOWL_ADD_BCAST_PTRN:
13803 {
13804 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13805 break;
13806 }
13807 case WDA_WOWL_DEL_BCAST_PTRN:
13808 {
13809 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13810 break;
13811 }
13812 case WDA_WOWL_ENTER_REQ:
13813 {
13814 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13815 break;
13816 }
13817 case WDA_WOWL_EXIT_REQ:
13818 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013819 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 break;
13821 }
13822 case WDA_TL_FLUSH_AC_REQ:
13823 {
13824 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13825 break;
13826 }
13827 case WDA_SIGNAL_BTAMP_EVENT:
13828 {
13829 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13830 break;
13831 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013832 case WDA_FW_STATS_GET_REQ:
13833 {
13834 WDA_ProcessFWStatsGetReq(pWDA,
13835 (tSirFWStatsGetReq *)pMsg->bodyptr);
13836 break;
13837 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013838#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13839 case WDA_LINK_LAYER_STATS_SET_REQ:
13840 {
13841 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13842 break;
13843 }
13844 case WDA_LINK_LAYER_STATS_GET_REQ:
13845 {
13846 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13847 break;
13848 }
13849 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13850 {
13851 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13852 break;
13853 }
13854#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013855#ifdef WLAN_FEATURE_EXTSCAN
13856 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13857 {
13858 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13859 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13860 break;
13861 }
13862 case WDA_EXTSCAN_START_REQ:
13863 {
13864 WDA_ProcessEXTScanStartReq(pWDA,
13865 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13866 break;
13867 }
13868 case WDA_EXTSCAN_STOP_REQ:
13869 {
13870 WDA_ProcessEXTScanStopReq(pWDA,
13871 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13872 break;
13873 }
13874 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13875 {
13876 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13877 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13878 break;
13879 }
13880 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13881 {
13882 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13883 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13884 break;
13885 }
13886 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13887 {
13888 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13889 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13890 break;
13891 }
13892 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13893 {
13894 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13895 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13896 break;
13897 }
13898 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13899 {
13900 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13901 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13902 break;
13903 }
13904#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013905#ifdef WDA_UT
13906 case WDA_WDI_EVENT_MSG:
13907 {
13908 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13909 break ;
13910 }
13911#endif
13912 case WDA_UPDATE_BEACON_IND:
13913 {
13914 WDA_ProcessUpdateBeaconParams(pWDA,
13915 (tUpdateBeaconParams *)pMsg->bodyptr);
13916 break;
13917 }
13918 case WDA_SEND_BEACON_REQ:
13919 {
13920 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13921 break;
13922 }
13923 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13924 {
13925 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13926 (tSendProbeRespParams *)pMsg->bodyptr);
13927 break;
13928 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013929#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 case WDA_SET_MAX_TX_POWER_REQ:
13931 {
13932 WDA_ProcessSetMaxTxPowerReq(pWDA,
13933 (tMaxTxPowerParams *)pMsg->bodyptr);
13934 break;
13935 }
13936#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013937 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13938 {
13939 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13940 pMsg->bodyptr);
13941 break;
13942 }
schang86c22c42013-03-13 18:41:24 -070013943 case WDA_SET_TX_POWER_REQ:
13944 {
13945 WDA_ProcessSetTxPowerReq(pWDA,
13946 (tSirSetTxPowerReq *)pMsg->bodyptr);
13947 break;
13948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013949 case WDA_SET_P2P_GO_NOA_REQ:
13950 {
13951 WDA_ProcessSetP2PGONOAReq(pWDA,
13952 (tP2pPsParams *)pMsg->bodyptr);
13953 break;
13954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013955 /* timer related messages */
13956 case WDA_TIMER_BA_ACTIVITY_REQ:
13957 {
13958 WDA_BaCheckActivity(pWDA) ;
13959 break ;
13960 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013961
13962 /* timer related messages */
13963 case WDA_TIMER_TRAFFIC_STATS_IND:
13964 {
13965 WDA_TimerTrafficStatsInd(pWDA);
13966 break;
13967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013968#ifdef WLAN_FEATURE_VOWIFI_11R
13969 case WDA_AGGR_QOS_REQ:
13970 {
13971 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13972 break;
13973 }
13974#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013975 case WDA_FTM_CMD_REQ:
13976 {
13977 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13978 break ;
13979 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013980#ifdef FEATURE_OEM_DATA_SUPPORT
13981 case WDA_START_OEM_DATA_REQ:
13982 {
13983 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13984 break;
13985 }
13986#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 /* Tx Complete Time out Indication */
13988 case WDA_TX_COMPLETE_TIMEOUT_IND:
13989 {
13990 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13991 break;
13992 }
13993 case WDA_WLAN_SUSPEND_IND:
13994 {
13995 WDA_ProcessWlanSuspendInd(pWDA,
13996 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13997 break;
13998 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013999 case WDA_WLAN_RESUME_REQ:
14000 {
14001 WDA_ProcessWlanResumeReq(pWDA,
14002 (tSirWlanResumeParam *)pMsg->bodyptr) ;
14003 break;
14004 }
14005
14006 case WDA_UPDATE_CF_IND:
14007 {
14008 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
14009 pMsg->bodyptr = NULL;
14010 break;
14011 }
14012#ifdef FEATURE_WLAN_SCAN_PNO
14013 case WDA_SET_PNO_REQ:
14014 {
14015 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
14016 break;
14017 }
14018 case WDA_UPDATE_SCAN_PARAMS_REQ:
14019 {
14020 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
14021 break;
14022 }
14023 case WDA_SET_RSSI_FILTER_REQ:
14024 {
14025 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
14026 break;
14027 }
14028#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014029#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014030 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014031 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014032 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014033 break;
14034 }
14035#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014036 case WDA_SET_TX_PER_TRACKING_REQ:
14037 {
14038 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
14039 break;
14040 }
14041
14042#ifdef WLAN_FEATURE_PACKET_FILTERING
14043 case WDA_8023_MULTICAST_LIST_REQ:
14044 {
14045 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
14046 break;
14047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014048 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
14049 {
14050 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
14051 break;
14052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
14054 {
14055 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
14056 break;
14057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014058 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
14059 {
14060 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
14061 break;
14062 }
14063#endif // WLAN_FEATURE_PACKET_FILTERING
14064
14065
14066 case WDA_TRANSMISSION_CONTROL_IND:
14067 {
14068 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
14069 break;
14070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 case WDA_SET_POWER_PARAMS_REQ:
14072 {
14073 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
14074 break;
14075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014076#ifdef WLAN_FEATURE_GTK_OFFLOAD
14077 case WDA_GTK_OFFLOAD_REQ:
14078 {
14079 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
14080 break;
14081 }
14082
14083 case WDA_GTK_OFFLOAD_GETINFO_REQ:
14084 {
14085 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14086 break;
14087 }
14088#endif //WLAN_FEATURE_GTK_OFFLOAD
14089
14090 case WDA_SET_TM_LEVEL_REQ:
14091 {
14092 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14093 break;
14094 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014095
Mohit Khanna4a70d262012-09-11 16:30:12 -070014096 case WDA_UPDATE_OP_MODE:
14097 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014098 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14099 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14100 {
14101 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14102 }
14103 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014104 {
14105 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14106 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14107 else
14108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014109 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014110 }
14111 else
14112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014113 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014114 break;
14115 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014116#ifdef WLAN_FEATURE_11W
14117 case WDA_EXCLUDE_UNENCRYPTED_IND:
14118 {
14119 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14120 break;
14121 }
14122#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014123#ifdef FEATURE_WLAN_TDLS
14124 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14125 {
14126 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14127 break;
14128 }
14129#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014130 case WDA_DHCP_START_IND:
14131 {
14132 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14133 break;
14134 }
14135 case WDA_DHCP_STOP_IND:
14136 {
14137 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14138 break;
14139 }
Leo Chang9056f462013-08-01 19:21:11 -070014140#ifdef FEATURE_WLAN_LPHB
14141 case WDA_LPHB_CONF_REQ:
14142 {
14143 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14144 break;
14145 }
14146#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014147 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14148 {
14149 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14150 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14151 break;
14152 }
14153 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14154 {
14155 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14156 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14157 break;
14158 }
14159
Rajeev79dbe4c2013-10-05 11:03:42 +053014160#ifdef FEATURE_WLAN_BATCH_SCAN
14161 case WDA_SET_BATCH_SCAN_REQ:
14162 {
14163 WDA_ProcessSetBatchScanReq(pWDA,
14164 (tSirSetBatchScanReq *)pMsg->bodyptr);
14165 break;
14166 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014167 case WDA_RATE_UPDATE_IND:
14168 {
14169 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14170 break;
14171 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014172 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14173 {
14174 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14175 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14176 break;
14177 }
14178 case WDA_STOP_BATCH_SCAN_IND:
14179 {
14180 WDA_ProcessStopBatchScanInd(pWDA,
14181 (tSirStopBatchScanInd *)pMsg->bodyptr);
14182 break;
14183 }
c_hpothu92367912014-05-01 15:18:17 +053014184 case WDA_GET_BCN_MISS_RATE_REQ:
14185 WDA_ProcessGetBcnMissRateReq(pWDA,
14186 (tSirBcnMissRateReq *)pMsg->bodyptr);
14187 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014188#endif
14189
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014190 case WDA_HT40_OBSS_SCAN_IND:
14191 {
14192 WDA_ProcessHT40OBSSScanInd(pWDA,
14193 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14194 break;
14195 }
14196 case WDA_HT40_OBSS_STOP_SCAN_IND:
14197 {
14198 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14199 (tANI_U8*)pMsg->bodyptr);
14200 break;
14201 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014202// tdlsoffchan
14203#ifdef FEATURE_WLAN_TDLS
14204 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14205 {
14206 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14207 break;
14208 }
14209#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014210 case WDA_SPOOF_MAC_ADDR_REQ:
14211 {
14212 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14213 break;
14214 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014215 case WDA_ENCRYPT_MSG_REQ:
14216 {
14217 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14218 break;
14219 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014220
14221 case WDA_NAN_REQUEST:
14222 {
14223 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14224 break;
14225 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014226 case WDA_SET_RTS_CTS_HTVHT:
14227 {
14228 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14229 break;
14230 }
Katya Nigamf0511f62015-05-05 16:40:57 +053014231
14232 case WDA_MON_START_REQ:
14233 {
14234 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
14235 break;
14236 }
14237 case WDA_MON_STOP_REQ:
14238 {
14239 WDA_ProcessMonStopReq(pWDA,NULL);
14240 break;
14241 }
14242
Jeff Johnson295189b2012-06-20 16:38:30 -070014243 default:
14244 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 "No Handling for msg type %x in WDA "
14247 ,pMsg->type);
14248 /* Do Nothing? MSG Body should be freed at here */
14249 if(NULL != pMsg->bodyptr)
14250 {
14251 vos_mem_free(pMsg->bodyptr);
14252 }
14253 //WDA_VOS_ASSERT(0) ;
14254 }
14255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 return status ;
14257}
14258
Jeff Johnson295189b2012-06-20 16:38:30 -070014259/*
14260 * FUNCTION: WDA_LowLevelIndCallback
14261 * IND API callback from WDI, send Ind to PE
14262 */
14263void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14264 void* pUserData )
14265{
14266 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14267#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14268 tSirRSSINotification rssiNotification;
14269#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014270 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014271 {
14272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014273 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014274 VOS_ASSERT(0);
14275 return ;
14276 }
14277
14278 switch(wdiLowLevelInd->wdiIndicationType)
14279 {
14280 case WDI_RSSI_NOTIFICATION_IND:
14281 {
14282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14283 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014284#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14285 rssiNotification.bReserved =
14286 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14287 rssiNotification.bRssiThres1NegCross =
14288 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14289 rssiNotification.bRssiThres1PosCross =
14290 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14291 rssiNotification.bRssiThres2NegCross =
14292 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14293 rssiNotification.bRssiThres2PosCross =
14294 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14295 rssiNotification.bRssiThres3NegCross =
14296 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14297 rssiNotification.bRssiThres3PosCross =
14298 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014299 rssiNotification.avgRssi = (v_S7_t)
14300 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014301 WLANTL_BMPSRSSIRegionChangedNotification(
14302 pWDA->pVosContext,
14303 &rssiNotification);
14304#endif
14305 break ;
14306 }
14307 case WDI_MISSED_BEACON_IND:
14308 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014309 tpSirSmeMissedBeaconInd pMissBeacInd =
14310 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14312 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014313 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014314 if(NULL == pMissBeacInd)
14315 {
14316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14317 "%s: VOS MEM Alloc Failure", __func__);
14318 break;
14319 }
14320 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14321 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14322 pMissBeacInd->bssIdx =
14323 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14324 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014325 break ;
14326 }
14327 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14328 {
14329 /* TODO: Decode Ind and send Ind to PE */
14330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14331 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14332 break ;
14333 }
14334
14335 case WDI_MIC_FAILURE_IND:
14336 {
14337 tpSirSmeMicFailureInd pMicInd =
14338 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14339
14340 if(NULL == pMicInd)
14341 {
14342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014344 break;
14345 }
14346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14347 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014348 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14349 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14350 vos_mem_copy(pMicInd->bssId,
14351 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14352 sizeof(tSirMacAddr));
14353 vos_mem_copy(pMicInd->info.srcMacAddr,
14354 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14355 sizeof(tSirMacAddr));
14356 vos_mem_copy(pMicInd->info.taMacAddr,
14357 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14358 sizeof(tSirMacAddr));
14359 vos_mem_copy(pMicInd->info.dstMacAddr,
14360 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14361 sizeof(tSirMacAddr));
14362 vos_mem_copy(pMicInd->info.rxMacAddr,
14363 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14364 sizeof(tSirMacAddr));
14365 pMicInd->info.multicast =
14366 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14367 pMicInd->info.keyId=
14368 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14369 pMicInd->info.IV1=
14370 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14371 vos_mem_copy(pMicInd->info.TSC,
14372 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14374 (void *)pMicInd , 0) ;
14375 break ;
14376 }
14377 case WDI_FATAL_ERROR_IND:
14378 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014379 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014380 /* TODO: Decode Ind and send Ind to PE */
14381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14382 "Received WDI_FATAL_ERROR_IND from WDI ");
14383 break ;
14384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014385 case WDI_DEL_STA_IND:
14386 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014387 tpDeleteStaContext pDelSTACtx =
14388 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14389
14390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14391 "Received WDI_DEL_STA_IND from WDI ");
14392 if(NULL == pDelSTACtx)
14393 {
14394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014396 break;
14397 }
14398 vos_mem_copy(pDelSTACtx->addr2,
14399 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14400 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014401 vos_mem_copy(pDelSTACtx->bssId,
14402 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14403 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014404 pDelSTACtx->assocId =
14405 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14406 pDelSTACtx->reasonCode =
14407 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14408 pDelSTACtx->staId =
14409 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014410 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14411 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014412 break ;
14413 }
14414 case WDI_COEX_IND:
14415 {
14416 tANI_U32 index;
14417 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014418 tSirSmeCoexInd *pSmeCoexInd;
14419
14420 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14421 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14422 {
14423 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14424 {
14425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14426 FL("Coex state: 0x%x coex feature: 0x%x"),
14427 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14428 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14429
14430 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14431 {
14432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14433 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14434 }
14435 }
14436 break;
14437 }
14438
14439 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014440 if(NULL == pSmeCoexInd)
14441 {
14442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014443 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014444 break;
14445 }
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14447 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014448 /* Message Header */
14449 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14450 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 /* Info from WDI Indication */
14452 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14453 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14454 {
14455 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014457 /* VOS message wrapper */
14458 vosMsg.type = eWNI_SME_COEX_IND;
14459 vosMsg.bodyptr = (void *)pSmeCoexInd;
14460 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014461 /* Send message to SME */
14462 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14463 {
14464 /* free the mem and return */
14465 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14466 }
14467 else
14468 {
14469 /* DEBUG */
14470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14471 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14472 pSmeCoexInd->coexIndType,
14473 pSmeCoexInd->coexIndData[0],
14474 pSmeCoexInd->coexIndData[1],
14475 pSmeCoexInd->coexIndData[2],
14476 pSmeCoexInd->coexIndData[3]);
14477 }
14478 break;
14479 }
14480 case WDI_TX_COMPLETE_IND:
14481 {
14482 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14483 /* Calling TxCompleteAck Indication from wda context*/
14484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14485 "Complete Indication received from HAL");
14486 if( pWDA->pAckTxCbFunc )
14487 {
14488 if( VOS_STATUS_SUCCESS !=
14489 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14490 {
14491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14492 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014493 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053014494 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014495 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14496 else
14497 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014498 pWDA->pAckTxCbFunc = NULL;
14499 }
14500 else
14501 {
14502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14503 "Tx Complete Indication is received after timeout ");
14504 }
14505 break;
14506 }
Viral Modid86bde22012-12-10 13:09:21 -080014507 case WDI_P2P_NOA_START_IND :
14508 {
14509 tSirP2PNoaStart *pP2pNoaStart =
14510 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14511
14512 if (NULL == pP2pNoaStart)
14513 {
14514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14515 "Memory allocation failure, "
14516 "WDI_P2P_NOA_START_IND not forwarded");
14517 break;
14518 }
14519 pP2pNoaStart->status =
14520 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14521 pP2pNoaStart->bssIdx =
14522 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14523 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14524 (void *)pP2pNoaStart , 0) ;
14525 break;
14526 }
14527
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014528#ifdef FEATURE_WLAN_TDLS
14529 case WDI_TDLS_IND :
14530 {
14531 tSirTdlsInd *pTdlsInd =
14532 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14533
14534 if (NULL == pTdlsInd)
14535 {
14536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14537 "Memory allocation failure, "
14538 "WDI_TDLS_IND not forwarded");
14539 break;
14540 }
14541 pTdlsInd->status =
14542 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14543 pTdlsInd->assocId =
14544 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14545 pTdlsInd->staIdx =
14546 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14547 pTdlsInd->reasonCode =
14548 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14549 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14550 (void *)pTdlsInd , 0) ;
14551 break;
14552 }
14553#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 case WDI_P2P_NOA_ATTR_IND :
14555 {
14556 tSirP2PNoaAttr *pP2pNoaAttr =
14557 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14559 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014560 if (NULL == pP2pNoaAttr)
14561 {
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14563 "Memory allocation failure, "
14564 "WDI_P2P_NOA_ATTR_IND not forwarded");
14565 break;
14566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 pP2pNoaAttr->index =
14568 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14569 pP2pNoaAttr->oppPsFlag =
14570 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14571 pP2pNoaAttr->ctWin =
14572 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14573
14574 pP2pNoaAttr->uNoa1IntervalCnt =
14575 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14576 pP2pNoaAttr->uNoa1Duration =
14577 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14578 pP2pNoaAttr->uNoa1Interval =
14579 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14580 pP2pNoaAttr->uNoa1StartTime =
14581 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014582 pP2pNoaAttr->uNoa2IntervalCnt =
14583 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14584 pP2pNoaAttr->uNoa2Duration =
14585 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14586 pP2pNoaAttr->uNoa2Interval =
14587 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14588 pP2pNoaAttr->uNoa2StartTime =
14589 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014590 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14591 (void *)pP2pNoaAttr , 0) ;
14592 break;
14593 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014594#ifdef FEATURE_WLAN_SCAN_PNO
14595 case WDI_PREF_NETWORK_FOUND_IND:
14596 {
14597 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014598 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14599 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14600 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14601 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14602
Jeff Johnson295189b2012-06-20 16:38:30 -070014603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14604 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014605 if (NULL == pPrefNetworkFoundInd)
14606 {
14607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14608 "Memory allocation failure, "
14609 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014610 if (NULL !=
14611 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14612 {
14613 wpalMemoryFree(
14614 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14615 );
14616 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14617 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014618 break;
14619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014620 /* Message Header */
14621 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014622 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014623
14624 /* Info from WDI Indication */
14625 pPrefNetworkFoundInd->ssId.length =
14626 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014627 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14629 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14630 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014631 if (NULL !=
14632 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14633 {
14634 pPrefNetworkFoundInd->frameLength =
14635 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14636 vos_mem_copy( pPrefNetworkFoundInd->data,
14637 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14638 pPrefNetworkFoundInd->frameLength);
14639 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14640 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14641 }
14642 else
14643 {
14644 pPrefNetworkFoundInd->frameLength = 0;
14645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014647 /* VOS message wrapper */
14648 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14649 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14650 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 /* Send message to SME */
14652 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14653 {
14654 /* free the mem and return */
14655 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014657 break;
14658 }
14659#endif // FEATURE_WLAN_SCAN_PNO
14660
14661#ifdef WLAN_WAKEUP_EVENTS
14662 case WDI_WAKE_REASON_IND:
14663 {
14664 vos_msg_t vosMsg;
14665 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14666 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14667 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14668
14669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014670 "[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 -070014671 wdiLowLevelInd->wdiIndicationType,
14672 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14673 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14674 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14675
14676 if (NULL == pWakeReasonInd)
14677 {
14678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14679 "Memory allocation failure, "
14680 "WDI_WAKE_REASON_IND not forwarded");
14681 break;
14682 }
14683
14684 vos_mem_zero(pWakeReasonInd, allocSize);
14685
14686 /* Message Header */
14687 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14688 pWakeReasonInd->mesgLen = allocSize;
14689
14690 /* Info from WDI Indication */
14691 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14692 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14693 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14694 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14695 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14696 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14697 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14698 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14699
14700 /* VOS message wrapper */
14701 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14702 vosMsg.bodyptr = (void *) pWakeReasonInd;
14703 vosMsg.bodyval = 0;
14704
14705 /* Send message to SME */
14706 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14707 {
14708 /* free the mem and return */
14709 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14710 }
14711
14712 break;
14713 }
14714#endif // WLAN_WAKEUP_EVENTS
14715
14716 case WDI_TX_PER_HIT_IND:
14717 {
14718 vos_msg_t vosMsg;
14719 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14720 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14721 /* VOS message wrapper */
14722 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14723 vosMsg.bodyptr = NULL;
14724 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014725 /* Send message to SME */
14726 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14727 {
14728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14729 }
14730 break;
14731 }
14732
Leo Chang9056f462013-08-01 19:21:11 -070014733#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014734 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014735 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014736 vos_msg_t vosMsg;
14737 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014738
Leo Changd9df8aa2013-09-26 13:32:26 -070014739 lphbInd =
14740 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14741 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014742 {
14743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14744 "%s: LPHB IND buffer alloc Fail", __func__);
14745 return ;
14746 }
14747
Leo Changd9df8aa2013-09-26 13:32:26 -070014748 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014749 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014750 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014751 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014752 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014753 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14754
14755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014756 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014757 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14758
Leo Changd9df8aa2013-09-26 13:32:26 -070014759 vosMsg.type = eWNI_SME_LPHB_IND;
14760 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014761 vosMsg.bodyval = 0;
14762 /* Send message to SME */
14763 if (VOS_STATUS_SUCCESS !=
14764 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14765 {
14766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14767 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014768 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014769 }
14770 break;
14771 }
14772#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014773 case WDI_PERIODIC_TX_PTRN_FW_IND:
14774 {
14775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14776 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14777 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14778 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14779 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14780 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14781 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14782
14783 break;
14784 }
Leo Chang9056f462013-08-01 19:21:11 -070014785
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014786 case WDI_IBSS_PEER_INACTIVITY_IND:
14787 {
14788 tSirIbssPeerInactivityInd *pIbssInd =
14789 (tSirIbssPeerInactivityInd *)
14790 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14791
14792 if (NULL == pIbssInd)
14793 {
14794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14795 "Memory allocation failure, "
14796 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14797 break;
14798 }
14799
14800 pIbssInd->bssIdx =
14801 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14802 pIbssInd->staIdx =
14803 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14804 vos_mem_copy(pIbssInd->peerAddr,
14805 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14806 sizeof(tSirMacAddr));
14807 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14808 break;
14809 }
14810
Rajeev79dbe4c2013-10-05 11:03:42 +053014811#ifdef FEATURE_WLAN_BATCH_SCAN
14812 case WDI_BATCH_SCAN_RESULT_IND:
14813 {
14814 void *pBatchScanResult;
14815 void *pCallbackContext;
14816 tpAniSirGlobal pMac;
14817
14818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14819 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14820
14821 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014822 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014823 {
14824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14825 "%s:pWDA is NULL", __func__);
14826 VOS_ASSERT(0);
14827 return;
14828 }
14829
14830 pBatchScanResult =
14831 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14832 if (NULL == pBatchScanResult)
14833 {
14834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14835 "%s:Batch scan result from FW is null can't invoke HDD callback",
14836 __func__);
14837 VOS_ASSERT(0);
14838 return;
14839 }
14840
14841 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14842 if (NULL == pMac)
14843 {
14844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14845 "%s:pMac is NULL", __func__);
14846 VOS_ASSERT(0);
14847 return;
14848 }
14849
14850 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14851 /*call hdd callback with set batch scan response data*/
14852 if(pMac->pmc.batchScanResultCallback)
14853 {
14854 pMac->pmc.batchScanResultCallback(pCallbackContext,
14855 pBatchScanResult);
14856 }
14857 else
14858 {
14859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14860 "%s:HDD callback is null", __func__);
14861 VOS_ASSERT(0);
14862 }
14863 break;
14864 }
14865#endif
14866
Leo Chang0b0e45a2013-12-15 15:18:55 -080014867#ifdef FEATURE_WLAN_CH_AVOID
14868 case WDI_CH_AVOID_IND:
14869 {
14870 vos_msg_t vosMsg;
14871 tSirChAvoidIndType *chAvoidInd;
14872
14873 chAvoidInd =
14874 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14875 if (NULL == chAvoidInd)
14876 {
14877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14878 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14879 return ;
14880 }
14881
14882 chAvoidInd->avoidRangeCount =
14883 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14884 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14885 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14886 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14887
14888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14889 "%s : WDA CH avoid notification", __func__);
14890
14891 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14892 vosMsg.bodyptr = chAvoidInd;
14893 vosMsg.bodyval = 0;
14894 /* Send message to SME */
14895 if (VOS_STATUS_SUCCESS !=
14896 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14897 {
14898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14899 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14900 vos_mem_free(chAvoidInd);
14901 }
14902 break;
14903 }
14904#endif /* FEATURE_WLAN_CH_AVOID */
14905
Sunil Duttbd736ed2014-05-26 21:19:41 +053014906#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14907 case WDI_LL_STATS_RESULTS_IND:
14908 {
14909 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014910 tpAniSirGlobal pMac;
14911
14912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14913 "Received WDI_LL_STATS_RESULTS_IND from FW");
14914
14915 /*sanity check*/
14916 if (NULL == pWDA)
14917 {
14918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14919 "%s:pWDA is NULL", __func__);
14920 VOS_ASSERT(0);
14921 return;
14922 }
14923
14924 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014925 (void *)wdiLowLevelInd->
14926 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014927 if (NULL == pLinkLayerStatsInd)
14928 {
14929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14930 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14931 __func__);
14932 VOS_ASSERT(0);
14933 return;
14934 }
14935
14936 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14937 if (NULL == pMac)
14938 {
14939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14940 "%s:pMac is NULL", __func__);
14941 VOS_ASSERT(0);
14942 return;
14943 }
14944
Dino Mycled3d50022014-07-07 12:58:25 +053014945 /* call hdd callback with Link Layer Statistics.
14946 * vdev_id/ifacId in link_stats_results will be
14947 * used to retrieve the correct HDD context
14948 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014949 if (pMac->sme.pLinkLayerStatsIndCallback)
14950 {
Dino Mycled3d50022014-07-07 12:58:25 +053014951 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014952 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014953 pLinkLayerStatsInd,
14954 wdiLowLevelInd->
14955 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014956 }
14957 else
14958 {
14959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14960 "%s:HDD callback is null", __func__);
14961 }
14962 break;
14963 }
14964#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14965
Dino Mycle41bdc942014-06-10 11:30:24 +053014966#ifdef WLAN_FEATURE_EXTSCAN
14967 case WDI_EXTSCAN_PROGRESS_IND:
14968 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14969 case WDI_EXTSCAN_SCAN_RESULT_IND:
14970 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14971 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14972 {
14973 void *pEXTScanData;
14974 void *pCallbackContext;
14975 tpAniSirGlobal pMac;
14976 tANI_U16 indType;
14977
14978 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14979 "Received WDI_EXTSCAN Indications from FW");
14980 /*sanity check*/
14981 if (NULL == pWDA)
14982 {
14983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14984 "%s:pWDA is NULL", __func__);
14985 VOS_ASSERT(0);
14986 return;
14987 }
14988 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14989 {
14990 indType = WDA_EXTSCAN_PROGRESS_IND;
14991
14992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14993 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14994 }
14995 if (wdiLowLevelInd->wdiIndicationType ==
14996 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14997 {
14998 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14999
15000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15001 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
15002 }
15003 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
15004 {
15005 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
15006
15007 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15008 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
15009 }
15010 if (wdiLowLevelInd->wdiIndicationType ==
15011 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
15012 {
15013 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
15014
15015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15016 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
15017 }
15018 if (wdiLowLevelInd->wdiIndicationType ==
15019 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
15020 {
15021 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
15022
15023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15024 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
15025 }
15026
15027 pEXTScanData =
15028 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
15029 if (NULL == pEXTScanData)
15030 {
15031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15032 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
15033 __func__);
15034 VOS_ASSERT(0);
15035 return;
15036 }
15037
15038 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15039 if (NULL == pMac)
15040 {
15041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15042 "%s:pMac is NULL", __func__);
15043 VOS_ASSERT(0);
15044 return;
15045 }
15046
15047 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
15048
15049 if(pMac->sme.pEXTScanIndCb)
15050 {
15051 pMac->sme.pEXTScanIndCb(pCallbackContext,
15052 indType,
15053 pEXTScanData);
15054 }
15055 else
15056 {
15057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15058 "%s:HDD callback is null", __func__);
15059 }
15060 break;
15061 }
15062#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053015063 case WDI_DEL_BA_IND:
15064 {
15065 tpBADeleteParams pDelBAInd =
15066 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
15067
15068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15069 "Received WDI_DEL_BA_IND from WDI ");
15070 if(NULL == pDelBAInd)
15071 {
15072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15073 "%s: VOS MEM Alloc Failure", __func__);
15074 break;
15075 }
15076 vos_mem_copy(pDelBAInd->peerMacAddr,
15077 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
15078 sizeof(tSirMacAddr));
15079 vos_mem_copy(pDelBAInd->bssId,
15080 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
15081 sizeof(tSirMacAddr));
15082 pDelBAInd->staIdx =
15083 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
15084 pDelBAInd->baTID =
15085 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
15086 pDelBAInd->baDirection =
15087 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
15088 pDelBAInd->reasonCode =
15089 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
15090
15091 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
15092 (void *)pDelBAInd , 0) ;
15093 break;
15094 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015095 case WDI_NAN_EVENT_IND:
15096 {
15097 vos_msg_t vosMsg;
15098 tpSirNanEvent pSirNanEvent = NULL;
15099
15100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15101 "Received WDI_NAN_EVENT");
15102
15103 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15104 - sizeof( pSirNanEvent->event_data)
15105 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15106
15107 if (NULL == pSirNanEvent)
15108 {
15109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15110 "%s: VOS MEM Alloc Failure", __func__);
15111 VOS_ASSERT(0) ;
15112 break;
15113 }
15114
15115 pSirNanEvent->event_data_len =
15116 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15117
15118 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15119 {
15120 vos_mem_copy( pSirNanEvent->event_data,
15121 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15122 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15123 }
15124
15125 /* VOS message wrapper */
15126 vosMsg.type = eWNI_SME_NAN_EVENT;
15127 vosMsg.bodyptr = pSirNanEvent;
15128 vosMsg.bodyval = 0;
15129
15130 /* Send message to SME */
15131 if (VOS_STATUS_SUCCESS
15132 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15133 {
15134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15135 "post eWNI_SME_NAN_EVENT to SME Failed");
15136 vos_mem_free(pSirNanEvent);
15137 }
15138 break;
15139 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015140
Jeff Johnson295189b2012-06-20 16:38:30 -070015141 default:
15142 {
15143 /* TODO error */
15144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15145 "Received UNKNOWN Indication from WDI ");
15146 }
15147 }
15148 return ;
15149}
15150
Jeff Johnson295189b2012-06-20 16:38:30 -070015151/*
15152 * BA related processing in WDA.
15153 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015154void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15155 void* pUserData)
15156{
15157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15158 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 if(NULL == pWdaParams)
15160 {
15161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015162 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015163 VOS_ASSERT(0) ;
15164 return ;
15165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015166 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015167 vos_mem_free(pWdaParams->wdaMsgParam) ;
15168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15169 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015171 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015172 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15173 {
15174 tANI_U8 i = 0 ;
15175 tBaActivityInd *baActivityInd = NULL ;
15176 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15177 tANI_U8 allocSize = sizeof(tBaActivityInd)
15178 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15179 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15180 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015181 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015182 if(NULL == baActivityInd)
15183 {
15184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015186 VOS_ASSERT(0) ;
15187 return;
15188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015189 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15190 sizeof(tSirMacAddr)) ;
15191 baActivityInd->baCandidateCnt = baCandidateCount ;
15192
15193 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15194 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15195
15196 for(i = 0 ; i < baCandidateCount ; i++)
15197 {
15198 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015199 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15200 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015201 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15202 {
15203 baCandidate->baInfo[tid].fBaEnable =
15204 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15205 baCandidate->baInfo[tid].startingSeqNum =
15206 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15207 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015208 wdiBaCandidate++ ;
15209 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015211 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15212 }
15213 else
15214 {
15215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15216 "BA Trigger RSP with Failure received ");
15217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015218 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015219}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015220
15221
15222/*
15223 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15224 * during MCC
15225 */
15226void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15227{
15228 wpt_uint32 enabled;
15229 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15230 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15231 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15232
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015233 if (NULL == pMac )
15234 {
15235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15236 "%s: Invoked with invalid MAC context ", __func__ );
15237 VOS_ASSERT(0);
15238 return;
15239 }
15240
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015241 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15242 != eSIR_SUCCESS)
15243 {
15244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15245 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15246 return;
15247 }
15248
15249 if(!enabled)
15250 {
15251 return;
15252 }
15253
15254 if(NULL == pWDA)
15255 {
15256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15257 "%s:WDA context is NULL", __func__);
15258 VOS_ASSERT(0);
15259 return;
15260 }
15261
15262 if(activate)
15263 {
15264 if( VOS_STATUS_SUCCESS !=
15265 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15266 {
15267 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15268 "Traffic Stats Timer Start Failed ");
15269 return;
15270 }
15271 WDI_DS_ActivateTrafficStats();
15272 }
15273 else
15274 {
15275 WDI_DS_DeactivateTrafficStats();
15276 WDI_DS_ClearTrafficStats();
15277
15278 if( VOS_STATUS_SUCCESS !=
15279 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15280 {
15281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15282 "Traffic Stats Timer Stop Failed ");
15283 return;
15284 }
15285 }
15286}
15287
15288/*
15289 * Traffic Stats Timer handler
15290 */
15291void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15292{
15293 WDI_Status wdiStatus;
15294 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15295 WDI_TrafficStatsIndType trafficStatsIndParams;
15296 wpt_uint32 length, enabled;
15297 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15298
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015299 if (NULL == pMac )
15300 {
15301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15302 "%s: Invoked with invalid MAC context ", __func__ );
15303 VOS_ASSERT(0);
15304 return;
15305 }
15306
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015307 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15308 != eSIR_SUCCESS)
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15311 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15312 return;
15313 }
15314
15315 if(!enabled)
15316 {
15317 WDI_DS_DeactivateTrafficStats();
15318 return;
15319 }
15320
15321 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15322
15323 if(pWdiTrafficStats != NULL)
15324 {
15325 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15326 trafficStatsIndParams.length = length;
15327 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015328 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015329 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15330 trafficStatsIndParams.pUserData = pWDA;
15331
15332 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15333
15334 if(WDI_STATUS_PENDING == wdiStatus)
15335 {
15336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15337 "Pending received for %s:%d ",__func__,__LINE__ );
15338 }
15339 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15340 {
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15342 "Failure in %s:%d ",__func__,__LINE__ );
15343 }
15344
15345 WDI_DS_ClearTrafficStats();
15346 }
15347 else
15348 {
15349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15350 "pWdiTrafficStats is Null");
15351 }
15352
15353 if( VOS_STATUS_SUCCESS !=
15354 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15355 {
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15357 "Traffic Stats Timer Start Failed ");
15358 return;
15359 }
15360}
15361
Jeff Johnson295189b2012-06-20 16:38:30 -070015362/*
15363 * BA Activity check timer handler
15364 */
15365void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15366{
15367 tANI_U8 curSta = 0 ;
15368 tANI_U8 tid = 0 ;
15369 tANI_U8 size = 0 ;
15370 tANI_U8 baCandidateCount = 0 ;
15371 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015372 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015374 tpAniSirGlobal pMac;
15375
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015376 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015377 {
15378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015379 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015380 VOS_ASSERT(0);
15381 return ;
15382 }
15383 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15384 {
15385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15386 "Inconsistent STA entries in WDA");
15387 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015388 }
15389 if(NULL == pWDA->pVosContext)
15390 {
15391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15392 "%s: pVosContext is NULL",__func__);
15393 VOS_ASSERT(0);
15394 return ;
15395 }
15396 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015397 if(NULL == pMac)
15398 {
15399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15400 "%s: pMac is NULL",__func__);
15401 VOS_ASSERT(0);
15402 return ;
15403 }
15404
Abhishek Singh0644e482014-10-06 18:38:23 +053015405 if (wlan_cfgGetInt(pMac,
15406 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15407 eSIR_SUCCESS)
15408 {
15409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15410 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15411 val = 0;
15412 }
15413
Jeff Johnson295189b2012-06-20 16:38:30 -070015414 /* walk through all STA entries and find out TX packet count */
15415 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15416 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015417 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015418#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015419 // We can only do BA on "hard" STAs.
15420 if (!(IS_HWSTA_IDX(curSta)))
15421 {
15422 continue;
15423 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015424#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015425 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15426 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015427 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015428 tANI_U32 txPktCount = 0 ;
15429 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015430 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015431 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15432 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015433 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15434 curSta, tid, &txPktCount)))
15435 {
15436#if 0
15437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15438 "************* %d:%d, %d ",curSta, txPktCount,
15439 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15440#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015441 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15442 (currentOperChan <= SIR_11B_CHANNEL_END)))
15443 {
15444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15445 "%s: BTC disabled aggregation - dont start "
15446 "TX ADDBA req",__func__);
15447 }
15448 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015449 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015450 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15451 pWDA->wdaGlobalSystemRole) && txPktCount )
15452 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15453 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 {
15455 /* get prepare for sending message to HAL */
15456 //baCandidate[baCandidateCount].staIdx = curSta ;
15457 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15458 newBaCandidate = WDA_ENABLE_BA ;
15459 }
15460 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15461 }
15462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015463 /* fill the entry for all the sta with given TID's */
15464 if(WDA_ENABLE_BA == newBaCandidate)
15465 {
15466 /* move to next BA candidate */
15467 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15468 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15469 baCandidateCount++ ;
15470 newBaCandidate = WDA_DISABLE_BA ;
15471 }
15472 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015473 /* prepare and send message to hal */
15474 if( 0 < baCandidateCount)
15475 {
15476 WDI_Status status = WDI_STATUS_SUCCESS ;
15477 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15478 tWDA_ReqParams *pWdaParams =
15479 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015480 if(NULL == pWdaParams)
15481 {
15482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015483 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015484 VOS_ASSERT(0) ;
15485 return;
15486 }
15487 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15488 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15489 if(NULL == wdiTriggerBaReq)
15490 {
15491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 VOS_ASSERT(0) ;
15494 vos_mem_free(pWdaParams);
15495 return;
15496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015497 do
15498 {
15499 WDI_TriggerBAReqinfoType *triggerBaInfo =
15500 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15501 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15502 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15503 * for each request */
15504 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15505 triggerBaInfo->ucBASessionID = 0;
15506 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15507 } while(0) ;
15508 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015511 pWdaParams->pWdaContext = pWDA;
15512 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15513 pWdaParams->wdaMsgParam = NULL;
15514 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15515 WDA_TriggerBaReqCallback, pWdaParams) ;
15516 if(IS_WDI_STATUS_FAILURE(status))
15517 {
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15519 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15520 vos_mem_free(pWdaParams->wdaMsgParam) ;
15521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15522 vos_mem_free(pWdaParams) ;
15523 }
15524 }
15525 else
15526 {
15527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15528 "There is no TID for initiating BA");
15529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015530 if( VOS_STATUS_SUCCESS !=
15531 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15532 {
15533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15534 "BA Activity Timer Stop Failed ");
15535 return ;
15536 }
15537 if( VOS_STATUS_SUCCESS !=
15538 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15539 {
15540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15541 "BA Activity Timer Start Failed ");
15542 return;
15543 }
15544 return ;
15545}
Jeff Johnson295189b2012-06-20 16:38:30 -070015546/*
15547 * WDA common routine to create timer used by WDA.
15548 */
15549static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15550{
Jeff Johnson295189b2012-06-20 16:38:30 -070015551 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15552 tANI_U32 val = 0 ;
15553 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15554
15555 if(NULL == pMac)
15556 {
15557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015558 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 VOS_ASSERT(0);
15560 return VOS_STATUS_E_FAILURE;
15561 }
15562 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15563 != eSIR_SUCCESS)
15564 {
15565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15566 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15567 return VOS_STATUS_E_FAILURE;
15568 }
15569 val = SYS_MS_TO_TICKS(val) ;
15570
15571 /* BA activity check timer */
15572 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15573 "BA Activity Check timer", WDA_TimerHandler,
15574 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15575 if(status != TX_SUCCESS)
15576 {
15577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15578 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015579 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015582 /* Tx Complete Timeout timer */
15583 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15584 "Tx Complete Check timer", WDA_TimerHandler,
15585 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015586 if(status != TX_SUCCESS)
15587 {
15588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15589 "Unable to create Tx Complete Timeout timer");
15590 /* Destroy timer of BA activity check timer */
15591 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15592 if(status != TX_SUCCESS)
15593 {
15594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15595 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015596 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015598 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015600
15601 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15602
15603 /* Traffic Stats timer */
15604 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15605 "Traffic Stats timer", WDA_TimerHandler,
15606 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15607 if(status != TX_SUCCESS)
15608 {
15609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15610 "Unable to create traffic stats timer");
15611 /* Destroy timer of BA activity check timer */
15612 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15613 if(status != TX_SUCCESS)
15614 {
15615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15616 "Unable to Destroy BA activity timer");
15617 }
15618 /* Destroy timer of tx complete timer */
15619 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15620 if(status != TX_SUCCESS)
15621 {
15622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15623 "Unable to Tx complete timer");
15624 }
15625 return VOS_STATUS_E_FAILURE ;
15626 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015627 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015628}
Jeff Johnson295189b2012-06-20 16:38:30 -070015629/*
15630 * WDA common routine to destroy timer used by WDA.
15631 */
15632static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15633{
15634 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015635 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15636 if(status != TX_SUCCESS)
15637 {
15638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15639 "Unable to Destroy Tx Complete Timeout timer");
15640 return eSIR_FAILURE ;
15641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015642 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15643 if(status != TX_SUCCESS)
15644 {
15645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15646 "Unable to Destroy BA activity timer");
15647 return eSIR_FAILURE ;
15648 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015649 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15650 if(status != TX_SUCCESS)
15651 {
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15653 "Unable to Destroy traffic stats timer");
15654 return eSIR_FAILURE ;
15655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015656 return eSIR_SUCCESS ;
15657}
Jeff Johnson295189b2012-06-20 16:38:30 -070015658/*
15659 * WDA timer handler.
15660 */
15661void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15662{
15663 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15664 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 /*
15666 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15667 */
15668 wdaMsg.type = timerInfo ;
15669 wdaMsg.bodyptr = NULL;
15670 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015671 /* post the message.. */
15672 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15673 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15674 {
15675 vosStatus = VOS_STATUS_E_BADMSG;
15676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015677}
Jeff Johnson295189b2012-06-20 16:38:30 -070015678/*
15679 * WDA Tx Complete timeout Indication.
15680 */
15681void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15682{
15683 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015684 tpSirTxBdStatus txBdStatus = {0};
15685
Jeff Johnson295189b2012-06-20 16:38:30 -070015686 if( pWDA->pAckTxCbFunc )
15687 {
15688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015689 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053015690 /*Indicate failure*/
15691 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015692 pWDA->pAckTxCbFunc = NULL;
15693 }
15694 else
15695 {
15696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015697 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015699}
Jeff Johnson295189b2012-06-20 16:38:30 -070015700/*
15701 * WDA Set REG Domain to VOS NV
15702 */
Abhishek Singha306a442013-11-07 18:39:01 +053015703eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15704 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015705{
Abhishek Singha306a442013-11-07 18:39:01 +053015706 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015707 {
15708 return eHAL_STATUS_INVALID_PARAMETER;
15709 }
15710 return eHAL_STATUS_SUCCESS;
15711}
Jeff Johnson295189b2012-06-20 16:38:30 -070015712
Jeff Johnson295189b2012-06-20 16:38:30 -070015713#ifdef FEATURE_WLAN_SCAN_PNO
15714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015715 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 *
15717 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015718void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015719{
15720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015721 tSirPNOScanReq *pPNOScanReqParams;
15722
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015724 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015725 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015726 {
15727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015728 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015729 VOS_ASSERT(0) ;
15730 return ;
15731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015732
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015733 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15734 if(pPNOScanReqParams->statusCallback)
15735 {
15736 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15737 (status == WDI_STATUS_SUCCESS) ?
15738 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15739 }
15740
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015741 if (pPNOScanReqParams->enable == 1)
15742 {
15743 if (pPNOScanReqParams->aNetworks)
15744 vos_mem_free(pPNOScanReqParams->aNetworks);
15745 if (pPNOScanReqParams->p24GProbeTemplate)
15746 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15747 if (pPNOScanReqParams->p5GProbeTemplate)
15748 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15749 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15751 vos_mem_free(pWdaParams->wdaMsgParam);
15752 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015753
15754 return ;
15755}
Jeff Johnson295189b2012-06-20 16:38:30 -070015756/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015757 * FUNCTION: WDA_PNOScanReqCallback
15758 * Free memory.
15759 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15760 */
15761void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015762{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015764 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015765
15766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15767 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15768
15769 if(NULL == pWdaParams)
15770 {
15771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15772 "%s: pWdaParams received NULL", __func__);
15773 VOS_ASSERT(0);
15774 return;
15775 }
15776
15777 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15778 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015779 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15780 if(pPNOScanReqParams->statusCallback)
15781 {
15782 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15783 VOS_STATUS_E_FAILURE);
15784 }
15785
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015786 if (pPNOScanReqParams->enable == 1)
15787 {
15788 if (pPNOScanReqParams->aNetworks)
15789 vos_mem_free(pPNOScanReqParams->aNetworks);
15790 if (pPNOScanReqParams->p24GProbeTemplate)
15791 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15792 if (pPNOScanReqParams->p5GProbeTemplate)
15793 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15796 vos_mem_free(pWdaParams->wdaMsgParam);
15797 vos_mem_free(pWdaParams);
15798 }
15799
15800 return;
15801}
15802/*
15803 * FUNCTION: WDA_UpdateScanParamsRespCallback
15804 *
15805 */
15806void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15807{
15808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015810 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015811 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015812 {
15813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015815 VOS_ASSERT(0) ;
15816 return ;
15817 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015818
15819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15820 vos_mem_free(pWdaParams->wdaMsgParam);
15821 vos_mem_free(pWdaParams);
15822
Jeff Johnson295189b2012-06-20 16:38:30 -070015823 return ;
15824}
Jeff Johnson295189b2012-06-20 16:38:30 -070015825/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015826 * FUNCTION: WDA_UpdateScanParamsReqCallback
15827 * Free memory.
15828 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15829 */
15830void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15831{
15832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15833
15834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15835 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15836
15837 if(NULL == pWdaParams)
15838 {
15839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15840 "%s: pWdaParams received NULL", __func__);
15841 VOS_ASSERT(0);
15842 return;
15843 }
15844
15845 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15846 {
15847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15848 vos_mem_free(pWdaParams->wdaMsgParam);
15849 vos_mem_free(pWdaParams);
15850 }
15851
15852 return;
15853}
15854/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015855 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15856 * Request to WDI to set Preferred Network List.Offload
15857 */
15858VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15859 tSirPNOScanReq *pPNOScanReqParams)
15860{
Jeff Johnson43971f52012-07-17 12:26:56 -070015861 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015862 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15863 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15864 tWDA_ReqParams *pWdaParams ;
15865 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015867 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015868 if(NULL == pwdiPNOScanReqInfo)
15869 {
15870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015872 VOS_ASSERT(0);
15873 return VOS_STATUS_E_NOMEM;
15874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015875 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15876 if(NULL == pWdaParams)
15877 {
15878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015879 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015880 VOS_ASSERT(0);
15881 vos_mem_free(pwdiPNOScanReqInfo);
15882 return VOS_STATUS_E_NOMEM;
15883 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015884 //
15885 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15886 //
15887 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15888 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015889 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15890 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15891 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015892 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15893 {
15894 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15895 &pPNOScanReqParams->aNetworks[i],
15896 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15897 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015898 /*Scan timer intervals*/
15899 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15900 &pPNOScanReqParams->scanTimers,
15901 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015902 /*Probe template for 2.4GHz band*/
15903 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15904 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15905 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015906 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15907 pPNOScanReqParams->p24GProbeTemplate,
15908 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015909 /*Probe template for 5GHz band*/
15910 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15911 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15912 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015913 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15914 pPNOScanReqParams->p5GProbeTemplate,
15915 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015916 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15917 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015918
Jeff Johnson295189b2012-06-20 16:38:30 -070015919 /* Store Params pass it to WDI */
15920 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15921 pWdaParams->pWdaContext = pWDA;
15922 /* Store param pointer as passed in by caller */
15923 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015924 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015925 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015926 if(IS_WDI_STATUS_FAILURE(status))
15927 {
15928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15929 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015930 if(pPNOScanReqParams->statusCallback)
15931 {
15932 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15933 VOS_STATUS_E_FAILURE);
15934 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015935 if (pPNOScanReqParams->enable == 1)
15936 {
15937 if (pPNOScanReqParams->aNetworks)
15938 vos_mem_free(pPNOScanReqParams->aNetworks);
15939 if (pPNOScanReqParams->p24GProbeTemplate)
15940 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15941 if (pPNOScanReqParams->p5GProbeTemplate)
15942 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15945 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015946
Jeff Johnson295189b2012-06-20 16:38:30 -070015947 pWdaParams->wdaWdiApiMsgParam = NULL;
15948 pWdaParams->wdaMsgParam = NULL;
15949 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015950 return CONVERT_WDI2VOS_STATUS(status) ;
15951}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015952
15953#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15954
15955void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15956{
15957 /*Convert the CSR Auth types to WDI Auth types */
15958 switch (csrAuthType)
15959 {
15960 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15961 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15962 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015963#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015964 case eCSR_AUTH_TYPE_CCKM_WPA:
15965 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15966 break;
15967#endif
15968 case eCSR_AUTH_TYPE_WPA:
15969 *AuthType = eWDA_AUTH_TYPE_WPA;
15970 break;
15971 case eCSR_AUTH_TYPE_WPA_PSK:
15972 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15973 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015974#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015975 case eCSR_AUTH_TYPE_CCKM_RSN:
15976 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15977 break;
15978#endif
15979 case eCSR_AUTH_TYPE_RSN:
15980 *AuthType = eWDA_AUTH_TYPE_RSN;
15981 break;
15982 case eCSR_AUTH_TYPE_RSN_PSK:
15983 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15984 break;
15985#if defined WLAN_FEATURE_VOWIFI_11R
15986 case eCSR_AUTH_TYPE_FT_RSN:
15987 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15988 break;
15989 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15990 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15991 break;
15992#endif
15993#ifdef FEATURE_WLAN_WAPI
15994 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15995 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15996 break;
15997 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15998 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15999 break;
16000#endif /* FEATURE_WLAN_WAPI */
16001 case eCSR_AUTH_TYPE_SHARED_KEY:
16002 case eCSR_AUTH_TYPE_AUTOSWITCH:
16003 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
16004 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053016005#ifdef WLAN_FEATURE_11W
16006 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
16007 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016008 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053016009 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
16010 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
16011 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016012#endif
16013 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053016014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016015 "%s: Unknown Auth Type", __func__);
16016 break;
16017 }
16018}
16019void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
16020{
16021 switch (csrEncrType)
16022 {
16023 case eCSR_ENCRYPT_TYPE_NONE:
16024 *EncrType = WDI_ED_NONE;
16025 break;
16026 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
16027 case eCSR_ENCRYPT_TYPE_WEP40:
16028 *EncrType = WDI_ED_WEP40;
16029 break;
16030 case eCSR_ENCRYPT_TYPE_WEP104:
16031 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
16032 *EncrType = WDI_ED_WEP104;
16033 break;
16034 case eCSR_ENCRYPT_TYPE_TKIP:
16035 *EncrType = WDI_ED_TKIP;
16036 break;
16037 case eCSR_ENCRYPT_TYPE_AES:
16038 *EncrType = WDI_ED_CCMP;
16039 break;
16040#ifdef WLAN_FEATURE_11W
16041 case eCSR_ENCRYPT_TYPE_AES_CMAC:
16042 *EncrType = WDI_ED_AES_128_CMAC;
16043 break;
16044#endif
16045#ifdef FEATURE_WLAN_WAPI
16046 case eCSR_ENCRYPT_TYPE_WPI:
16047 *EncrType = WDI_ED_WPI;
16048 break;
16049#endif
16050 case eCSR_ENCRYPT_TYPE_ANY:
16051 *EncrType = WDI_ED_ANY;
16052 break;
16053
16054 default:
16055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16056 "%s: Unknown Encryption Type", __func__);
16057 break;
16058 }
16059}
16060
16061/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016062 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016063 * Request to WDI to set Roam Offload Scan
16064 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016065VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016066 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
16067{
16068 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016069 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
16070 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016071 tWDA_ReqParams *pWdaParams ;
16072 v_U8_t csrAuthType;
16073 WDI_RoamNetworkType *pwdiRoamNetworkType;
16074 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
16075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16076 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016077 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016078 {
16079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16080 "%s: VOS MEM Alloc Failure", __func__);
16081 VOS_ASSERT(0);
16082 return VOS_STATUS_E_NOMEM;
16083 }
16084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16085 if (NULL == pWdaParams)
16086 {
16087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16088 "%s: VOS MEM Alloc Failure", __func__);
16089 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016090 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016091 return VOS_STATUS_E_NOMEM;
16092 }
16093
16094 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016095 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016096 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016097 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
16098 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016099 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
16100 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16101 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16102 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16103 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16104 sizeof(pwdiRoamNetworkType->currAPbssid));
16105 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16106 csrAuthType);
16107 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16108 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16109 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16110 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16111 pwdiRoamOffloadScanInfo->LookupThreshold =
16112 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016113 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16114 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016115 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16116 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016117 pwdiRoamOffloadScanInfo->MAWCEnabled =
16118 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016119 pwdiRoamOffloadScanInfo->Command =
16120 pRoamOffloadScanReqParams->Command ;
16121 pwdiRoamOffloadScanInfo->StartScanReason =
16122 pRoamOffloadScanReqParams->StartScanReason ;
16123 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16124 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16125 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16126 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16127 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16128 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16129 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16130 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16131 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16132 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016133 pwdiRoamOffloadScanInfo->IsESEEnabled =
16134 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016135 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16136 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16137 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16138 pwdiRoamNetworkType->ssId.ucLength =
16139 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16140 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16141 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16142 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16143 pwdiRoamNetworkType->ChannelCount =
16144 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16145 pwdiRoamOffloadScanInfo->ChannelCacheType =
16146 pRoamOffloadScanReqParams->ChannelCacheType;
16147 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16148 pRoamOffloadScanReqParams->ValidChannelList,
16149 pRoamOffloadScanReqParams->ValidChannelCount);
16150 pwdiRoamOffloadScanInfo->ValidChannelCount =
16151 pRoamOffloadScanReqParams->ValidChannelCount;
16152 pwdiRoamOffloadScanInfo->us24GProbeSize =
16153 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16154 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16155 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16156 pRoamOffloadScanReqParams->p24GProbeTemplate,
16157 pwdiRoamOffloadScanInfo->us24GProbeSize);
16158 pwdiRoamOffloadScanInfo->us5GProbeSize =
16159 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16160 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16161 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16162 pRoamOffloadScanReqParams->p5GProbeTemplate,
16163 pwdiRoamOffloadScanInfo->us5GProbeSize);
16164 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16165 pRoamOffloadScanReqParams->MDID.mdiePresent;
16166 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16167 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016168 pwdiRoamOffloadScanInfo->nProbes =
16169 pRoamOffloadScanReqParams->nProbes;
16170 pwdiRoamOffloadScanInfo->HomeAwayTime =
16171 pRoamOffloadScanReqParams->HomeAwayTime;
16172 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016173 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016174 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016175 pWdaParams->pWdaContext = pWDA;
16176 /* Store param pointer as passed in by caller */
16177 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016178 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016179 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16180 if(IS_WDI_STATUS_FAILURE(status))
16181 {
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16183 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16185 vos_mem_free(pWdaParams->wdaMsgParam);
16186 pWdaParams->wdaWdiApiMsgParam = NULL;
16187 pWdaParams->wdaMsgParam = NULL;
16188 }
16189 return CONVERT_WDI2VOS_STATUS(status) ;
16190}
16191#endif
16192
Jeff Johnson295189b2012-06-20 16:38:30 -070016193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016194 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016195 *
16196 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016197void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016198{
16199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16200
16201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016202 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016203
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016204 if(NULL == pWdaParams)
16205 {
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016207 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016208 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016209 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016210 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016211
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 vos_mem_free(pWdaParams->wdaMsgParam) ;
16213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16214 vos_mem_free(pWdaParams) ;
16215
16216 return ;
16217}
16218/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016219 * FUNCTION: WDA_RssiFilterReqCallback
16220 * Free memory.
16221 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16222 */
16223void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16224{
16225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16226
16227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16228 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16229
16230 if(NULL == pWdaParams)
16231 {
16232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16233 "%s: pWdaParams received NULL", __func__);
16234 VOS_ASSERT(0);
16235 return;
16236 }
16237
16238 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16239 {
16240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16241 vos_mem_free(pWdaParams->wdaMsgParam);
16242 vos_mem_free(pWdaParams);
16243 }
16244
16245 return;
16246}
16247/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016248 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016249 * Request to WDI to set Preferred Network List.Offload
16250 */
16251VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16252 tSirSetRSSIFilterReq* pRssiFilterParams)
16253{
Jeff Johnson43971f52012-07-17 12:26:56 -070016254 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016255 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16256 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16257 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 if(NULL == pwdiSetRssiFilterReqInfo)
16261 {
16262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 VOS_ASSERT(0);
16265 return VOS_STATUS_E_NOMEM;
16266 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16268 if(NULL == pWdaParams)
16269 {
16270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016272 VOS_ASSERT(0);
16273 vos_mem_free(pwdiSetRssiFilterReqInfo);
16274 return VOS_STATUS_E_NOMEM;
16275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016276 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016277 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16278 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016279
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 /* Store Params pass it to WDI */
16281 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16282 pWdaParams->pWdaContext = pWDA;
16283 /* Store param pointer as passed in by caller */
16284 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016285 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016286 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016287 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016288 if(IS_WDI_STATUS_FAILURE(status))
16289 {
16290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16291 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16293 vos_mem_free(pWdaParams->wdaMsgParam);
16294 pWdaParams->wdaWdiApiMsgParam = NULL;
16295 pWdaParams->wdaMsgParam = NULL;
16296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016297 return CONVERT_WDI2VOS_STATUS(status) ;
16298}
16299
Jeff Johnson295189b2012-06-20 16:38:30 -070016300/*
16301 * FUNCTION: WDA_ProcessUpdateScanParams
16302 * Request to WDI to update Scan Parameters
16303 */
16304VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16305 tSirUpdateScanParams *pUpdateScanParams)
16306{
Jeff Johnson43971f52012-07-17 12:26:56 -070016307 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016308 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16309 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16310 sizeof(WDI_UpdateScanParamsInfoType)) ;
16311 tWDA_ReqParams *pWdaParams ;
16312 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016314 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 if(NULL == wdiUpdateScanParamsInfoType)
16316 {
16317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016319 VOS_ASSERT(0);
16320 return VOS_STATUS_E_NOMEM;
16321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16323 if ( NULL == pWdaParams )
16324 {
16325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016327 VOS_ASSERT(0);
16328 vos_mem_free(wdiUpdateScanParamsInfoType);
16329 return VOS_STATUS_E_NOMEM;
16330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016331 //
16332 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16333 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16335 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16336 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16337 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016338 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016339 pUpdateScanParams->b11dEnabled,
16340 pUpdateScanParams->b11dResolved,
16341 pUpdateScanParams->ucChannelCount,
16342 pUpdateScanParams->usPassiveMinChTime,
16343 pUpdateScanParams->usPassiveMaxChTime,
16344 pUpdateScanParams->usActiveMinChTime,
16345 pUpdateScanParams->usActiveMaxChTime,
16346 sizeof(tSirUpdateScanParams),
16347 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16348
Jeff Johnson295189b2012-06-20 16:38:30 -070016349 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16350 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016351 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16352 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016353 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16354 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016355 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16356 pUpdateScanParams->usActiveMaxChTime;
16357 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16358 pUpdateScanParams->usActiveMinChTime;
16359 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16360 pUpdateScanParams->usPassiveMaxChTime;
16361 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16362 pUpdateScanParams->usPassiveMinChTime;
16363
Jeff Johnson295189b2012-06-20 16:38:30 -070016364 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016365 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16366 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016367
Jeff Johnson295189b2012-06-20 16:38:30 -070016368 for ( i = 0; i <
16369 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16370 i++)
16371 {
16372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16373 "Update Scan Parameters channel: %d",
16374 pUpdateScanParams->aChannels[i]);
16375
16376 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16377 pUpdateScanParams->aChannels[i];
16378 }
16379
Yue Ma7f44bbe2013-04-12 11:47:39 -070016380 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16381 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016382
Jeff Johnson295189b2012-06-20 16:38:30 -070016383 /* Store Params pass it to WDI */
16384 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16385 pWdaParams->pWdaContext = pWDA;
16386 /* Store param pointer as passed in by caller */
16387 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016388
Jeff Johnson295189b2012-06-20 16:38:30 -070016389
16390
16391 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016392 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016393 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 if(IS_WDI_STATUS_FAILURE(status))
16395 {
16396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16397 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16399 vos_mem_free(pWdaParams->wdaMsgParam);
16400 vos_mem_free(pWdaParams);
16401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016402 return CONVERT_WDI2VOS_STATUS(status) ;
16403}
16404#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016405
16406#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16407/*
16408 * FUNCTION: WDA_RoamOffloadScanReqCallback
16409 *
16410 */
16411void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16412{
16413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016414 vos_msg_t vosMsg;
16415 wpt_uint8 reason = 0;
16416
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016418 "<------ %s " ,__func__);
16419 if (NULL == pWdaParams)
16420 {
16421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16422 "%s: pWdaParams received NULL", __func__);
16423 VOS_ASSERT(0) ;
16424 return ;
16425 }
16426 if ( pWdaParams != NULL )
16427 {
16428 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16429 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016430 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16432 }
16433 if ( pWdaParams->wdaMsgParam != NULL)
16434 {
16435 vos_mem_free(pWdaParams->wdaMsgParam);
16436 }
16437
16438 vos_mem_free(pWdaParams) ;
16439 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016440 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16441 vosMsg.bodyptr = NULL;
16442 if (WDI_STATUS_SUCCESS != status)
16443 {
16444 reason = 0;
16445 }
16446 vosMsg.bodyval = reason;
16447 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16448 {
16449 /* free the mem and return */
16450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016451 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016452 }
16453
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016454 return ;
16455}
16456#endif
16457
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016459 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016460 *
16461 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016462void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016463{
16464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16465
16466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16467 "<------ %s " ,__func__);
16468
16469 if(NULL == pWdaParams)
16470 {
16471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16472 "%s: pWdaParams received NULL", __func__);
16473 VOS_ASSERT(0);
16474 return;
16475 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016476
16477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16478 vos_mem_free(pWdaParams->wdaMsgParam);
16479 vos_mem_free(pWdaParams);
16480
16481 return;
16482}
16483/*
16484 * FUNCTION: WDA_SetPowerParamsReqCallback
16485 * Free memory.
16486 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16487 */
16488void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16489{
16490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16491
16492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16493 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16494
16495 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016496 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16498 "%s: pWdaParams received NULL", __func__);
16499 VOS_ASSERT(0);
16500 return;
16501 }
16502
16503 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16504 {
16505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16506 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016507 vos_mem_free(pWdaParams);
16508 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016509
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016510 return;
16511}
16512
Jeff Johnson295189b2012-06-20 16:38:30 -070016513#ifdef WLAN_FEATURE_PACKET_FILTERING
16514/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016515 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016516 *
16517 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016518void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016519 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16520 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016521{
16522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016525 if(NULL == pWdaParams)
16526 {
16527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016529 VOS_ASSERT(0) ;
16530 return ;
16531 }
16532
16533 vos_mem_free(pWdaParams->wdaMsgParam) ;
16534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16535 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016536 //print a msg, nothing else to do
16537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016538 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016539 return ;
16540}
Jeff Johnson295189b2012-06-20 16:38:30 -070016541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016542 * FUNCTION: WDA_8023MulticastListReqCallback
16543 * Free memory.
16544 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16545 */
16546void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16547{
16548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16549
16550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16551 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16552
16553 if(NULL == pWdaParams)
16554 {
16555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16556 "%s: pWdaParams received NULL", __func__);
16557 VOS_ASSERT(0);
16558 return;
16559 }
16560
16561 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16562 {
16563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16564 vos_mem_free(pWdaParams->wdaMsgParam);
16565 vos_mem_free(pWdaParams);
16566 }
16567
16568 return;
16569}
16570/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016571 * FUNCTION: WDA_Process8023MulticastListReq
16572 * Request to WDI to add 8023 Multicast List
16573 */
16574VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16575 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16576{
Jeff Johnson43971f52012-07-17 12:26:56 -070016577 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016578 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16579 tWDA_ReqParams *pWdaParams ;
16580 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016582 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016583 pwdiFltPktSetMcListReqParamsType =
16584 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16585 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16586 ) ;
16587 if(NULL == pwdiFltPktSetMcListReqParamsType)
16588 {
16589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016591 return VOS_STATUS_E_NOMEM;
16592 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16594 if(NULL == pWdaParams)
16595 {
16596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016598 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16599 return VOS_STATUS_E_NOMEM;
16600 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016601
Jeff Johnson295189b2012-06-20 16:38:30 -070016602 //
16603 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16604 //
16605 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016606 pRcvFltMcAddrList->ulMulticastAddrCnt;
16607
16608 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16609 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16610 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16611 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16612
Jeff Johnson295189b2012-06-20 16:38:30 -070016613 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16614 {
16615 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16616 &(pRcvFltMcAddrList->multicastAddr[i]),
16617 sizeof(tSirMacAddr));
16618 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016619 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16620 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016621
Jeff Johnson295189b2012-06-20 16:38:30 -070016622 /* Store Params pass it to WDI */
16623 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16624 pWdaParams->pWdaContext = pWDA;
16625 /* Store param pointer as passed in by caller */
16626 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016627 status = WDI_8023MulticastListReq(
16628 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016629 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016630 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016631 if(IS_WDI_STATUS_FAILURE(status))
16632 {
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16634 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16636 vos_mem_free(pWdaParams->wdaMsgParam);
16637 vos_mem_free(pWdaParams);
16638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016639 return CONVERT_WDI2VOS_STATUS(status) ;
16640}
Jeff Johnson295189b2012-06-20 16:38:30 -070016641/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016642 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016643 *
16644 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016645void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016646 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16647 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016648{
16649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016651 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016652 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016653 if(NULL == pWdaParams)
16654 {
16655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016656 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016657 VOS_ASSERT(0) ;
16658 return ;
16659 }
16660
16661 vos_mem_free(pWdaParams->wdaMsgParam) ;
16662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16663 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016664 //print a msg, nothing else to do
16665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016666 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016667 return ;
16668}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016669
16670/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016671 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16672 * Free memory.
16673 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016674 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016675void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016676 void* pUserData)
16677{
16678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16679
16680 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16681 "<------ %s, wdiStatus: %d",
16682 __func__, wdiStatus);
16683
16684 if (NULL == pWdaParams)
16685 {
16686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16687 "%s: Invalid pWdaParams pointer", __func__);
16688 VOS_ASSERT(0);
16689 return;
16690 }
16691
16692 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16693 {
16694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16695 vos_mem_free(pWdaParams->wdaMsgParam);
16696 vos_mem_free(pWdaParams);
16697 }
16698
16699 return;
16700}
16701
Jeff Johnson295189b2012-06-20 16:38:30 -070016702/*
16703 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16704 * Request to WDI to set Receive Filters
16705 */
16706VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16707 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16708{
Jeff Johnson43971f52012-07-17 12:26:56 -070016709 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016710 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16711 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16712 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16713 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16714 tWDA_ReqParams *pWdaParams ;
16715 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16719 {
16720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016722 VOS_ASSERT(0);
16723 return VOS_STATUS_E_NOMEM;
16724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16726 if(NULL == pWdaParams)
16727 {
16728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016730 VOS_ASSERT(0);
16731 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16732 return VOS_STATUS_E_NOMEM;
16733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016734 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16735 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16736 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16737 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016738 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16739 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16740
16741 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16742 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016743
16744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16745 "FID %d FT %d NParams %d CT %d",
16746 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16747 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16748 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16749 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016750 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16751 {
16752 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16753 &pRcvPktFilterCfg->paramsData[i],
16754 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016756 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016757 pwdiSetRcvPktFilterReqParamsType->
16758 wdiPktFilterCfg.paramsData[i].protocolLayer,
16759 pwdiSetRcvPktFilterReqParamsType->
16760 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016762 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016763 pwdiSetRcvPktFilterReqParamsType->
16764 wdiPktFilterCfg.paramsData[i].dataOffset,
16765 pwdiSetRcvPktFilterReqParamsType->
16766 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016768 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016769 pwdiSetRcvPktFilterReqParamsType->
16770 wdiPktFilterCfg.paramsData[i].compareData[0],
16771 pwdiSetRcvPktFilterReqParamsType->
16772 wdiPktFilterCfg.paramsData[i].compareData[1],
16773 pwdiSetRcvPktFilterReqParamsType->
16774 wdiPktFilterCfg.paramsData[i].compareData[2],
16775 pwdiSetRcvPktFilterReqParamsType->
16776 wdiPktFilterCfg.paramsData[i].compareData[3],
16777 pwdiSetRcvPktFilterReqParamsType->
16778 wdiPktFilterCfg.paramsData[i].compareData[4],
16779 pwdiSetRcvPktFilterReqParamsType->
16780 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016782 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016783 pwdiSetRcvPktFilterReqParamsType->
16784 wdiPktFilterCfg.paramsData[i].dataMask[0],
16785 pwdiSetRcvPktFilterReqParamsType->
16786 wdiPktFilterCfg.paramsData[i].dataMask[1],
16787 pwdiSetRcvPktFilterReqParamsType->
16788 wdiPktFilterCfg.paramsData[i].dataMask[2],
16789 pwdiSetRcvPktFilterReqParamsType->
16790 wdiPktFilterCfg.paramsData[i].dataMask[3],
16791 pwdiSetRcvPktFilterReqParamsType->
16792 wdiPktFilterCfg.paramsData[i].dataMask[4],
16793 pwdiSetRcvPktFilterReqParamsType->
16794 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016795 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016796 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016797 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016798 /* Store Params pass it to WDI */
16799 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16800 pWdaParams->pWdaContext = pWDA;
16801 /* Store param pointer as passed in by caller */
16802 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016803 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016804 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016805 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016806 if(IS_WDI_STATUS_FAILURE(status))
16807 {
16808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16809 "Failure in SetFilter(),free all the memory,status %d ",status);
16810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16811 vos_mem_free(pWdaParams->wdaMsgParam);
16812 vos_mem_free(pWdaParams);
16813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016814 return CONVERT_WDI2VOS_STATUS(status) ;
16815}
Jeff Johnson295189b2012-06-20 16:38:30 -070016816/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016817 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016818 *
16819 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016820void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016821 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16822 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016823{
16824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16825 tWDA_CbContext *pWDA;
16826 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16827 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16828 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16829 tANI_U8 i;
16830 vos_msg_t vosMsg;
16831
16832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016834 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16835
Jeff Johnsone7245742012-09-05 17:12:55 -070016836 if(NULL == pRcvFltPktMatchCntRsp)
16837 {
16838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016839 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016840 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016841 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016842 return ;
16843 }
16844
Jeff Johnson295189b2012-06-20 16:38:30 -070016845 if(NULL == pWdaParams)
16846 {
16847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016849 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016850 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016851 return ;
16852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016853 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16854 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016855 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16856 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16857
16858 /* Message Header */
16859 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16860 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16861
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016862 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016863
16864 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16865 {
16866 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16867 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016869 /* VOS message wrapper */
16870 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16871 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16872 vosMsg.bodyval = 0;
16873 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16874 {
16875 /* free the mem and return */
16876 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16877 }
16878
16879 vos_mem_free(pWdaParams->wdaMsgParam) ;
16880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16881 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016882
16883 return;
16884}
16885/*
16886 * FUNCTION: WDA_FilterMatchCountReqCallback
16887 * Free memory and send RSP back to SME.
16888 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16889 */
16890void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16891{
16892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16893 vos_msg_t vosMsg;
16894
16895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16897
16898 if(NULL == pWdaParams)
16899 {
16900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16901 "%s: pWdaParams received NULL", __func__);
16902 VOS_ASSERT(0);
16903 return;
16904 }
16905
16906 /* VOS message wrapper */
16907 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16908 vosMsg.bodyptr = NULL;
16909 vosMsg.bodyval = 0;
16910
16911 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16912 {
16913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16914 vos_mem_free(pWdaParams->wdaMsgParam);
16915 vos_mem_free(pWdaParams);
16916 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16917 }
16918
16919 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016920}
Jeff Johnson295189b2012-06-20 16:38:30 -070016921/*
16922 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16923 * Request to WDI to get PC Filter Match Count
16924 */
16925VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16926{
Jeff Johnson43971f52012-07-17 12:26:56 -070016927 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016928 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16929 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16930 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016932 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016933 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16934 {
16935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016937 VOS_ASSERT(0);
16938 return VOS_STATUS_E_NOMEM;
16939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016940 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16941 if(NULL == pWdaParams)
16942 {
16943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016945 VOS_ASSERT(0);
16946 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16947 return VOS_STATUS_E_NOMEM;
16948 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016949
Yue Ma7f44bbe2013-04-12 11:47:39 -070016950 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16951 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016952
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016953 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16954 pRcvFltPktMatchRsp->bssId,
16955 sizeof(wpt_macAddr));
16956
Jeff Johnson295189b2012-06-20 16:38:30 -070016957 /* Store Params pass it to WDI */
16958 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16959 pWdaParams->pWdaContext = pWDA;
16960 /* Store param pointer as passed in by caller */
16961 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016962 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016963 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016964 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016965 if(IS_WDI_STATUS_FAILURE(status))
16966 {
16967 /* failure returned by WDI API */
16968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16969 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16971 vos_mem_free(pWdaParams) ;
16972 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16973 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016975 return CONVERT_WDI2VOS_STATUS(status) ;
16976}
Jeff Johnson295189b2012-06-20 16:38:30 -070016977/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016978 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 *
16980 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016981void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016982 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16983 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016984{
16985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016988/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16989 if(NULL == pWdaParams)
16990 {
16991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016993 VOS_ASSERT(0) ;
16994 return ;
16995 }
16996
16997 vos_mem_free(pWdaParams->wdaMsgParam) ;
16998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16999 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017000 //print a msg, nothing else to do
17001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017002 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017003 return ;
17004}
Jeff Johnson295189b2012-06-20 16:38:30 -070017005/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017006 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
17007 * Free memory.
17008 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
17009 */
17010void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17011{
17012 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17013
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17015 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17016
17017 if(NULL == pWdaParams)
17018 {
17019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17020 "%s: Invalid pWdaParams pointer", __func__);
17021 VOS_ASSERT(0);
17022 return;
17023 }
17024
17025 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17026 {
17027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17028 vos_mem_free(pWdaParams->wdaMsgParam);
17029 vos_mem_free(pWdaParams);
17030 }
17031
17032 return;
17033}
17034/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017035 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
17036 * Request to WDI to clear Receive Filters
17037 */
17038VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
17039 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
17040{
Jeff Johnson43971f52012-07-17 12:26:56 -070017041 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017042 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
17043 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
17044 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017047 if(NULL == pwdiRcvFltPktClearReqParamsType)
17048 {
17049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017051 VOS_ASSERT(0);
17052 return VOS_STATUS_E_NOMEM;
17053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17055 if(NULL == pWdaParams)
17056 {
17057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017059 VOS_ASSERT(0);
17060 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
17061 return VOS_STATUS_E_NOMEM;
17062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017063 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
17064 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070017065 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
17066 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
17067 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
17068 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017069
Yue Ma7f44bbe2013-04-12 11:47:39 -070017070 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017071 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017072 /* Store Params pass it to WDI */
17073 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
17074 pWdaParams->pWdaContext = pWDA;
17075 /* Store param pointer as passed in by caller */
17076 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070017077 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017078 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017079 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017080 if(IS_WDI_STATUS_FAILURE(status))
17081 {
17082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17083 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
17084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080017085 vos_mem_free(pWdaParams->wdaMsgParam);
17086 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017088 return CONVERT_WDI2VOS_STATUS(status) ;
17089}
17090#endif // WLAN_FEATURE_PACKET_FILTERING
17091
Jeff Johnson295189b2012-06-20 16:38:30 -070017092/*
17093 * FUNCTION: WDA_ProcessSetPowerParamsReq
17094 * Request to WDI to set power params
17095 */
17096VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
17097 tSirSetPowerParamsReq *pPowerParams)
17098{
Jeff Johnson43971f52012-07-17 12:26:56 -070017099 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017100 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17101 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017102 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017105 if(NULL == pwdiSetPowerParamsReqInfo)
17106 {
17107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 VOS_ASSERT(0);
17110 return VOS_STATUS_E_NOMEM;
17111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17113 if(NULL == pWdaParams)
17114 {
17115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017117 VOS_ASSERT(0);
17118 vos_mem_free(pwdiSetPowerParamsReqInfo);
17119 return VOS_STATUS_E_NOMEM;
17120 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017121
Jeff Johnson295189b2012-06-20 16:38:30 -070017122
17123 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17124 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017125 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17126 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017127 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17128 pPowerParams->uListenInterval;
17129 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17130 pPowerParams->uBcastMcastFilter;
17131 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17132 pPowerParams->uEnableBET;
17133 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17134 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017135 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17136 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017137 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17138 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017139
Jeff Johnson295189b2012-06-20 16:38:30 -070017140 /* Store Params pass it to WDI */
17141 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17142 pWdaParams->pWdaContext = pWDA;
17143 /* Store param pointer as passed in by caller */
17144 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017145 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017146 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017147 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017148 if(IS_WDI_STATUS_FAILURE(status))
17149 {
17150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17151 "Failure in Set power params REQ WDI API, free all the memory " );
17152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17153 vos_mem_free(pWdaParams->wdaMsgParam);
17154 pWdaParams->wdaWdiApiMsgParam = NULL;
17155 pWdaParams->wdaMsgParam = NULL;
17156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017157 return CONVERT_WDI2VOS_STATUS(status) ;
17158}
17159
17160/*
17161 * FUNCTION: WDA_SetTmLevelRspCallback
17162 * Set TM Level response
17163 */
17164void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17165{
17166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17167
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017170
17171 if(NULL == pWdaParams)
17172 {
17173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017174 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017175 VOS_ASSERT(0) ;
17176 return ;
17177 }
17178
17179 /* Dose not need to send notification to upper layer
17180 * Just free allocated resources */
17181 if( pWdaParams != NULL )
17182 {
17183 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17184 {
17185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17186 }
17187 vos_mem_free(pWdaParams->wdaMsgParam) ;
17188 vos_mem_free(pWdaParams) ;
17189 }
17190}
17191
17192/*
17193 * FUNCTION: WDA_ProcessSetTmLevelReq
17194 * Set TM Level request
17195 */
17196VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17197 tAniSetTmLevelReq *setTmLevelReq)
17198{
17199 WDI_Status status = WDI_STATUS_SUCCESS ;
17200 tWDA_ReqParams *pWdaParams ;
17201 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17202 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17203 sizeof(WDI_SetTmLevelReqType)) ;
17204 if(NULL == wdiSetTmLevelReq)
17205 {
17206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017208 VOS_ASSERT(0);
17209 return VOS_STATUS_E_NOMEM;
17210 }
17211
17212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17213 if(NULL == pWdaParams)
17214 {
17215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017217 VOS_ASSERT(0);
17218 vos_mem_free(wdiSetTmLevelReq);
17219 return VOS_STATUS_E_NOMEM;
17220 }
17221
17222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017224
17225 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17226 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17227
17228 pWdaParams->pWdaContext = pWDA;
17229 pWdaParams->wdaMsgParam = setTmLevelReq;
17230 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17231
17232 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17233 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17234
17235 if(IS_WDI_STATUS_FAILURE(status))
17236 {
17237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017238 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017239 vos_mem_free(pWdaParams->wdaMsgParam) ;
17240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17241 vos_mem_free(pWdaParams) ;
17242 }
17243
17244 return CONVERT_WDI2VOS_STATUS(status) ;
17245}
17246
17247VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17248 tpTxControlParams pTxCtrlParam)
17249{
17250 VOS_STATUS wdaStatus;
17251
17252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017254 if( pTxCtrlParam == NULL )
17255 {
17256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017257 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017258 return VOS_STATUS_E_FAILURE;
17259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017260 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17261 {
17262 wdaStatus = WDA_SuspendDataTx(pWDA);
17263 }
17264 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17265 {
17266 wdaStatus = WDA_ResumeDataTx(pWDA);
17267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017268 return wdaStatus;
17269}
17270
Mihir Shete5affadc2015-05-29 20:54:57 +053017271void WDA_FWLoggingDXEdoneInd(void)
17272{
17273 WDI_FWLoggingDXEdoneInd(NULL);
17274}
17275
Jeff Johnson295189b2012-06-20 16:38:30 -070017276 /* FUNCTION WDA_featureCapsExchange
17277 * WDA API to invoke capability exchange between host and FW.
17278 */
17279void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17280{
17281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017282 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017283 WDI_featureCapsExchangeReq( NULL, pVosContext);
17284}
17285
Yathish9f22e662012-12-10 14:21:35 -080017286/* FUNCTION WDA_disableCapablityFeature
17287 * WDA API to diable Active mode offload in host.
17288 */
17289void WDA_disableCapablityFeature(tANI_U8 feature_index)
17290{
17291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17292 "%s:enter", __func__ );
17293 WDI_disableCapablityFeature(feature_index);
17294}
17295
Jeff Johnson295189b2012-06-20 16:38:30 -070017296 /* FUNCTION WDA_getHostWlanFeatCaps
17297 * Wrapper for WDI API, that will return if the feature (enum value).passed
17298 * to this API is supported or not in Host
17299 * return value
17300 * 0 - implies feature is NOT Supported
17301 * any non zero value - implies feature is SUPPORTED
17302 */
17303tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17304{
17305 return WDI_getHostWlanFeatCaps(featEnumValue);
17306}
17307
17308 /* FUNCTION WDA_getFwWlanFeatCaps
17309 * Wrapper for WDI API, that will return if the feature (enum value).passed
17310 * to this API is supported or not in FW
17311 * return value
17312 * 0 - implies feature is NOT Supported
17313 * any non zero value - implies feature is SUPPORTED
17314 */
17315tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17316{
17317 return WDI_getFwWlanFeatCaps(featEnumValue);
17318}
17319
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017320
Jeff Johnson295189b2012-06-20 16:38:30 -070017321/*
17322 * FUNCTION: WDA_shutdown
17323 * Shutdown WDA/WDI without handshaking with Riva.
17324 * Synchronous function.
17325 */
17326VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17327{
17328 WDI_Status wdiStatus;
17329 //tANI_U8 eventIdx = 0;
17330 VOS_STATUS status = VOS_STATUS_SUCCESS;
17331 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017332 if (NULL == pWDA)
17333 {
17334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017335 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017336 VOS_ASSERT(0);
17337 return VOS_STATUS_E_FAILURE;
17338 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017339 /* FTM mode stay START_STATE */
17340 if( (WDA_READY_STATE != pWDA->wdaState) &&
17341 (WDA_INIT_STATE != pWDA->wdaState) &&
17342 (WDA_START_STATE != pWDA->wdaState) )
17343 {
17344 VOS_ASSERT(0);
17345 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017346
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017347 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17348 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017349 {
17350 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017351 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017352 }
Leo Chang9d76f622013-08-23 16:34:52 -070017353 else
17354 {
17355 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17356 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017357
Jeff Johnson295189b2012-06-20 16:38:30 -070017358 /* call WDI shutdown */
17359 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017360 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17361 {
17362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17363 "error in WDA Stop" );
17364 status = VOS_STATUS_E_FAILURE;
17365 }
17366 /* WDI stop is synchrnous, shutdown is complete when it returns */
17367 pWDA->wdaState = WDA_STOP_STATE;
17368
Jeff Johnson295189b2012-06-20 16:38:30 -070017369 /* shutdown should perform the stop & close actions. */
17370 /* Destroy the event */
17371 status = vos_event_destroy(&pWDA->txFrameEvent);
17372 if(!VOS_IS_STATUS_SUCCESS(status))
17373 {
17374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017375 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017376 status = VOS_STATUS_E_FAILURE;
17377 }
17378 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17379 if(!VOS_IS_STATUS_SUCCESS(status))
17380 {
17381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017382 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017383 status = VOS_STATUS_E_FAILURE;
17384 }
17385 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17386 if(!VOS_IS_STATUS_SUCCESS(status))
17387 {
17388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017389 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017390 status = VOS_STATUS_E_FAILURE;
17391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017392 /* free WDA context */
17393 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17394 if ( !VOS_IS_STATUS_SUCCESS(status) )
17395 {
17396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17397 "error in WDA close " );
17398 status = VOS_STATUS_E_FAILURE;
17399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017400 return status;
17401}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017402
Jeff Johnsone7245742012-09-05 17:12:55 -070017403/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017404 * FUNCTION: WDA_setNeedShutdown
17405 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017406 */
17407
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017408void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017409{
17410 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017411 if(pWDA == NULL)
17412 {
17413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17414 "Could not get the WDA Context pointer" );
17415 return;
17416 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017417 pWDA->needShutdown = TRUE;
17418}
17419/*
17420 * FUNCTION: WDA_needShutdown
17421 * WDA needs a shutdown
17422 */
17423
17424v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17425{
17426 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017427 if(pWDA == NULL)
17428 {
17429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17430 "Could not get the WDA Context pointer" );
17431 return 0;
17432 }
17433 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017434}
17435
Mohit Khanna4a70d262012-09-11 16:30:12 -070017436#ifdef WLAN_FEATURE_11AC
17437/*
17438 * FUNCTION: WDA_SetBeaconFilterReqCallback
17439 *
17440 */
17441void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17442{
17443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017445 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017446 if(NULL == pWdaParams)
17447 {
17448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017449 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017450 VOS_ASSERT(0) ;
17451 return ;
17452 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017453
Mohit Khanna4a70d262012-09-11 16:30:12 -070017454 vos_mem_free(pWdaParams->wdaMsgParam) ;
17455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17456 vos_mem_free(pWdaParams) ;
17457 /*
17458 * No respone required for SetBeaconFilter req so just free the request
17459 * param here
17460 */
17461
17462 return ;
17463}
17464
17465VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17466 tUpdateVHTOpMode *pData)
17467{
17468 WDI_Status status = WDI_STATUS_SUCCESS ;
17469 tWDA_ReqParams *pWdaParams ;
17470 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17471 sizeof(WDI_UpdateVHTOpMode)) ;
17472 if(NULL == wdiTemp)
17473 {
17474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017475 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017476 VOS_ASSERT(0);
17477 return VOS_STATUS_E_NOMEM;
17478 }
17479 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17480 if(NULL == pWdaParams)
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__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017484 VOS_ASSERT(0);
17485 vos_mem_free(wdiTemp);
17486 return VOS_STATUS_E_NOMEM;
17487 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17489 "------> %s Opmode = %d and staid = %d" ,
17490 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017491 wdiTemp->opMode = pData->opMode;
17492 wdiTemp->staId = pData->staId;
17493
17494 pWdaParams->pWdaContext = pWDA;
17495 /* Store Req pointer, as this will be used for response */
17496 pWdaParams->wdaMsgParam = (void *)pData;
17497 /* store Params pass it to WDI */
17498 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17499
17500 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17501
17502 if(IS_WDI_STATUS_FAILURE(status))
17503 {
17504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17505 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17507 vos_mem_free(pWdaParams->wdaMsgParam);
17508 vos_mem_free(pWdaParams);
17509 }
17510 return CONVERT_WDI2VOS_STATUS(status) ;
17511}
17512#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017513
17514/*==========================================================================
17515 FUNCTION WDA_TransportChannelDebug
17516
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017517 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017518 Display Transport Channel debugging information
17519 User may request to display DXE channel snapshot
17520 Or if host driver detects any abnormal stcuk may display
17521
17522 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017523 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017524 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017525 debugFlags : Enable stall detect features
17526 defined by WPAL_DeviceDebugFlags
17527 These features may effect
17528 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017529
17530 RETURN VALUE
17531 NONE
17532
17533===========================================================================*/
17534void WDA_TransportChannelDebug
17535(
schang6295e542013-03-12 15:31:23 -070017536 tpAniSirGlobal pMac,
17537 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017538 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017539)
17540{
Mihir Shete40a55652014-03-02 14:14:47 +053017541 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017542 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017543}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017544
17545/*==========================================================================
17546 FUNCTION WDA_SetEnableSSR
17547
17548 DESCRIPTION
17549 API to enable/disable SSR on WDI timeout
17550
17551 PARAMETERS
17552 enableSSR : enable/disable SSR
17553
17554 RETURN VALUE
17555 NONE
17556
17557===========================================================================*/
17558void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17559{
17560 WDI_SetEnableSSR(enableSSR);
17561}
Leo Chang9056f462013-08-01 19:21:11 -070017562
17563#ifdef FEATURE_WLAN_LPHB
17564/*
17565 * FUNCTION: WDA_LPHBconfRspCallback
17566 *
17567 */
17568void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17569{
17570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17571
17572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17573 "<------ %s " ,__func__);
17574 if (NULL == pWdaParams)
17575 {
17576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17577 "%s: pWdaParams received NULL", __func__);
17578 VOS_ASSERT(0) ;
17579 return ;
17580 }
17581
17582 /* Do not need to send notification to upper layer
17583 * Just free allocated resources */
17584 if (pWdaParams != NULL)
17585 {
17586 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17587 {
17588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17589 }
17590 vos_mem_free(pWdaParams->wdaMsgParam) ;
17591 vos_mem_free(pWdaParams) ;
17592 }
17593
17594 return;
17595}
17596
17597/*
17598 * FUNCTION: WDA_ProcessLPHBConfReq
17599 *
17600 */
17601VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17602 tSirLPHBReq *pData)
17603{
17604 WDI_Status wdiStatus;
17605 tWDA_ReqParams *pWdaParams ;
17606
17607 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17608 "------> %s " , __func__);
17609
17610 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17611 if (NULL == pWdaParams)
17612 {
17613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17614 "%s: VOS MEM Alloc Failure", __func__);
17615 VOS_ASSERT(0);
17616 vos_mem_free(pData);
17617 return VOS_STATUS_E_NOMEM;
17618 }
17619
17620 pWdaParams->pWdaContext = pWDA;
17621 pWdaParams->wdaMsgParam = (void *)pData;
17622 pWdaParams->wdaWdiApiMsgParam = NULL;
17623
17624 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17625 if (WDI_STATUS_PENDING == wdiStatus)
17626 {
17627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17628 "Pending received for %s:%d ", __func__, __LINE__);
17629 }
17630 else if (WDI_STATUS_SUCCESS != wdiStatus)
17631 {
17632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17633 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17634 vos_mem_free(pWdaParams->wdaMsgParam);
17635 vos_mem_free(pWdaParams);
17636 }
17637
17638 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17639}
17640#endif /* FEATURE_WLAN_LPHB */
17641
c_hpothu92367912014-05-01 15:18:17 +053017642void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17643 void* pUserData)
17644{
17645 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17646
17647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17648 "<------ %s " ,__func__);
17649 if (NULL == pBcnMissRateInfo)
17650 {
17651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17652 "%s: pWdaParams received NULL", __func__);
17653 VOS_ASSERT(0) ;
17654 return ;
17655 }
17656 if (pBcnMissRateInfo->callback)
17657 {
17658 pBcnMissRateInfo->callback(status, bcnMissRate,
17659 pBcnMissRateInfo->data);
17660 }
17661 vos_mem_free(pUserData);
17662
17663 return;
17664}
17665
17666v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17667 tSirBcnMissRateReq *pData)
17668{
17669 WDI_Status wdiStatus;
17670 tSirBcnMissRateInfo *pBcnMissRateInfo;
17671
17672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17673 "------> %s " , __func__);
17674
17675 pBcnMissRateInfo =
17676 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17677 if (NULL == pBcnMissRateInfo)
17678 {
17679 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17680 "%s: VOS MEM Alloc Failure", __func__);
17681 VOS_ASSERT(0);
17682 vos_mem_free(pData);
17683 return;
17684 }
17685
17686 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17687 pBcnMissRateInfo->data = pData->data;
17688
17689 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17690 WDA_GetBcnMissRateCallback,
17691 pData->bssid);
17692 if (WDI_STATUS_PENDING == wdiStatus)
17693 {
17694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17695 "Pending received for %s:%d ", __func__, __LINE__);
17696 }
17697 else if (WDI_STATUS_SUCCESS != wdiStatus)
17698 {
17699 if (pBcnMissRateInfo->callback)
17700 {
17701 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17702 -1, pBcnMissRateInfo->data);
17703 }
17704 }
17705 vos_mem_free(pData);
17706}
Dino Mycle41bdc942014-06-10 11:30:24 +053017707
17708#ifdef WLAN_FEATURE_EXTSCAN
17709
17710/*==========================================================================
17711 FUNCTION WDA_EXTScanStartRspCallback
17712
17713 DESCRIPTION
17714 API to send EXTScan Start Response to HDD
17715
17716 PARAMETERS
17717 pEventData: Response from FW
17718 pUserData:
17719===========================================================================*/
17720void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17721{
17722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17723 tWDA_CbContext *pWDA = NULL;
17724 void *pCallbackContext;
17725 tpAniSirGlobal pMac;
17726
17727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17728 "%s:", __func__);
17729 if (NULL == pWdaParams)
17730 {
17731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17732 "%s: pWdaParams received NULL", __func__);
17733 VOS_ASSERT(0);
17734 return;
17735 }
17736
17737 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17738
17739 if (NULL == pWDA)
17740 {
17741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17742 "%s: pWDA received NULL", __func__);
17743 VOS_ASSERT(0);
17744 goto error;
17745 }
17746
17747 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17748 if (NULL == pMac)
17749 {
17750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17751 "%s:pMac is NULL", __func__);
17752 VOS_ASSERT(0);
17753 goto error;
17754 }
17755
17756 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17757
17758 if (pMac->sme.pEXTScanIndCb)
17759 {
17760 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17761 pEventData);
17762 }
17763 else
17764 {
17765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17766 "%s:HDD callback is null", __func__);
17767 VOS_ASSERT(0);
17768 }
17769
17770error:
17771
17772 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17773 {
17774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17775 }
17776 if (pWdaParams->wdaMsgParam != NULL)
17777 {
17778 vos_mem_free(pWdaParams->wdaMsgParam);
17779 }
17780 vos_mem_free(pWdaParams) ;
17781
17782 return;
17783}
17784
17785/*==========================================================================
17786 FUNCTION WDA_EXTScanStopRspCallback
17787
17788 DESCRIPTION
17789 API to send EXTScan Stop Response to HDD
17790
17791 PARAMETERS
17792 pEventData: Response from FW
17793 pUserData:
17794===========================================================================*/
17795void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17796{
17797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17798 tWDA_CbContext *pWDA = NULL;
17799 void *pCallbackContext;
17800 tpAniSirGlobal pMac;
17801
17802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17803 "%s:", __func__);
17804 if (NULL == pWdaParams)
17805 {
17806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17807 "%s: pWdaParams received NULL", __func__);
17808 VOS_ASSERT(0);
17809 return;
17810 }
17811
17812 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17813
17814 if (NULL == pWDA)
17815 {
17816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17817 "%s: pWDA received NULL", __func__);
17818 VOS_ASSERT(0);
17819 goto error;
17820 }
17821
17822 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17823 if (NULL == pMac)
17824 {
17825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17826 "%s:pMac is NULL", __func__);
17827 VOS_ASSERT(0);
17828 goto error;
17829 }
17830 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17831
17832 if (pMac->sme.pEXTScanIndCb)
17833 {
17834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17835 "%s:HDD call back function called", __func__);
17836 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17837 pEventData);
17838 }
17839 else
17840 {
17841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17842 "%s:HDD callback is null", __func__);
17843 VOS_ASSERT(0);
17844 }
17845
17846error:
17847
17848 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17849 {
17850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17851 }
17852 if (pWdaParams->wdaMsgParam != NULL)
17853 {
17854 vos_mem_free(pWdaParams->wdaMsgParam);
17855 }
17856 vos_mem_free(pWdaParams) ;
17857
17858
17859 return;
17860}
17861
17862/*==========================================================================
17863 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17864
17865 DESCRIPTION
17866 API to send EXTScan Get Cached Results Response to HDD
17867
17868 PARAMETERS
17869 pEventData: Response from FW
17870 pUserData:
17871===========================================================================*/
17872void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17873{
17874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17875 tWDA_CbContext *pWDA = NULL;
17876 void *pCallbackContext;
17877 tpAniSirGlobal pMac;
17878
17879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17880 "%s: ", __func__);
17881 if (NULL == pWdaParams)
17882 {
17883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17884 "%s: pWdaParams received NULL", __func__);
17885 VOS_ASSERT(0);
17886 return;
17887 }
17888
17889 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17890
17891 if (NULL == pWDA)
17892 {
17893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17894 "%s: pWDA received NULL", __func__);
17895 VOS_ASSERT(0);
17896 goto error;
17897 }
17898
17899 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17900 if (NULL == pMac)
17901 {
17902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17903 "%s:pMac is NULL", __func__);
17904 VOS_ASSERT(0);
17905 goto error;
17906 }
17907
17908 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17909
17910 if (pMac->sme.pEXTScanIndCb)
17911 {
17912 pMac->sme.pEXTScanIndCb(pCallbackContext,
17913 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17914 pEventData);
17915 }
17916 else
17917 {
17918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17919 "%s:HDD callback is null", __func__);
17920 VOS_ASSERT(0);
17921 }
17922
17923
17924error:
17925
17926 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17927 {
17928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17929 }
17930 if (pWdaParams->wdaMsgParam != NULL)
17931 {
17932 vos_mem_free(pWdaParams->wdaMsgParam);
17933 }
17934 vos_mem_free(pWdaParams) ;
17935
17936 return;
17937}
17938
17939/*==========================================================================
17940 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17941
17942 DESCRIPTION
17943 API to send EXTScan Get Capabilities Response to HDD
17944
17945 PARAMETERS
17946 pEventData: Response from FW
17947 pUserData:
17948===========================================================================*/
17949void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17950{
17951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17952 tWDA_CbContext *pWDA = NULL;
17953 void *pCallbackContext;
17954 tpAniSirGlobal pMac;
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 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17967
17968 if (NULL == pWDA)
17969 {
17970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17971 "%s: pWDA received NULL", __func__);
17972 VOS_ASSERT(0);
17973 goto error;
17974 }
17975
17976 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17977 if (NULL == pMac)
17978 {
17979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17980 "%s:pMac is NULL", __func__);
17981 VOS_ASSERT(0);
17982 goto error;
17983 }
17984
17985 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17986
17987 if (pMac->sme.pEXTScanIndCb)
17988 {
17989 pMac->sme.pEXTScanIndCb(pCallbackContext,
17990 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17991 pEventData);
17992 }
17993 else
17994 {
17995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17996 "%s:HDD callback is null", __func__);
17997 VOS_ASSERT(0);
17998 }
17999
18000
18001error:
18002
18003 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18004 {
18005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18006 }
18007 if (pWdaParams->wdaMsgParam != NULL)
18008 {
18009 vos_mem_free(pWdaParams->wdaMsgParam);
18010 }
18011 vos_mem_free(pWdaParams) ;
18012
18013 return;
18014}
18015
18016/*==========================================================================
18017 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
18018
18019 DESCRIPTION
18020 API to send EXTScan Set BSSID Hotlist Response to HDD
18021
18022 PARAMETERS
18023 pEventData: Response from FW
18024 pUserData:
18025===========================================================================*/
18026void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18027{
18028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18029 tWDA_CbContext *pWDA = NULL;
18030 void *pCallbackContext;
18031 tpAniSirGlobal pMac;
18032
18033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18034 "%s: ", __func__);
18035 if (NULL == pWdaParams)
18036 {
18037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18038 "%s: pWdaParams received NULL", __func__);
18039 VOS_ASSERT(0) ;
18040 return;
18041 }
18042
18043 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18044
18045 if (NULL == pWDA)
18046 {
18047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18048 "%s: pWDA received NULL", __func__);
18049 VOS_ASSERT(0);
18050 goto error;
18051 }
18052
18053 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18054 if (NULL == pMac)
18055 {
18056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18057 "%s:pMac is NULL", __func__);
18058 VOS_ASSERT(0);
18059 goto error;
18060 }
18061
18062 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18063
18064 if (pMac->sme.pEXTScanIndCb)
18065 {
18066 pMac->sme.pEXTScanIndCb(pCallbackContext,
18067 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
18068 pEventData);
18069 }
18070 else
18071 {
18072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18073 "%s:HDD callback is null", __func__);
18074 VOS_ASSERT(0);
18075 }
18076
18077
18078error:
18079
18080 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18081 {
18082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18083 }
18084 if (pWdaParams->wdaMsgParam != NULL)
18085 {
18086 vos_mem_free(pWdaParams->wdaMsgParam);
18087 }
18088 vos_mem_free(pWdaParams) ;
18089
18090 return;
18091}
18092
18093/*==========================================================================
18094 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
18095
18096 DESCRIPTION
18097 API to send EXTScan ReSet BSSID Hotlist Response to HDD
18098
18099 PARAMETERS
18100 pEventData: Response from FW
18101 pUserData:
18102===========================================================================*/
18103void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
18104{
18105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18106 tWDA_CbContext *pWDA = NULL;
18107 void *pCallbackContext;
18108 tpAniSirGlobal pMac;
18109
18110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18111 "%s:", __func__);
18112 if (NULL == pWdaParams)
18113 {
18114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18115 "%s: pWdaParams received NULL", __func__);
18116 VOS_ASSERT(0) ;
18117 return;
18118 }
18119
18120 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18121
18122 if (NULL == pWDA)
18123 {
18124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18125 "%s: pWDA received NULL", __func__);
18126 VOS_ASSERT(0);
18127 goto error;
18128 }
18129
18130 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18131 if (NULL == pMac)
18132 {
18133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18134 "%s:pMac is NULL", __func__);
18135 VOS_ASSERT(0);
18136 goto error;
18137 }
18138
18139 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18140
18141 if (pMac->sme.pEXTScanIndCb)
18142 {
18143 pMac->sme.pEXTScanIndCb(pCallbackContext,
18144 WDA_EXTSCAN_RESET_BSSID_HOTLIST_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
18154
18155error:
18156
18157 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18158 {
18159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18160 }
18161 if (pWdaParams->wdaMsgParam != NULL)
18162 {
18163 vos_mem_free(pWdaParams->wdaMsgParam);
18164 }
18165 vos_mem_free(pWdaParams) ;
18166
18167 return;
18168}
18169
18170/*==========================================================================
18171 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18172
18173 DESCRIPTION
18174 API to send EXTScan Set Significant RSSI Change RSP to HDD
18175
18176 PARAMETERS
18177 pEventData: Response from FW
18178 pUserData:
18179===========================================================================*/
18180void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18181{
18182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18183 tWDA_CbContext *pWDA = NULL;
18184 void *pCallbackContext;
18185 tpAniSirGlobal pMac;
18186
18187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18188 "%s:", __func__);
18189 if (NULL == pWdaParams)
18190 {
18191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18192 "%s: pWdaParams received NULL", __func__);
18193 VOS_ASSERT(0) ;
18194 return;
18195 }
18196
18197 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18198
18199 if (NULL == pWDA)
18200 {
18201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18202 "%s: pWDA received NULL", __func__);
18203 VOS_ASSERT(0);
18204 goto error;
18205 }
18206
18207 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18208 if (NULL == pMac)
18209 {
18210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18211 "%s:pMac is NULL", __func__);
18212 VOS_ASSERT(0);
18213 goto error;
18214 }
18215
18216 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18217
18218 if (pMac->sme.pEXTScanIndCb)
18219 {
18220 pMac->sme.pEXTScanIndCb(pCallbackContext,
18221 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18222 pEventData);
18223 }
18224 else
18225 {
18226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18227 "%s:HDD callback is null", __func__);
18228 VOS_ASSERT(0);
18229 }
18230
18231
18232error:
18233
18234 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18235 {
18236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18237 }
18238 if (pWdaParams->wdaMsgParam != NULL)
18239 {
18240 vos_mem_free(pWdaParams->wdaMsgParam);
18241 }
18242 vos_mem_free(pWdaParams) ;
18243
18244 return;
18245}
18246
18247/*==========================================================================
18248 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18249
18250 DESCRIPTION
18251 API to send EXTScan Set Significant RSSI Change RSP to HDD
18252
18253 PARAMETERS
18254 pEventData: Response from FW
18255 pUserData:
18256===========================================================================*/
18257void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18258 void* pUserData)
18259{
18260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18261 tWDA_CbContext *pWDA = NULL;
18262 void *pCallbackContext;
18263 tpAniSirGlobal pMac;
18264
18265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18266 "%s:", __func__);
18267 if (NULL == pWdaParams)
18268 {
18269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18270 "%s: pWdaParams received NULL", __func__);
18271 VOS_ASSERT(0) ;
18272 return;
18273 }
18274
18275 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18276
18277 if (NULL == pWDA)
18278 {
18279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18280 "%s: pWDA received NULL", __func__);
18281 VOS_ASSERT(0);
18282 goto error;
18283 }
18284
18285 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18286 if (NULL == pMac)
18287 {
18288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18289 "%s:pMac is NULL", __func__);
18290 VOS_ASSERT(0);
18291 goto error;
18292 }
18293
18294 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18295
18296 if (pMac->sme.pEXTScanIndCb)
18297 {
18298 pMac->sme.pEXTScanIndCb(pCallbackContext,
18299 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18300 pEventData);
18301 }
18302 else
18303 {
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18305 "%s:HDD callback is null", __func__);
18306 VOS_ASSERT(0);
18307 }
18308
18309
18310error:
18311
18312 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18313 {
18314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18315 }
18316 if (pWdaParams->wdaMsgParam != NULL)
18317 {
18318 vos_mem_free(pWdaParams->wdaMsgParam);
18319 }
18320 vos_mem_free(pWdaParams) ;
18321
18322 return;
18323}
18324
18325/*==========================================================================
18326 FUNCTION WDA_ProcessEXTScanStartReq
18327
18328 DESCRIPTION
18329 API to send EXTScan Start Request to WDI
18330
18331 PARAMETERS
18332 pWDA: Pointer to WDA context
18333 wdaRequest: Pointer to EXTScan req parameters
18334===========================================================================*/
18335VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18336 tSirEXTScanStartReqParams *wdaRequest)
18337{
18338 WDI_Status status = WDI_STATUS_SUCCESS;
18339 tWDA_ReqParams *pWdaParams;
18340
18341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18342 "%s: ", __func__);
18343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18344 if (NULL == pWdaParams)
18345 {
18346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18347 "%s: VOS MEM Alloc Failure", __func__);
18348 VOS_ASSERT(0);
18349 return VOS_STATUS_E_NOMEM;
18350 }
18351 pWdaParams->pWdaContext = pWDA;
18352 pWdaParams->wdaMsgParam = wdaRequest;
18353 pWdaParams->wdaWdiApiMsgParam = NULL;
18354
18355 status = WDI_EXTScanStartReq((void *)wdaRequest,
18356 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18357 (void *)pWdaParams);
18358 if (IS_WDI_STATUS_FAILURE(status))
18359 {
18360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18361 "Failure to request. Free all the memory " );
18362 vos_mem_free(pWdaParams->wdaMsgParam);
18363 vos_mem_free(pWdaParams);
18364 }
18365 return CONVERT_WDI2VOS_STATUS(status);
18366}
18367
18368/*==========================================================================
18369 FUNCTION WDA_ProcessEXTScanStopReq
18370
18371 DESCRIPTION
18372 API to send EXTScan Start Request to WDI
18373
18374 PARAMETERS
18375 pWDA: Pointer to WDA context
18376 wdaRequest: Pointer to EXTScan req parameters
18377===========================================================================*/
18378VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18379 tSirEXTScanStopReqParams *wdaRequest)
18380{
18381 WDI_Status status = WDI_STATUS_SUCCESS;
18382 tWDA_ReqParams *pWdaParams;
18383
18384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18385 "%s:", __func__);
18386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18387 if (NULL == pWdaParams)
18388 {
18389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18390 "%s: VOS MEM Alloc Failure", __func__);
18391 VOS_ASSERT(0);
18392 return VOS_STATUS_E_NOMEM;
18393 }
18394 pWdaParams->pWdaContext = pWDA;
18395 pWdaParams->wdaMsgParam = wdaRequest;
18396 pWdaParams->wdaWdiApiMsgParam = NULL;
18397
18398 status = WDI_EXTScanStopReq((void *)wdaRequest,
18399 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18400 (void *)pWdaParams);
18401 if (IS_WDI_STATUS_FAILURE(status))
18402 {
18403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18404 "Failure to request. Free all the memory " );
18405 vos_mem_free(pWdaParams->wdaMsgParam);
18406 vos_mem_free(pWdaParams);
18407 }
18408 return CONVERT_WDI2VOS_STATUS(status);
18409}
18410
18411/*==========================================================================
18412 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18413
18414 DESCRIPTION
18415 API to send EXTScan Get Cached Results Request to WDI
18416
18417 PARAMETERS
18418 pWDA: Pointer to WDA context
18419 wdaRequest: Pointer to EXTScan req parameters
18420===========================================================================*/
18421VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18422 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18423{
18424 WDI_Status status = WDI_STATUS_SUCCESS;
18425 tWDA_ReqParams *pWdaParams;
18426
18427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18428 "%s: ", __func__);
18429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18430 if (NULL == pWdaParams)
18431 {
18432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18433 "%s: VOS MEM Alloc Failure", __func__);
18434 VOS_ASSERT(0);
18435 return VOS_STATUS_E_NOMEM;
18436 }
18437 pWdaParams->pWdaContext = pWDA;
18438 pWdaParams->wdaMsgParam = wdaRequest;
18439 pWdaParams->wdaWdiApiMsgParam = NULL;
18440
18441 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18442 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18443 (void *)pWdaParams);
18444 if (IS_WDI_STATUS_FAILURE(status))
18445 {
18446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18447 "Failure to request. Free all the memory " );
18448 vos_mem_free(pWdaParams->wdaMsgParam);
18449 vos_mem_free(pWdaParams);
18450 }
18451 return CONVERT_WDI2VOS_STATUS(status);
18452}
18453
18454/*==========================================================================
18455 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18456
18457 DESCRIPTION
18458 API to send EXTScan Get Capabilities Request to WDI
18459
18460 PARAMETERS
18461 pWDA: Pointer to WDA context
18462 wdaRequest: Pointer to EXTScan req parameters
18463===========================================================================*/
18464VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18465 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18466{
18467 WDI_Status status = WDI_STATUS_SUCCESS;
18468 tWDA_ReqParams *pWdaParams;
18469
18470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18471 "%s:", __func__);
18472 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18473 if (NULL == pWdaParams)
18474 {
18475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18476 "%s: VOS MEM Alloc Failure", __func__);
18477 VOS_ASSERT(0);
18478 return VOS_STATUS_E_NOMEM;
18479 }
18480 pWdaParams->pWdaContext = pWDA;
18481 pWdaParams->wdaMsgParam = wdaRequest;
18482 pWdaParams->wdaWdiApiMsgParam = NULL;
18483
18484 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18485 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18486 (void *)pWdaParams);
18487 if (IS_WDI_STATUS_FAILURE(status))
18488 {
18489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18490 "Failure to request. Free all the memory " );
18491 vos_mem_free(pWdaParams->wdaMsgParam);
18492 vos_mem_free(pWdaParams);
18493 }
18494 return CONVERT_WDI2VOS_STATUS(status);
18495}
18496
18497/*==========================================================================
18498 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18499
18500 DESCRIPTION
18501 API to send Set BSSID Hotlist Request to WDI
18502
18503 PARAMETERS
18504 pWDA: Pointer to WDA context
18505 wdaRequest: Pointer to EXTScan req parameters
18506===========================================================================*/
18507VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18508 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18509{
18510 WDI_Status status = WDI_STATUS_SUCCESS;
18511 tWDA_ReqParams *pWdaParams;
18512
18513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18514 "%s: ", __func__);
18515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18516 if (NULL == pWdaParams)
18517 {
18518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18519 "%s: VOS MEM Alloc Failure", __func__);
18520 VOS_ASSERT(0);
18521 return VOS_STATUS_E_NOMEM;
18522 }
18523 pWdaParams->pWdaContext = pWDA;
18524 pWdaParams->wdaMsgParam = wdaRequest;
18525 pWdaParams->wdaWdiApiMsgParam = NULL;
18526
18527 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18528 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18529 (void *)pWdaParams);
18530 if (IS_WDI_STATUS_FAILURE(status))
18531 {
18532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18533 "Failure to request. Free all the memory " );
18534 vos_mem_free(pWdaParams->wdaMsgParam);
18535 vos_mem_free(pWdaParams);
18536 }
18537 return CONVERT_WDI2VOS_STATUS(status);
18538}
18539
18540/*==========================================================================
18541 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18542
18543 DESCRIPTION
18544 API to send Reset BSSID Hotlist Request to WDI
18545
18546 PARAMETERS
18547 pWDA: Pointer to WDA context
18548 wdaRequest: Pointer to EXTScan req parameters
18549===========================================================================*/
18550VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18551 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18552{
18553 WDI_Status status = WDI_STATUS_SUCCESS;
18554 tWDA_ReqParams *pWdaParams;
18555
18556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18557 "%s:", __func__);
18558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18559 if (NULL == pWdaParams)
18560 {
18561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18562 "%s: VOS MEM Alloc Failure", __func__);
18563 VOS_ASSERT(0);
18564 return VOS_STATUS_E_NOMEM;
18565 }
18566 pWdaParams->pWdaContext = pWDA;
18567 pWdaParams->wdaMsgParam = wdaRequest;
18568 pWdaParams->wdaWdiApiMsgParam = NULL;
18569
18570 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18571 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18572 (void *)pWdaParams);
18573 if (IS_WDI_STATUS_FAILURE(status))
18574 {
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18576 "Failure to request. Free all the memory " );
18577 vos_mem_free(pWdaParams->wdaMsgParam);
18578 vos_mem_free(pWdaParams);
18579 }
18580 return CONVERT_WDI2VOS_STATUS(status);
18581}
18582
18583/*==========================================================================
18584 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18585
18586 DESCRIPTION
18587 API to send Set Significant RSSI Change Request to WDI
18588
18589 PARAMETERS
18590 pWDA: Pointer to WDA context
18591 wdaRequest: Pointer to EXTScan req parameters
18592===========================================================================*/
18593VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18594 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18595{
18596 WDI_Status status = WDI_STATUS_SUCCESS;
18597 tWDA_ReqParams *pWdaParams;
18598
18599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18600 "%s: ", __func__);
18601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18602 if (NULL == pWdaParams)
18603 {
18604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18605 "%s: VOS MEM Alloc Failure", __func__);
18606 VOS_ASSERT(0);
18607 return VOS_STATUS_E_NOMEM;
18608 }
18609 pWdaParams->pWdaContext = pWDA;
18610 pWdaParams->wdaMsgParam = wdaRequest;
18611 pWdaParams->wdaWdiApiMsgParam = NULL;
18612
18613 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18614 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18615 (void *)pWdaParams);
18616 if (IS_WDI_STATUS_FAILURE(status))
18617 {
18618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18619 "Failure to request. Free all the memory " );
18620 vos_mem_free(pWdaParams->wdaMsgParam);
18621 vos_mem_free(pWdaParams);
18622 }
18623 return CONVERT_WDI2VOS_STATUS(status);
18624}
18625
18626/*==========================================================================
18627 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18628
18629 DESCRIPTION
18630 API to send Reset Significant RSSI Change Request to WDI
18631
18632 PARAMETERS
18633 pWDA: Pointer to WDA context
18634 wdaRequest: Pointer to EXTScan req parameters
18635===========================================================================*/
18636VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18637 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18638{
18639 WDI_Status status = WDI_STATUS_SUCCESS;
18640 tWDA_ReqParams *pWdaParams;
18641
18642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18643 "%s:", __func__);
18644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18645 if (NULL == pWdaParams)
18646 {
18647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18648 "%s: VOS MEM Alloc Failure", __func__);
18649 VOS_ASSERT(0);
18650 return VOS_STATUS_E_NOMEM;
18651 }
18652 pWdaParams->pWdaContext = pWDA;
18653 pWdaParams->wdaMsgParam = wdaRequest;
18654 pWdaParams->wdaWdiApiMsgParam = NULL;
18655
18656 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18657 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18658 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18659 (void *)pWdaParams);
18660 if (IS_WDI_STATUS_FAILURE(status))
18661 {
18662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18663 "Failure to request. Free all the memory " );
18664 vos_mem_free(pWdaParams->wdaMsgParam);
18665 vos_mem_free(pWdaParams);
18666 }
18667 return CONVERT_WDI2VOS_STATUS(status);
18668}
18669#endif /* WLAN_FEATURE_EXTSCAN */
18670
Sunil Duttbd736ed2014-05-26 21:19:41 +053018671#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18672
18673/*==========================================================================
18674 FUNCTION WDA_LLStatsSetRspCallback
18675
18676 DESCRIPTION
18677 API to process set link layer statistics response from FW
18678
18679 PARAMETERS
18680 pRsp: Pointer to set link layer statistics response
18681 pUserData: Pointer to user data
18682
18683 RETURN VALUE
18684 NONE
18685
18686===========================================================================*/
18687void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18688{
18689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18690
18691
18692 if (NULL == pWdaParams)
18693 {
18694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18695 "%s: pWdaParams received NULL", __func__);
18696 VOS_ASSERT(0) ;
18697 return ;
18698 }
18699
18700 /* Do not need to send notification to upper layer
18701 * Just free allocated resources */
18702 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18703 {
18704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18705 }
18706 if (pWdaParams->wdaMsgParam != NULL)
18707 {
18708 vos_mem_free(pWdaParams->wdaMsgParam);
18709 }
18710 vos_mem_free(pWdaParams) ;
18711
18712 return;
18713}
18714
18715/*==========================================================================
18716 FUNCTION WDA_ProcessLLStatsSetReq
18717
18718 DESCRIPTION
18719 API to send Set Link Layer Stats request to WDI
18720
18721 PARAMETERS
18722 pWDA: Pointer to WDA context
18723 wdaRequest: Pointer to set Link Layer Stats req parameters
18724===========================================================================*/
18725VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18726 tSirLLStatsSetReq *wdaRequest)
18727{
18728 WDI_Status status = WDI_STATUS_SUCCESS;
18729 tWDA_ReqParams *pWdaParams;
18730
18731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18732 if (NULL == pWdaParams)
18733 {
18734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18735 "%s: VOS MEM Alloc Failure", __func__);
18736 VOS_ASSERT(0);
18737 return VOS_STATUS_E_NOMEM;
18738 }
18739 pWdaParams->pWdaContext = pWDA;
18740 pWdaParams->wdaMsgParam = wdaRequest;
18741 pWdaParams->wdaWdiApiMsgParam = NULL;
18742
18743 status = WDI_LLStatsSetReq((void *)wdaRequest,
18744 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18745 (void *)pWdaParams);
18746 if (IS_WDI_STATUS_FAILURE(status))
18747 {
18748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18749 "Failure to request. Free all the memory " );
18750 vos_mem_free(pWdaParams->wdaMsgParam);
18751 vos_mem_free(pWdaParams);
18752 }
18753 return CONVERT_WDI2VOS_STATUS(status);
18754}
18755
18756/*==========================================================================
18757 FUNCTION WDA_LLStatsGetRspCallback
18758
18759 DESCRIPTION
18760 API to process get link layer statistics response from FW
18761
18762 PARAMETERS
18763 pRsp: Pointer to get link layer statistics response
18764 pUserData: Pointer to user data
18765
18766 RETURN VALUE
18767 NONE
18768
18769===========================================================================*/
18770void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18771{
18772 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18773
18774 if (NULL == pWdaParams)
18775 {
18776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18777 "%s: pWdaParams received NULL", __func__);
18778 VOS_ASSERT(0) ;
18779 return ;
18780 }
18781
18782 /* Do not need to send notification to upper layer
18783 * Just free allocated resources */
18784 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18785 {
18786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18787 }
18788 if (pWdaParams->wdaMsgParam != NULL)
18789 {
18790 vos_mem_free(pWdaParams->wdaMsgParam);
18791 }
18792 vos_mem_free(pWdaParams) ;
18793
18794 return;
18795}
18796
18797/*==========================================================================
18798 FUNCTION WDA_ProcessLLStatsGetReq
18799
18800 DESCRIPTION
18801 API to send Get Link Layer Stats request to WDI
18802
18803 PARAMETERS
18804 pWDA: Pointer to WDA context
18805 wdaRequest: Pointer to get Link Layer Stats req parameters
18806===========================================================================*/
18807VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18808 tSirLLStatsGetReq *wdaRequest)
18809{
18810 WDI_Status status = WDI_STATUS_SUCCESS;
18811 tWDA_ReqParams *pWdaParams;
18812
18813 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18814 if (NULL == pWdaParams)
18815 {
18816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18817 "%s: VOS MEM Alloc Failure", __func__);
18818 VOS_ASSERT(0);
18819 return VOS_STATUS_E_NOMEM;
18820 }
18821 pWdaParams->pWdaContext = pWDA;
18822 pWdaParams->wdaMsgParam = wdaRequest;
18823 pWdaParams->wdaWdiApiMsgParam = NULL;
18824
18825 status = WDI_LLStatsGetReq((void *) wdaRequest,
18826 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18827 (void *)pWdaParams);
18828 if (IS_WDI_STATUS_FAILURE(status))
18829 {
18830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18831 "Failure to request. Free all the memory " );
18832 vos_mem_free(pWdaParams->wdaMsgParam);
18833 vos_mem_free(pWdaParams);
18834 }
18835 return CONVERT_WDI2VOS_STATUS(status);
18836}
18837
18838/*==========================================================================
18839 FUNCTION WDA_LLStatsClearRspCallback
18840
18841 DESCRIPTION
18842 API to process clear link layer statistics response from FW
18843
18844 PARAMETERS
18845 pRsp: Pointer to clear link layer statistics response
18846 pUserData: Pointer to user data
18847
18848 RETURN VALUE
18849 NONE
18850
18851===========================================================================*/
18852void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18853{
18854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18855
18856
18857 if (NULL == pWdaParams)
18858 {
18859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18860 "%s: pWdaParams received NULL", __func__);
18861 VOS_ASSERT(0) ;
18862 return ;
18863 }
18864 /* Do not need to send notification to upper layer
18865 * Just free allocated resources */
18866 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18867 {
18868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18869 }
18870 if (pWdaParams->wdaMsgParam != NULL)
18871 {
18872 vos_mem_free(pWdaParams->wdaMsgParam);
18873 }
18874 vos_mem_free(pWdaParams) ;
18875 return;
18876}
18877
18878/*==========================================================================
18879 FUNCTION WDA_ProcessLLStatsClearReq
18880
18881 DESCRIPTION
18882 API to send Clear Link Layer Stats request to WDI
18883
18884 PARAMETERS
18885 pWDA: Pointer to WDA context
18886 wdaRequest: Pointer to earLink Layer Stats req
18887===========================================================================*/
18888VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18889 tSirLLStatsClearReq *wdaRequest)
18890{
18891 WDI_Status status = WDI_STATUS_SUCCESS;
18892 tWDA_ReqParams *pWdaParams;
18893
18894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18895 if (NULL == pWdaParams)
18896 {
18897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18898 "%s: VOS MEM Alloc Failure", __func__);
18899 VOS_ASSERT(0);
18900 return VOS_STATUS_E_NOMEM;
18901 }
18902 pWdaParams->pWdaContext = pWDA;
18903 pWdaParams->wdaMsgParam = wdaRequest;
18904 pWdaParams->wdaWdiApiMsgParam = NULL;
18905
18906 status = WDI_LLStatsClearReq((void *) wdaRequest,
18907 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18908 (void *)pWdaParams);
18909 if (IS_WDI_STATUS_FAILURE(status))
18910 {
18911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18912 "Failure to request. Free all the memory " );
18913 vos_mem_free(pWdaParams->wdaMsgParam);
18914 vos_mem_free(pWdaParams);
18915 }
18916 return CONVERT_WDI2VOS_STATUS(status);
18917}
18918
18919#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018920
Abhishek Singh85b74712014-10-08 11:38:19 +053018921void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18922{
18923 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18924
18925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18926 "<------ %s " ,__func__);
18927 if (NULL == fwStatsinfo)
18928 {
18929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18930 "%s: pWdaParams received NULL", __func__);
18931 VOS_ASSERT(0);
18932 return;
18933 }
18934
18935 if(fwStatsinfo->callback)
18936 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18937
18938 vos_mem_free(pUserData);
18939 return;
18940}
18941
18942
18943v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18944 tSirFWStatsGetReq *pData)
18945{
18946
18947 WDI_Status wdiStatus;
18948 tSirFWStatsInfo *fwStatsinfo;
18949
18950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18951 "------> %s" , __func__);
18952
18953 fwStatsinfo =
18954 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18955 if (NULL == fwStatsinfo)
18956 {
18957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18958 "%s: VOS MEM Alloc Failure", __func__);
18959 VOS_ASSERT(0);
18960 vos_mem_free(pData);
18961 return;
18962 }
18963
18964 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18965 fwStatsinfo->data = pData->data;
18966
18967 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18968 WDA_FWStatsGetRspCallback,
18969 pData->stats);
18970 if (WDI_STATUS_PENDING == wdiStatus)
18971 {
18972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18973 "Pending received for %s:%d ", __func__, __LINE__);
18974 }
18975 else if (WDI_STATUS_SUCCESS != wdiStatus)
18976 {
18977 if (fwStatsinfo->callback)
18978 {
18979 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18980 }
18981 vos_mem_free(fwStatsinfo);
18982 }
18983 vos_mem_free(pData);
18984}
18985
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018986/*==========================================================================
18987 FUNCTION WDA_EncryptMsgRspCallback
18988
18989 DESCRIPTION
18990 API to send Encrypt message response to HDD
18991
18992 PARAMETERS
18993 pEventData: Response from FW
18994 pUserData: Data sent to firmware as part of request
18995===========================================================================*/
18996void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18997 void* pUserData)
18998{
18999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19000 tWDA_CbContext *pWDA = NULL;
19001 tpAniSirGlobal pMac;
19002 vos_msg_t vosMsg;
19003 tpSirEncryptedDataRspParams pEncRspParams;
19004 tpSetEncryptedDataRspParams pEncryptedDataRsp;
19005
19006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19007 FL("%s:"), __func__);
19008 if (NULL == pWdaParams)
19009 {
19010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19011 FL("%s: pWdaParams received NULL"), __func__);
19012 VOS_ASSERT(0);
19013 return;
19014 }
19015
19016 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19017
19018 if (NULL == pWDA)
19019 {
19020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19021 FL("%s: pWDA received NULL"), __func__);
19022 VOS_ASSERT(0);
19023 goto error;
19024 }
19025
19026 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19027 if (NULL == pMac)
19028 {
19029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19030 FL("%s:pMac is NULL"), __func__);
19031 VOS_ASSERT(0);
19032 goto error;
19033 }
19034
19035 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
19036
19037 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
19038 if (NULL == pEncRspParams)
19039 {
19040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19041 FL("%s: VOS MEM Alloc Failure"), __func__);
19042 VOS_ASSERT(0);
19043 goto error;
19044 }
19045
19046 /* Message Header */
19047 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
19048 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
19049 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
19050 pEncryptedDataRsp->encryptedPayload.length;
19051 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
19052 pEncryptedDataRsp->encryptedPayload.data,
19053 pEncryptedDataRsp->encryptedPayload.length);
19054
19055 /* VOS message wrapper */
19056 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
19057 vosMsg.bodyptr = (void *)pEncRspParams;
19058 vosMsg.bodyval = 0;
19059
19060 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19061 {
19062 /* free the mem */
19063 vos_mem_free((v_VOID_t *) pEncRspParams);
19064 }
19065
19066error:
19067
19068 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19069 {
19070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19071 }
19072 if (pWdaParams->wdaMsgParam != NULL)
19073 {
19074 vos_mem_free(pWdaParams->wdaMsgParam);
19075 }
19076 vos_mem_free(pWdaParams) ;
19077
19078 return;
19079}
19080/*==========================================================================
19081 FUNCTION WDA_ProcessEncryptMsgReq
19082
19083 DESCRIPTION
19084 API to send Encrypt message Request to WDI
19085
19086 PARAMETERS
19087 pWDA: Pointer to WDA context
19088 wdaRequest: Pointer to Encrypt_msg req parameters
19089===========================================================================*/
19090VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
19091 u8 *wdaRequest)
19092{
19093 WDI_Status status = WDI_STATUS_SUCCESS;
19094 tWDA_ReqParams *pWdaParams;
19095
19096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19097 FL("%s: "), __func__);
19098 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19099 if (NULL == pWdaParams)
19100 {
19101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19102 FL("%s: VOS MEM Alloc Failure"), __func__);
19103 VOS_ASSERT(0);
19104 return VOS_STATUS_E_NOMEM;
19105 }
19106 pWdaParams->pWdaContext = pWDA;
19107 pWdaParams->wdaMsgParam = wdaRequest;
19108 pWdaParams->wdaWdiApiMsgParam = NULL;
19109
19110 status = WDI_EncryptMsgReq((void *)wdaRequest,
19111 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19112 (void *)pWdaParams);
19113 if (IS_WDI_STATUS_FAILURE(status))
19114 {
19115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19116 FL("Failure to request. Free all the memory " ));
19117 vos_mem_free(pWdaParams->wdaMsgParam);
19118 vos_mem_free(pWdaParams);
19119 }
19120 return CONVERT_WDI2VOS_STATUS(status);
19121}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019122/*==========================================================================
19123 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19124
19125 DESCRIPTION
19126 API to enable/disable RTS/CTS for different modes.
19127
19128 PARAMETERS
19129 pWDA: Pointer to WDA context
19130 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19131===========================================================================*/
19132
19133VOS_STATUS
19134WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19135 tANI_U32 rtsCtsVal)
19136{
19137 WDI_Status status;
19138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19139 FL("---> %s"), __func__);
19140 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19141 if (WDI_STATUS_PENDING == status)
19142 {
19143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19144 FL("pending status received "));
19145 }
19146 else if (WDI_STATUS_SUCCESS_SYNC != status)
19147 {
19148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19149 FL("Failure status %d"), status);
19150 }
19151 return CONVERT_WDI2VOS_STATUS(status) ;
19152}
Katya Nigamf0511f62015-05-05 16:40:57 +053019153void WDA_MonStartRspCallback(void *pEventData, void* pUserData)
19154{
19155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19156
19157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19158 "<------ %s " ,__func__);
19159 if (NULL == pWdaParams)
19160 {
19161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19162 "%s: pWdaParams received NULL", __func__);
19163 VOS_ASSERT(0) ;
19164 return ;
19165 }
19166
19167 vos_mem_free(pWdaParams) ;
19168
19169 return;
19170}
19171
19172
19173VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest)
19174{
19175
19176 WDI_Status status = WDI_STATUS_SUCCESS;
19177 tWDA_ReqParams *pWdaParams;
19178
19179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19180 FL("%s: "), __func__);
19181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19182 if (NULL == pWdaParams)
19183 {
19184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19185 FL("%s: VOS MEM Alloc Failure"), __func__);
19186 VOS_ASSERT(0);
19187 return VOS_STATUS_E_NOMEM;
19188 }
19189 pWdaParams->pWdaContext = pWDA;
19190 pWdaParams->wdaMsgParam = wdaRequest;
19191 pWdaParams->wdaWdiApiMsgParam = NULL;
19192
19193 status = WDI_MonStartReq((void *)wdaRequest,
19194 (WDI_MonStartRspCb)WDA_MonStartRspCallback,
19195 (void *)pWdaParams);
19196 if (IS_WDI_STATUS_FAILURE(status))
19197 {
19198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19199 "Failure to request. Free all the memory " );
19200 vos_mem_free(pWdaParams->wdaMsgParam);
19201 vos_mem_free(pWdaParams);
19202 }
19203 return CONVERT_WDI2VOS_STATUS(status);
19204}
19205
19206void WDA_MonStopRspCallback(void* pUserData)
19207{
19208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19209
19210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19211 "<------ %s " ,__func__);
19212 if (NULL == pWdaParams)
19213 {
19214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19215 "%s: pWdaParams received NULL", __func__);
19216 VOS_ASSERT(0) ;
19217 return ;
19218 }
19219
19220 vos_mem_free(pWdaParams) ;
19221
19222 return;
19223}
19224
19225VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
19226{
19227
19228 WDI_Status status = WDI_STATUS_SUCCESS;
19229 tWDA_ReqParams *pWdaParams;
19230
19231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19232 FL("%s: "), __func__);
19233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19234 if (NULL == pWdaParams)
19235 {
19236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19237 FL("%s: VOS MEM Alloc Failure"), __func__);
19238 VOS_ASSERT(0);
19239 return VOS_STATUS_E_NOMEM;
19240 }
19241 pWdaParams->pWdaContext = pWDA;
19242 pWdaParams->wdaMsgParam = wdaRequest;
19243 pWdaParams->wdaWdiApiMsgParam = NULL;
19244
19245 status = WDI_MonStopReq((WDI_MonStopRspCb)WDA_MonStopRspCallback,
19246 (void *)pWdaParams);
19247
19248 if (IS_WDI_STATUS_FAILURE(status))
19249 {
19250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19251 "Failure to request. Free all the memory " );
19252 vos_mem_free(pWdaParams->wdaMsgParam);
19253 vos_mem_free(pWdaParams);
19254 }
19255 return CONVERT_WDI2VOS_STATUS(status);
19256}