blob: 453d6a96d1dbb0eb2ffad5283a516afd05b1a6a0 [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
263/*
264 * FUNCTION: WDA_ProcessNanRequest
265 * Process NAN request
266 */
267VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
268 tNanRequest *wdaRequest)
269{
270 WDI_Status status = WDI_STATUS_SUCCESS;
271 tWDA_ReqParams *pWdaParams;
272 WDI_NanRequestType *wdiRequest = NULL;
273 size_t wdiReqLength = sizeof(WDI_NanRequestType)
274 - sizeof(wdiRequest->request_data)
275 + wdaRequest->request_data_len;
276
277 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
278
279 if (NULL == wdiRequest)
280 {
281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
282 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
283 wdiReqLength);
284 vos_mem_free(wdaRequest);
285 return VOS_STATUS_E_NOMEM;
286 }
287
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
289 "WDA: Process Nan Request length: %zu", wdiReqLength);
290
291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
292 if (NULL == pWdaParams)
293 {
294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
295 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
296 VOS_ASSERT(0);
297 vos_mem_free(wdaRequest);
298 vos_mem_free(wdiRequest);
299 return VOS_STATUS_E_NOMEM;
300 }
301
302 wdiRequest->request_data_len = wdaRequest->request_data_len;
303
304 vos_mem_copy( wdiRequest->request_data,
305 wdaRequest->request_data,
306 wdaRequest->request_data_len);
307
308 vos_mem_free(wdaRequest);
309
310 pWdaParams->pWdaContext = pWDA;
311 pWdaParams->wdaMsgParam = NULL;
312 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
313
314 status = WDI_NanRequest(wdiRequest, pWdaParams);
315
316 if (IS_WDI_STATUS_FAILURE(status))
317 {
318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
319 "Failure to request. Free all the memory " );
320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
321 vos_mem_free(pWdaParams);
322 }
323
324 return CONVERT_WDI2VOS_STATUS(status) ;
325}
326
327
328
Jeff Johnson295189b2012-06-20 16:38:30 -0700329/*
330 * FUNCTION: WDA_open
331 * Allocate the WDA context
332 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530333VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700334 tMacOpenParameters *pMacParams )
335{
336 tWDA_CbContext *wdaContext;
337 VOS_STATUS status;
338 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700339 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530340 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
342 if(!VOS_IS_STATUS_SUCCESS(status))
343 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
345 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 return VOS_STATUS_E_NOMEM;
347 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 /*__asm int 3;*/
349 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
350
351 /* Initialize data structures */
352 wdaContext->pVosContext = pVosContext;
353 wdaContext->wdaState = WDA_INIT_STATE;
354 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
355
356 /* Initialize WDA-WDI synchronization event */
357 status = vos_event_init(&wdaContext->wdaWdiEvent);
358 if(!VOS_IS_STATUS_SUCCESS(status))
359 {
360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800361 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800362 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700363 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700364 /* Init Frame transfer event */
365 status = vos_event_init(&wdaContext->txFrameEvent);
366 if(!VOS_IS_STATUS_SUCCESS(status))
367 {
368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800369 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800370 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700371 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700372 status = vos_event_init(&wdaContext->suspendDataTxEvent);
373 if(!VOS_IS_STATUS_SUCCESS(status))
374 {
375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800376 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800377 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700378 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
380 if(!VOS_IS_STATUS_SUCCESS(status))
381 {
382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800383 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800384 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530388 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 &wdiDevCapability, pMacParams->driverType))
390 {
391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
392 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800393 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
395 else
396 {
397 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
398 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
399 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 /* update max STA in WDA used for BA */
401 wdaContext->wdaMaxSta = pMacParams->maxStation;
402 /* store the frameTransRequired flag in wdaContext, to send this to HAL
403 * in WDA_Start
404 */
405 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
406 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800408
409error:
410 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
411 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700412}
413
Jeff Johnson295189b2012-06-20 16:38:30 -0700414/*
415 * FUNCTION: WDA_preStart
416 * Trigger DAL-AL to start CFG download
417 */
418VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
419{
420 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
421 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /*
423 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
424 */
425 wdaMsg.type = WNI_CFG_DNLD_REQ ;
426 wdaMsg.bodyptr = NULL;
427 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* post the message.. */
429 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
430 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
431 {
432 vosStatus = VOS_STATUS_E_BADMSG;
433 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return( vosStatus );
435}
Jeff Johnson295189b2012-06-20 16:38:30 -0700436/*
437 * FUNCTION: WDA_wdiStartCallback
438 * Once WDI_Start is finished, WDI start callback will be called by WDI
439 * to indicate completion of WDI_Start.
440 */
441void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
442 void *pVosContext)
443{
444 tWDA_CbContext *wdaContext;
445 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 if (NULL == pVosContext)
447 {
448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700449 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 return;
451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
453 if (NULL == wdaContext)
454 {
455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700456 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 return;
458 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
464 else
465 {
466 wdaContext->wdaState = WDA_START_STATE;
467 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 /* extract and save version information from the Start Response */
469 wdaContext->wcnssWlanCompiledVersion.major =
470 wdiRspParams->wlanCompiledVersion.major;
471 wdaContext->wcnssWlanCompiledVersion.minor =
472 wdiRspParams->wlanCompiledVersion.minor;
473 wdaContext->wcnssWlanCompiledVersion.version =
474 wdiRspParams->wlanCompiledVersion.version;
475 wdaContext->wcnssWlanCompiledVersion.revision =
476 wdiRspParams->wlanCompiledVersion.revision;
477 wdaContext->wcnssWlanReportedVersion.major =
478 wdiRspParams->wlanReportedVersion.major;
479 wdaContext->wcnssWlanReportedVersion.minor =
480 wdiRspParams->wlanReportedVersion.minor;
481 wdaContext->wcnssWlanReportedVersion.version =
482 wdiRspParams->wlanReportedVersion.version;
483 wdaContext->wcnssWlanReportedVersion.revision =
484 wdiRspParams->wlanReportedVersion.revision;
485 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
486 wdiRspParams->wcnssSoftwareVersion,
487 sizeof(wdaContext->wcnssSoftwareVersionString));
488 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
489 wdiRspParams->wcnssHardwareVersion,
490 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 /* Notify WDA_start that WDI_Start has completed */
492 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700493 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 {
495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700496 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_start
503 * Prepare TLV configuration and call WDI_Start.
504 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700505VOS_STATUS WDA_start(v_PVOID_t pVosContext)
506{
507 tWDA_CbContext *wdaContext;
508 VOS_STATUS status;
509 WDI_Status wdiStatus;
510 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 if (NULL == pVosContext)
512 {
513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700514 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 return VOS_STATUS_E_FAILURE;
516 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
518 if (NULL == wdaContext)
519 {
520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700521 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 return VOS_STATUS_E_FAILURE;
523 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 /* Non-FTM mode, WDA status for START must be INIT
525 * FTM mode, WDA Status for START can be INIT or STOP */
526 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
527 (WDA_STOP_STATE != wdaContext->wdaState) )
528 {
529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
530 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700531 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 return VOS_STATUS_E_FAILURE;
533 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* initialize the wdiStartParam. Note that we can create this on
535 the stack since we won't exit until WDI_Start() completes or
536 times out */
537 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 /* prepare the config TLV for the WDI */
540 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
541 if ( !VOS_IS_STATUS_SUCCESS(status) )
542 {
543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700544 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 return VOS_STATUS_E_FAILURE;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 /* note from here onwards if an error occurs we must
548 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
550 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
551 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 /* initialize the WDA-WDI synchronization event */
553 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* call WDI start */
555 wdiStatus = WDI_Start(&wdiStartParam,
556 (WDI_StartRspCb)WDA_wdiStartCallback,
557 (v_VOID_t *)pVosContext);
558 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
559 {
560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700561 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 vos_mem_free(wdiStartParam.pConfigBuffer);
563 return VOS_STATUS_E_FAILURE;
564 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* wait for WDI start to invoke our callback */
566 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
567 WDA_WDI_START_TIMEOUT );
568 if ( !VOS_IS_STATUS_SUCCESS(status) )
569 {
570 if ( VOS_STATUS_E_TIMEOUT == status )
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700573 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 }
575 else
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700579 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 }
581 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530582 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 /* we no longer need the config TLV */
586 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* if we are not in the START state then WDI_Start() failed */
588 if (WDA_START_STATE != wdaContext->wdaState)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700591 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 return VOS_STATUS_E_FAILURE;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 /* FTM mode does not need to monitor BA activity */
595 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
596 {
597 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800598 if(VOS_STATUS_SUCCESS == status)
599 {
600 wdaContext->wdaTimersCreated = VOS_TRUE;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 }
Leo Chang9d76f622013-08-23 16:34:52 -0700603 else
604 {
605 vos_event_init(&wdaContext->ftmStopDoneEvent);
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 return status;
608}
609
Jeff Johnson295189b2012-06-20 16:38:30 -0700610/*
611 * FUNCTION: WDA_prepareConfigTLV
612 * Function to prepare CFG for DAL(WDA)
613 */
614VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
615 WDI_StartReqParamsType *wdiStartParams )
616{
617 /* get pMac to acess CFG data base */
618 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
619 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
620 tHalCfg *tlvStruct = NULL ;
621 tANI_U8 *tlvStructStart = NULL ;
622 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
623 v_PVOID_t *configParam;
624 tANI_U32 configParamSize;
625 tANI_U32 *configDataValue;
626 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700627 tANI_U8 i;
628
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 if ((NULL == pMac)||(NULL == wdaContext))
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700632 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 VOS_ASSERT(0);
634 return VOS_STATUS_E_FAILURE;
635 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
637 WNI_CFG_STA_ID_LEN +
638 WNI_CFG_EDCA_WME_ACBK_LEN +
639 WNI_CFG_EDCA_WME_ACBE_LEN +
640 WNI_CFG_EDCA_WME_ACVI_LEN +
641 WNI_CFG_EDCA_WME_ACVO_LEN +
642 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 /* malloc memory for all configs in one shot */
644 configParam = vos_mem_malloc(configParamSize);
645
646 if(NULL == configParam )
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700649 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 VOS_ASSERT(0) ;
651 return VOS_STATUS_E_NOMEM;
652 }
653 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)configParam;
656 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* TODO: Remove Later */
658 /* QWLAN_HAL_CFG_STA_ID */
659 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
660 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
661 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
662 eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_STA_ID");
666 goto handle_failure;
667 }
668 tlvStruct->length = strLength ;
669 /* calculate the pad bytes to have the CFG in aligned format */
670 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
671 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
673 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700674 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
675 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
676 tlvStruct->length = sizeof(tANI_U32);
677 configDataValue = (tANI_U32 *)(tlvStruct + 1);
678 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
679 != eSIR_SUCCESS)
680 {
681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
682 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
683 goto handle_failure;
684 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
686 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700687 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
688 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
689 tlvStruct->length = sizeof(tANI_U32);
690 configDataValue = (tANI_U32 *)(tlvStruct + 1);
691 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
692 eSIR_SUCCESS)
693 {
694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
695 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
696 goto handle_failure;
697 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
699 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
701 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
702 tlvStruct->length = sizeof(tANI_U32);
703 configDataValue = (tANI_U32 *)(tlvStruct + 1);
704 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
705 != eSIR_SUCCESS)
706 {
707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
708 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
709 goto handle_failure;
710 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
712 + sizeof(tHalCfg) + tlvStruct->length)) ;
713
714 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
715 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
719 configDataValue ) != eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_CAL_PERIOD */
728 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
732 != eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_CAL_PERIOD");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_CAL_CONTROL */
741 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
745 != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_CAL_CONTROL");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 /* QWLAN_HAL_CFG_PROXIMITY */
754 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
755 tlvStruct->length = sizeof(tANI_U32);
756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
757 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
758 != eSIR_SUCCESS)
759 {
760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
761 "Failed to get value for WNI_CFG_PROXIMITY");
762 goto handle_failure;
763 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
765 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
767 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
768 tlvStruct->length = sizeof(tANI_U32);
769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
770 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
771 != eSIR_SUCCESS)
772 {
773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
774 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
775 goto handle_failure;
776 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
778 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
780 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
781 tlvStruct->length = sizeof(tANI_U32);
782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
783 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
784 eSIR_SUCCESS)
785 {
786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
787 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
788 goto handle_failure;
789 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700790 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
791 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
793 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
797 configDataValue ) != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
801 goto handle_failure;
802 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
804 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
806 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
810 eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
819 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
823 eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
832 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
836 eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
845 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
849 configDataValue ) != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
858 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
870
871 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
872 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
873 tlvStruct->length = sizeof(tANI_U32);
874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
875 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
876 configDataValue ) != eSIR_SUCCESS)
877 {
878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
879 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
880 goto handle_failure;
881 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
883 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700884 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
885 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length));
897
898 /* QWLAN_HAL_CFG_FIXED_RATE */
899 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
903 != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_FIXED_RATE");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length));
911
912 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
913 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
914 tlvStruct->length = sizeof(tANI_U32);
915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
916 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
917 != eSIR_SUCCESS)
918 {
919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
920 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
921 goto handle_failure;
922 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
924 + sizeof(tHalCfg) + tlvStruct->length));
925
926 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
927 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
928 tlvStruct->length = sizeof(tANI_U32);
929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
930 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
931 configDataValue ) != eSIR_SUCCESS)
932 {
933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
934 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
935 goto handle_failure;
936 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
938 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
940 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
941 tlvStruct->length = sizeof(tANI_U32);
942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
943 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
944 configDataValue ) != eSIR_SUCCESS)
945 {
946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
947 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
948 goto handle_failure;
949 }
950 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
951 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700952 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
953 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
954 tlvStruct->length = sizeof(tANI_U32);
955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
956 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
957 configDataValue ) != eSIR_SUCCESS)
958 {
959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
960 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
961 goto handle_failure;
962 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
964 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
966 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
967 tlvStruct->length = sizeof(tANI_U32);
968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
969 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
970 configDataValue ) != eSIR_SUCCESS)
971 {
972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
973 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
974 goto handle_failure;
975 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
977 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
979 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
983 configDataValue ) != eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
991
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
993 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
994 tlvStruct->length = sizeof(tANI_U32);
995 configDataValue = (tANI_U32 *)(tlvStruct + 1);
996 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
997 configDataValue ) != eSIR_SUCCESS)
998 {
999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1000 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1001 goto handle_failure;
1002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1004 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1006 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1007 tlvStruct->length = sizeof(tANI_U32);
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1010 configDataValue ) != eSIR_SUCCESS)
1011 {
1012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1013 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1014 goto handle_failure;
1015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001016 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1017 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1019 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1020 tlvStruct->length = sizeof(tANI_U32);
1021 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1022 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1023 eSIR_SUCCESS)
1024 {
1025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1026 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1027 goto handle_failure;
1028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1030 + sizeof(tHalCfg) + tlvStruct->length);
1031
1032 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1033 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1034 tlvStruct->length = sizeof(tANI_U32);
1035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1036 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1037 configDataValue ) != eSIR_SUCCESS)
1038 {
1039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1040 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1041 goto handle_failure;
1042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1044 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1046 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1047 tlvStruct->length = sizeof(tANI_U32);
1048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1049 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1050 configDataValue ) != eSIR_SUCCESS)
1051 {
1052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1053 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1054 goto handle_failure;
1055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1057 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1059 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1060 tlvStruct->length = sizeof(tANI_U32);
1061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1062 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1063 configDataValue ) != eSIR_SUCCESS)
1064 {
1065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1066 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1067 goto handle_failure;
1068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1072 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1073 tlvStruct->length = sizeof(tANI_U32);
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1076 configDataValue ) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1080 goto handle_failure;
1081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1083 + sizeof(tHalCfg) + tlvStruct->length);
1084
1085 /* QWLAN_HAL_CFG_STATS_PERIOD */
1086 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1090 eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_STATS_PERIOD");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1099 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1103 eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1112 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1116 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1120 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1133 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1134 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1137 &strLength) != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1141 goto handle_failure;
1142 }
1143 tlvStruct->length = strLength;
1144 /* calculate the pad bytes to have the CFG in aligned format */
1145 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1146 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1150 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1151 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1154 &strLength) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1158 goto handle_failure;
1159 }
1160 tlvStruct->length = strLength;
1161 /* calculate the pad bytes to have the CFG in aligned format */
1162 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1163 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001164 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1165 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1167 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1168 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1169 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1170 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1171 &strLength) != eSIR_SUCCESS)
1172 {
1173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1174 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1175 goto handle_failure;
1176 }
1177 tlvStruct->length = strLength;
1178 /* calculate the pad bytes to have the CFG in aligned format */
1179 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1180 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1184 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1185 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1188 &strLength) != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1192 goto handle_failure;
1193 }
1194 tlvStruct->length = strLength;
1195 /* calculate the pad bytes to have the CFG in aligned format */
1196 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1197 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1199 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1201 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1202 tlvStruct->length = sizeof(tANI_U32);
1203 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1204 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1205 != eSIR_SUCCESS)
1206 {
1207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1208 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1209 goto handle_failure;
1210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1212 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1214 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1215 tlvStruct->length = sizeof(tANI_U32);
1216 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1217 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1218 != eSIR_SUCCESS)
1219 {
1220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1221 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1222 goto handle_failure;
1223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1225 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1227 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1228 tlvStruct->length = sizeof(tANI_U32);
1229 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1230 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1231 != eSIR_SUCCESS)
1232 {
1233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1234 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1235 goto handle_failure;
1236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1240 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1241 tlvStruct->length = sizeof(tANI_U32);
1242 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1243 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1244 != eSIR_SUCCESS)
1245 {
1246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1247 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1248 goto handle_failure;
1249 }
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1253 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1257 != eSIR_SUCCESS)
1258 {
1259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1260 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1261 goto handle_failure;
1262 }
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1266 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1270 != eSIR_SUCCESS)
1271 {
1272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1273 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1274 goto handle_failure;
1275 }
1276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1279 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1283 != eSIR_SUCCESS)
1284 {
1285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1286 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1287 goto handle_failure;
1288 }
1289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1292 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1300 goto handle_failure;
1301 }
1302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1305 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1318 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1326 goto handle_failure;
1327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1331 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1339 goto handle_failure;
1340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1344 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1345 * into FW, so the parameters are added here.
1346 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001347 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001354 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1362 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1363 tlvStruct->length = sizeof(tANI_U32);
1364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1365 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001368 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
1376 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1377 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1378 tlvStruct->length = sizeof(tANI_U32);
1379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1380 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383
1384 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1385 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
1392 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1393 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1398 + sizeof(tHalCfg) + tlvStruct->length) ;
1399
1400 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1401 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1405 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1406 + sizeof(tHalCfg) + tlvStruct->length) ;
1407
1408 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1409 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415
1416 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1417 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1418 tlvStruct->length = sizeof(tANI_U32);
1419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1420 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1421 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1422 + sizeof(tHalCfg) + tlvStruct->length) ;
1423
1424 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1425 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1426 tlvStruct->length = sizeof(tANI_U32);
1427 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1428 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1429 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1430 + sizeof(tHalCfg) + tlvStruct->length) ;
1431
1432 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1433 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1434 tlvStruct->length = sizeof(tANI_U32);
1435 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1436 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1437 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1438 + sizeof(tHalCfg) + tlvStruct->length) ;
1439
1440 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1441 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1446 + sizeof(tHalCfg) + tlvStruct->length) ;
1447
1448 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1449 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1450 tlvStruct->length = sizeof(tANI_U32);
1451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1452 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1453 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1454 + sizeof(tHalCfg) + tlvStruct->length) ;
1455
1456 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1457 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1458 tlvStruct->length = sizeof(tANI_U32);
1459 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1460 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1461 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1462 + sizeof(tHalCfg) + tlvStruct->length) ;
1463
1464 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1465 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1470 + sizeof(tHalCfg) + tlvStruct->length) ;
1471
Wilson Tsaof8b37942013-09-06 10:49:00 -07001472 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1473 {
1474 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1475 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1476 tlvStruct->length = sizeof(tANI_U32);
1477 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1478 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1479 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1480 + sizeof(tHalCfg) + tlvStruct->length) ;
1481
1482 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1483 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1484 tlvStruct->length = sizeof(tANI_U32);
1485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1486 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1487 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1488 + sizeof(tHalCfg) + tlvStruct->length) ;
1489
1490 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1491 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1492 tlvStruct->length = sizeof(tANI_U32);
1493 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1494 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1495 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1496 + sizeof(tHalCfg) + tlvStruct->length) ;
1497
1498 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1499 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1500 tlvStruct->length = sizeof(tANI_U32);
1501 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1502 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1503 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1504 + sizeof(tHalCfg) + tlvStruct->length) ;
1505 }
1506
1507 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1508 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1516 {
1517 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1518 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1519 tlvStruct->length = sizeof(tANI_U32);
1520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1521 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1522 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1523 + sizeof(tHalCfg) + tlvStruct->length) ;
1524 }
1525
1526 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1527 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1528 tlvStruct->length = sizeof(tANI_U32);
1529 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1530 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1531 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1532 + sizeof(tHalCfg) + tlvStruct->length) ;
1533
Jeff Johnson32d95a32012-09-10 13:15:23 -07001534 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001535 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1536 tlvStruct->length = sizeof(tANI_U32);
1537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1538 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1539 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1540 wcnssCompiledApiVersion.minor,
1541 wcnssCompiledApiVersion.version,
1542 wcnssCompiledApiVersion.revision);
1543 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1544 + sizeof(tHalCfg) + tlvStruct->length) ;
1545
Jeff Johnsond13512a2012-07-17 11:42:19 -07001546 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1547 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1548 tlvStruct->length = sizeof(tANI_U32);
1549 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1550 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1551 configDataValue ) != eSIR_SUCCESS)
1552 {
1553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1554 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1555 goto handle_failure;
1556 }
1557
1558 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1559 + sizeof(tHalCfg) + tlvStruct->length) ;
1560 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1561 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1562 tlvStruct->length = sizeof(tANI_U32);
1563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1564 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1565 configDataValue ) != eSIR_SUCCESS)
1566 {
1567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1568 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1569 goto handle_failure;
1570 }
1571
1572 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length) ;
1574
1575 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1576 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1580 != eSIR_SUCCESS)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1583 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1584 goto handle_failure;
1585 }
1586
1587 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1588 + sizeof(tHalCfg) + tlvStruct->length) ;
1589
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001590 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1591 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1592 tlvStruct->length = sizeof(tANI_U32);
1593 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1594 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1595 != eSIR_SUCCESS)
1596 {
1597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1598 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1599 goto handle_failure;
1600 }
1601
1602 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1603 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001604#ifdef WLAN_SOFTAP_VSTA_FEATURE
1605 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1606 tlvStruct->length = sizeof(tANI_U32);
1607 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1608 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1609 != eSIR_SUCCESS)
1610 {
1611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1612 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1613 goto handle_failure;
1614 }
1615
1616 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1617 + sizeof(tHalCfg) + tlvStruct->length) ;
1618#endif
1619
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001620 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1621 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1622 tlvStruct->length = sizeof(tANI_U32);
1623 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1624
1625 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1626 != eSIR_SUCCESS)
1627 {
1628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1629 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1630 goto handle_failure;
1631 }
1632
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
1635
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301636/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1637 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1638 tlvStruct->length = sizeof(tANI_U32);
1639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1640 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1641 configDataValue ) != eSIR_SUCCESS)
1642 {
1643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1644 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1645 goto handle_failure;
1646 }
1647
1648 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1649 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301650#ifdef FEATURE_WLAN_TDLS
1651 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1652 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1660 goto handle_failure;
1661 }
1662 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1663 + sizeof(tHalCfg) + tlvStruct->length) ;
1664
1665 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1666 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1667 tlvStruct->length = sizeof(tANI_U32);
1668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1669 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1670 configDataValue ) != eSIR_SUCCESS)
1671 {
1672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1673 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1674 goto handle_failure;
1675 }
1676 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1677 + sizeof(tHalCfg) + tlvStruct->length) ;
1678 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1679 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1680 tlvStruct->length = sizeof(tANI_U32);
1681 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1682 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1683 configDataValue ) != eSIR_SUCCESS)
1684 {
1685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1686 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1687 goto handle_failure;
1688 }
1689 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1690 + sizeof(tHalCfg) + tlvStruct->length) ;
1691 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1692 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1693 tlvStruct->length = sizeof(tANI_U32);
1694 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1695 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1696 configDataValue ) != eSIR_SUCCESS)
1697 {
1698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1699 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1700 goto handle_failure;
1701 }
1702 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1703 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301704 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1705 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1706 tlvStruct->length = sizeof(tANI_U32);
1707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1708 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1709 configDataValue ) != eSIR_SUCCESS)
1710 {
1711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1712 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1713 goto handle_failure;
1714 }
1715 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1716 + sizeof(tHalCfg) + tlvStruct->length) ;
1717
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301718#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301719
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001720 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1721 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1722 tlvStruct->length = sizeof(tANI_U32);
1723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1724 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1725 configDataValue ) != eSIR_SUCCESS)
1726 {
1727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1728 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1729 goto handle_failure;
1730 }
1731
1732 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1733 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001734
1735 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1736 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1737 tlvStruct->length = sizeof(tANI_U32);
1738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1739 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1740 != eSIR_SUCCESS)
1741 {
1742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1743 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1744 goto handle_failure;
1745 }
1746 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1747 + sizeof(tHalCfg) + tlvStruct->length));
1748
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301749 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1750 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1751 tlvStruct->length = sizeof(tANI_U32);
1752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1753 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1754 configDataValue ) != eSIR_SUCCESS)
1755 {
1756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1757 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1758 goto handle_failure;
1759 }
1760
1761 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1762 + sizeof(tHalCfg) + tlvStruct->length) ;
1763
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301764 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1765 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1766 tlvStruct->length = sizeof(tANI_U32);
1767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1768 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1769 configDataValue ) != eSIR_SUCCESS)
1770 {
1771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1772 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1773 goto handle_failure;
1774 }
1775 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1776 + sizeof(tHalCfg) + tlvStruct->length) ;
1777
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301778 /* QWLAN_HAL_CFG_ATH_DISABLE */
1779 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1780 tlvStruct->length = sizeof(tANI_U32);
1781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1782 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1783 configDataValue ) != eSIR_SUCCESS)
1784 {
1785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1786 "Failed to get value for WNI_CFG_ATH_DISABLE");
1787 goto handle_failure;
1788 }
1789 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1790 + sizeof(tHalCfg) + tlvStruct->length) ;
1791
c_hpothu6d7dc922013-12-02 12:36:41 +05301792 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1793 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1794 tlvStruct->length = sizeof(tANI_U32);
1795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1796 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1797 configDataValue ) != eSIR_SUCCESS)
1798 {
1799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1800 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1801 goto handle_failure;
1802 }
1803 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1804 + sizeof(tHalCfg) + tlvStruct->length) ;
1805
1806 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1807 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1808 tlvStruct->length = sizeof(tANI_U32);
1809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1810 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1811 configDataValue ) != eSIR_SUCCESS)
1812 {
1813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1814 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1815 goto handle_failure;
1816 }
1817 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1818 + sizeof(tHalCfg) + tlvStruct->length) ;
1819
1820 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1821 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1822 tlvStruct->length = sizeof(tANI_U32);
1823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1824 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1825 configDataValue ) != eSIR_SUCCESS)
1826 {
1827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1828 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1829 goto handle_failure;
1830 }
1831 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1832 + sizeof(tHalCfg) + tlvStruct->length) ;
1833
1834 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1835 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1836 tlvStruct->length = sizeof(tANI_U32);
1837 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1838 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1839 configDataValue ) != eSIR_SUCCESS)
1840 {
1841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1842 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1843 goto handle_failure;
1844 }
1845 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1846 + sizeof(tHalCfg) + tlvStruct->length) ;
1847
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301848 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1849 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1850 tlvStruct->length = sizeof(tANI_U32);
1851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1852 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1853 configDataValue ) != eSIR_SUCCESS)
1854 {
1855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1856 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1857 goto handle_failure;
1858 }
1859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1860 + sizeof(tHalCfg) + tlvStruct->length) ;
1861
1862 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1863 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1864 tlvStruct->length = sizeof(tANI_U32);
1865 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1866 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1867 configDataValue ) != eSIR_SUCCESS)
1868 {
1869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1870 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1871 goto handle_failure;
1872 }
1873 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1874 + sizeof(tHalCfg) + tlvStruct->length) ;
1875
1876 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1877 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1878 tlvStruct->length = sizeof(tANI_U32);
1879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1880 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1881 configDataValue ) != eSIR_SUCCESS)
1882 {
1883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1884 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1885 goto handle_failure;
1886 }
1887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1888 + sizeof(tHalCfg) + tlvStruct->length) ;
1889
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001890 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1891 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1892 tlvStruct->length = sizeof(tANI_U32);
1893 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1894 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1895 configDataValue ) != eSIR_SUCCESS)
1896 {
1897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1898 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1899 goto handle_failure;
1900 }
1901 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1902 + sizeof(tHalCfg) + tlvStruct->length) ;
1903
c_hpothu5bd1ae42014-03-07 20:28:22 +05301904 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1905 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1906 tlvStruct->length = sizeof(tANI_U32);
1907 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1908
1909 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1910 configDataValue ) != eSIR_SUCCESS)
1911 {
1912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1913 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1914 goto handle_failure;
1915 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301916 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1917 + sizeof(tHalCfg) + tlvStruct->length) ;
1918
1919 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1920 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1921 tlvStruct->length = sizeof(tANI_U32);
1922 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1923
1924 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1925 configDataValue ) != eSIR_SUCCESS)
1926 {
1927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1928 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1929 goto handle_failure;
1930 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1932 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301933
c_hpothu2d0f1c42014-04-01 18:38:51 +05301934 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1935 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1936 tlvStruct->length = sizeof(tANI_U32);
1937 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1938
1939 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1940 configDataValue ) != eSIR_SUCCESS)
1941 {
1942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1943 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1944 goto handle_failure;
1945 }
1946 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1947 + sizeof(tHalCfg) + tlvStruct->length) ;
1948
1949 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1950 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1951 tlvStruct->length = sizeof(tANI_U32);
1952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1953
1954 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1955 configDataValue ) != eSIR_SUCCESS)
1956 {
1957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1958 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1959 goto handle_failure;
1960 }
1961 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1962 + sizeof(tHalCfg) + tlvStruct->length) ;
1963
1964 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1965 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1966 tlvStruct->length = sizeof(tANI_U32);
1967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1968
1969 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1970 configDataValue ) != eSIR_SUCCESS)
1971 {
1972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1973 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1974 goto handle_failure;
1975 }
1976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1977 + sizeof(tHalCfg) + tlvStruct->length) ;
1978
1979 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1980 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1981 tlvStruct->length = sizeof(tANI_U32);
1982 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1983
1984 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1985 configDataValue ) != eSIR_SUCCESS)
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1988 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1989 goto handle_failure;
1990 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301991 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1992 + sizeof(tHalCfg) + tlvStruct->length) ;
1993
Mihir Shetec34258c2014-07-30 17:50:27 +05301994 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1995 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1996 tlvStruct->length = sizeof(tANI_U32);
1997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1998
1999 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2000 configDataValue ) != eSIR_SUCCESS)
2001 {
2002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2003 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2004 goto handle_failure;
2005 }
2006 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2007 + sizeof(tHalCfg) + tlvStruct->length) ;
2008
2009 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2010 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2011 tlvStruct->length = sizeof(tANI_U32);
2012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2013
2014 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2015 configDataValue ) != eSIR_SUCCESS)
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2019 goto handle_failure;
2020 }
2021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2022 + sizeof(tHalCfg) + tlvStruct->length) ;
2023
2024 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2025 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2026 tlvStruct->length = sizeof(tANI_U32);
2027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2028
2029 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2030 configDataValue ) != eSIR_SUCCESS)
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2034 goto handle_failure;
2035 }
2036 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2037 + sizeof(tHalCfg) + tlvStruct->length) ;
2038
2039 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2040 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2041 tlvStruct->length = sizeof(tANI_U32);
2042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2043
2044 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2045 configDataValue ) != eSIR_SUCCESS)
2046 {
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2048 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2049 goto handle_failure;
2050 }
2051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2052 + sizeof(tHalCfg) + tlvStruct->length) ;
2053
2054 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2055 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2056 tlvStruct->length = sizeof(tANI_U32);
2057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2058
2059 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2060 configDataValue ) != eSIR_SUCCESS)
2061 {
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2063 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2064 goto handle_failure;
2065 }
2066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2067 + sizeof(tHalCfg) + tlvStruct->length) ;
2068
2069 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2070 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2071 tlvStruct->length = sizeof(tANI_U32);
2072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2073
2074 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2075 configDataValue ) != eSIR_SUCCESS)
2076 {
2077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2078 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2079 goto handle_failure;
2080 }
2081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2082 + sizeof(tHalCfg) + tlvStruct->length) ;
2083
2084 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2085 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2086 tlvStruct->length = sizeof(tANI_U32);
2087 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2088
2089 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2090 configDataValue ) != eSIR_SUCCESS)
2091 {
2092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2093 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2094 goto handle_failure;
2095 }
2096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2097 + sizeof(tHalCfg) + tlvStruct->length) ;
2098
2099 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2100 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2101 tlvStruct->length = sizeof(tANI_U32);
2102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2103
2104 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2105 configDataValue ) != eSIR_SUCCESS)
2106 {
2107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2108 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2109 goto handle_failure;
2110 }
2111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2112 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302113
2114 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2115 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2116 tlvStruct->length = sizeof(tANI_U32);
2117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2118
2119 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2120 configDataValue ) != eSIR_SUCCESS)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2123 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2124 goto handle_failure;
2125 }
2126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2127 + sizeof(tHalCfg) + tlvStruct->length) ;
2128
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302129 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2130 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2131 tlvStruct->length = sizeof(tANI_U32);
2132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2133
2134 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2135 configDataValue ) != eSIR_SUCCESS)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2138 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2139 goto handle_failure;
2140 }
2141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2142 + sizeof(tHalCfg) + tlvStruct->length) ;
2143
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302144 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2145 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2146 tlvStruct->length = sizeof(tANI_U32);
2147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2148
2149 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2150 configDataValue ) != eSIR_SUCCESS)
2151 {
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2153 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2154 goto handle_failure;
2155 }
2156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2157 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302158
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302159 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2160 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2161 tlvStruct->length = sizeof(tANI_U32);
2162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2163
2164 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2165 configDataValue ) != eSIR_SUCCESS)
2166 {
2167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2168 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2169 goto handle_failure;
2170 }
2171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2172 + sizeof(tHalCfg) + tlvStruct->length) ;
2173
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175#ifdef WLAN_DEBUG
2176 {
2177 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2179 "****** Dumping CFG TLV ***** ");
2180 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2181 {
2182 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2183 "%02x %02x %02x %02x %02x %02x %02x %02x",
2184 tlvStructStart[i],
2185 tlvStructStart[i+1],
2186 tlvStructStart[i+2],
2187 tlvStructStart[i+3],
2188 tlvStructStart[i+4],
2189 tlvStructStart[i+5],
2190 tlvStructStart[i+6],
2191 tlvStructStart[i+7]);
2192 }
2193 /* Dump the bytes in the last line*/
2194 for (; i < wdiStartParams->usConfigBufferLen; i++)
2195 {
2196 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2197 "%02x ",tlvStructStart[i]);
2198 }
2199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2200 "**************************** ");
2201 }
2202#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002204handle_failure:
2205 vos_mem_free(configParam);
2206 return VOS_STATUS_E_FAILURE;
2207}
Jeff Johnson295189b2012-06-20 16:38:30 -07002208/*
2209 * FUNCTION: WDA_wdiCompleteCB
2210 * call the voss call back function
2211 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002212void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002213{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2215 tWDA_CbContext *wdaContext;
2216
2217 if(NULL == pWdaParams)
2218 {
2219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002220 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002221 VOS_ASSERT(0) ;
2222 return ;
2223 }
2224
2225 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2226
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 if (NULL == wdaContext)
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002230 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 return ;
2232 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002233
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002235 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002239 vos_mem_free(pWdaParams);
2240
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 if(WDI_STATUS_SUCCESS != status)
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2244 "WDI stop callback returned failure" );
2245 VOS_ASSERT(0) ;
2246 }
2247 else
2248 {
2249 wdaContext->wdaState = WDA_STOP_STATE;
2250 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002251
Leo Chang9d76f622013-08-23 16:34:52 -07002252 /* FTM Driver stop procedure should be synced.
2253 * Stop and Close will happen on same context */
2254 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2255 {
2256 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2257 {
2258 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2259 "%s: FTM Stop Event Set Fail", __func__);
2260 VOS_ASSERT(0);
2261 }
2262 }
2263
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002265 vos_WDAComplete_cback(wdaContext->pVosContext);
2266
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 return ;
2268}
Jeff Johnson295189b2012-06-20 16:38:30 -07002269/*
2270 * FUNCTION: WDA_stop
2271 * call WDI_stop
2272 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002273VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2274{
2275 WDI_Status wdiStatus;
2276 VOS_STATUS status = VOS_STATUS_SUCCESS;
2277 WDI_StopReqParamsType *wdiStopReq;
2278 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002279 tWDA_ReqParams *pWdaParams ;
2280
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 if (NULL == pWDA)
2282 {
2283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002284 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 VOS_ASSERT(0);
2286 return VOS_STATUS_E_FAILURE;
2287 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002288 if (pWDA->wdiFailed == true)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002291 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002292 return VOS_STATUS_E_ALREADY;
2293 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002294
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* FTM mode stay START_STATE */
2296 if( (WDA_READY_STATE != pWDA->wdaState) &&
2297 (WDA_INIT_STATE != pWDA->wdaState) &&
2298 (WDA_START_STATE != pWDA->wdaState) )
2299 {
2300 VOS_ASSERT(0);
2301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 wdiStopReq = (WDI_StopReqParamsType *)
2303 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2304 if(NULL == wdiStopReq)
2305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 VOS_ASSERT(0);
2309 return VOS_STATUS_E_NOMEM;
2310 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002311
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 wdiStopReq->wdiStopReason = reason;
2313 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302314
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2316 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 VOS_ASSERT(0);
2321 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002322 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002324
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002325 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2326 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 {
2328 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002329 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002331
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002332 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2333 pWdaParams->wdaMsgParam = NULL;
2334 pWdaParams->pWdaContext = pWDA;
2335
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 /* call WDI stop */
2337 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002338 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2339
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2343 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 status = VOS_STATUS_E_FAILURE;
2347 }
Leo Chang9d76f622013-08-23 16:34:52 -07002348
2349 /* FTM Driver stop procedure should be synced.
2350 * Stop and Close will happen on same context */
2351 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2352 {
2353 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2354 WDI_RESPONSE_TIMEOUT);
2355 if (status != VOS_STATUS_SUCCESS)
2356 {
2357 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2358 "%s: FTM Stop Timepoout", __func__);
2359 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002360 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302361 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 return status;
2364}
Jeff Johnson295189b2012-06-20 16:38:30 -07002365/*
2366 * FUNCTION: WDA_close
2367 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302368 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002369VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2370{
Jeff Johnson43971f52012-07-17 12:26:56 -07002371 VOS_STATUS status = VOS_STATUS_SUCCESS;
2372 WDI_Status wstatus;
2373 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 if (NULL == wdaContext)
2376 {
2377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002378 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 return VOS_STATUS_E_FAILURE;
2380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2382 (WDA_STOP_STATE != wdaContext->wdaState))
2383 {
2384 VOS_ASSERT(0);
2385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002387 wstatus = WDI_Close();
2388 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 {
2390 status = VOS_STATUS_E_FAILURE;
2391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002394 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2395 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 {
2397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002398 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 status = VOS_STATUS_E_FAILURE;
2400 }
2401
Jeff Johnson43971f52012-07-17 12:26:56 -07002402 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002403 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002406 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 status = VOS_STATUS_E_FAILURE;
2408 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002409 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002410 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 {
2412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002413 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 status = VOS_STATUS_E_FAILURE;
2415 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002416 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002417 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 {
2419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002420 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 status = VOS_STATUS_E_FAILURE;
2422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002424 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002425 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 {
2427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2428 "error in WDA close " );
2429 status = VOS_STATUS_E_FAILURE;
2430 }
2431 return status;
2432}
Jeff Johnson295189b2012-06-20 16:38:30 -07002433/*
2434 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2435 * returns 1 if the compiled version is greater than or equal to the input version
2436 */
2437
2438uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2439{
2440 VOS_STATUS status = VOS_STATUS_SUCCESS;
2441 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2442 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2445 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2446 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2447 (compiledVersion.revision >= revision)))
2448 return 1;
2449 else
2450 return 0;
2451}
Jeff Johnson295189b2012-06-20 16:38:30 -07002452/*
2453 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2454 * returns 1 if the compiled version is greater than or equal to the input version
2455 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002456uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2457{
2458 VOS_STATUS status = VOS_STATUS_SUCCESS;
2459 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2460 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2463 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2464 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2465 (reportedVersion.revision >= revision)))
2466 return 1;
2467 else
2468 return 0;
2469}
Jeff Johnson295189b2012-06-20 16:38:30 -07002470/*
2471 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2472 * Returns the version of the WCNSS WLAN API with which the HOST
2473 * device driver was compiled
2474 */
2475VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2476 tSirVersionType *pVersion)
2477{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302478 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 if ((NULL == pvosGCtx) || (NULL == pVersion))
2480 {
2481 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002482 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 VOS_ASSERT(0);
2484 return VOS_STATUS_E_FAILURE;
2485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2487 if (NULL == pWDA )
2488 {
2489 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002490 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 VOS_ASSERT(0);
2492 return VOS_STATUS_E_FAILURE;
2493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 *pVersion = pWDA->wcnssWlanCompiledVersion;
2495 return VOS_STATUS_SUCCESS;
2496}
Jeff Johnson295189b2012-06-20 16:38:30 -07002497/*
2498 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2499 * Returns the version of the WCNSS WLAN API with which the WCNSS
2500 * device driver was compiled
2501 */
2502VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2503 tSirVersionType *pVersion)
2504{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302505 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 if ((NULL == pvosGCtx) || (NULL == pVersion))
2507 {
2508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002509 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 VOS_ASSERT(0);
2511 return VOS_STATUS_E_FAILURE;
2512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2514 if (NULL == pWDA )
2515 {
2516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 VOS_ASSERT(0);
2519 return VOS_STATUS_E_FAILURE;
2520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 *pVersion = pWDA->wcnssWlanReportedVersion;
2522 return VOS_STATUS_SUCCESS;
2523}
Jeff Johnson295189b2012-06-20 16:38:30 -07002524/*
2525 * FUNCTION: WDA_GetWcnssSoftwareVersion
2526 * Returns the WCNSS Software version string
2527 */
2528VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2529 tANI_U8 *pVersion,
2530 tANI_U32 versionBufferSize)
2531{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302532 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002534 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 if ((NULL == pvosGCtx) || (NULL == pVersion))
2536 {
2537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002538 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 VOS_ASSERT(0);
2540 return VOS_STATUS_E_FAILURE;
2541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2543 if (NULL == pWDA )
2544 {
2545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002546 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 VOS_ASSERT(0);
2548 return VOS_STATUS_E_FAILURE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2551 return VOS_STATUS_SUCCESS;
2552}
Jeff Johnson295189b2012-06-20 16:38:30 -07002553/*
2554 * FUNCTION: WDA_GetWcnssHardwareVersion
2555 * Returns the WCNSS Hardware version string
2556 */
2557VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2558 tANI_U8 *pVersion,
2559 tANI_U32 versionBufferSize)
2560{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302561 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002563 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if ((NULL == pvosGCtx) || (NULL == pVersion))
2565 {
2566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002567 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 VOS_ASSERT(0);
2569 return VOS_STATUS_E_FAILURE;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2572 if (NULL == pWDA )
2573 {
2574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002575 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 VOS_ASSERT(0);
2577 return VOS_STATUS_E_FAILURE;
2578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2580 return VOS_STATUS_SUCCESS;
2581}
Jeff Johnson295189b2012-06-20 16:38:30 -07002582/*
2583 * FUNCTION: WDA_WniCfgDnld
2584 * Trigger CFG Download
2585 */
2586VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2587{
2588 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302589 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002590
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 if (NULL == pMac )
2592 {
2593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 VOS_ASSERT(0);
2596 return VOS_STATUS_E_FAILURE;
2597 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302598 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 return vosStatus;
2600}
Jeff Johnson295189b2012-06-20 16:38:30 -07002601/* -----------------------------------------------------------------
2602 * WDI interface
2603 * -----------------------------------------------------------------
2604 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002605/*
2606 * FUNCTION: WDA_suspendDataTxCallback
2607 * call back function called from TL after suspend Transmission
2608 */
2609VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2610 v_U8_t* ucSTAId,
2611 VOS_STATUS vosStatus)
2612{
2613 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002615 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 if (NULL == pWDA )
2617 {
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 VOS_ASSERT(0);
2621 return VOS_STATUS_E_FAILURE;
2622 }
2623 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2624 {
2625 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2626 }
2627 else
2628 {
2629 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 /* Trigger the event to bring the WDA TL suspend function to come
2632 * out of wait*/
2633 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2634 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002637 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 /* If TL suspended had timedout before this callback was called, resume back
2640 * TL.*/
2641 if (pWDA->txSuspendTimedOut)
2642 {
2643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002644 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 WDA_ResumeDataTx(pWDA);
2646 pWDA->txSuspendTimedOut = FALSE;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return VOS_STATUS_SUCCESS;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_suspendDataTx
2652 * Update TL to suspend the data Transmission
2653 */
2654VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2655{
2656 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2657 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002658
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if (pWDA->txSuspendTimedOut)
2663 {
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002665 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 return status;
2667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 /* Reset the event to be not signalled */
2669 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2670 if(!VOS_IS_STATUS_SUCCESS(status))
2671 {
2672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002673 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 return VOS_STATUS_E_FAILURE;
2675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002677 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 WDA_SuspendDataTxCallback);
2679 if(status != VOS_STATUS_SUCCESS)
2680 {
2681 return status;
2682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 /* Wait for the event to be set by the TL, to get the response of
2684 * suspending the TX queues, this event should be set by the Callback
2685 * function called by TL*/
2686 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2687 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2688 if(!VOS_IS_STATUS_SUCCESS(status))
2689 {
2690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2691 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 /* Set this flag to true when TL suspend times out, so that when TL
2694 * suspend eventually happens and calls the callback, TL can be resumed
2695 * right away by looking at this flag when true.*/
2696 pWDA->txSuspendTimedOut = TRUE;
2697 }
2698 else
2699 {
2700 pWDA->txSuspendTimedOut = FALSE;
2701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2703 {
2704 status = VOS_STATUS_SUCCESS;
2705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 return status;
2707}
Jeff Johnson295189b2012-06-20 16:38:30 -07002708/*
2709 * FUNCTION: WDA_resumeDataTx
2710 * Update TL to resume the data Transmission
2711 */
2712VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2713{
2714 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002715
2716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002718
2719 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 return status;
2721}
Jeff Johnson295189b2012-06-20 16:38:30 -07002722/*
2723 * FUNCTION: WDA_InitScanReqCallback
2724 * Trigger Init SCAN callback
2725 */
2726void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2727{
2728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2729 tWDA_CbContext *pWDA;
2730 tInitScanParams *pWDA_ScanParam ;
2731 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002733 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 if(NULL == pWdaParams)
2735 {
2736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002737 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 VOS_ASSERT(0) ;
2739 return ;
2740 }
2741 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2742 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 if(NULL == pWDA_ScanParam)
2744 {
2745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002746 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002747 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2749 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 return ;
2751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if(WDI_STATUS_SUCCESS != wdiStatus)
2753 {
2754 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 if(VOS_STATUS_SUCCESS != status)
2756 {
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 }
2760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 /* free WDI command buffer */
2762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302764
2765
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002767 /* without converting the Status to Failure or Success Just
2768 pass the same status to lim */
2769 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 /* send SCAN RSP message back to PE */
2771 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 return ;
2773}
2774
2775/*
2776 * FUNCTION: WDA_ProcessInitScanReq
2777 * Trigger Init SCAN in DAL
2778 */
2779VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2780 tInitScanParams *initScanParams)
2781{
2782 WDI_Status status = WDI_STATUS_SUCCESS ;
2783 WDI_InitScanReqParamsType *wdiInitScanParam =
2784 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2785 sizeof(WDI_InitScanReqParamsType)) ;
2786 tWDA_ReqParams *pWdaParams;
2787 tANI_U8 i = 0;
2788
2789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(NULL == wdiInitScanParam)
2792 {
2793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_ASSERT(0);
2796 return VOS_STATUS_E_NOMEM;
2797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2799 if(NULL == pWdaParams)
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0);
2804 vos_mem_free(wdiInitScanParam);
2805 return VOS_STATUS_E_NOMEM;
2806 }
2807
2808 /* Copy init Scan params to WDI structure */
2809 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2810 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2811 sizeof(tSirMacAddr)) ;
2812 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2813 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2814 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2816 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2818 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2820 {
2821 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2822 initScanParams->scanEntry.bssIdx[i] ;
2823 }
2824
2825 /* if Frame length, copy macMgmtHdr or WDI structure */
2826 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2827 {
2828 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2829 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2830 }
2831 wdiInitScanParam->wdiReqStatusCB = NULL ;
2832
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 /* Store Init Req pointer, as this will be used for response */
2834 pWdaParams->pWdaContext = pWDA;
2835 pWdaParams->wdaMsgParam = initScanParams;
2836 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 /* first try to suspend TX */
2838 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 if(WDI_STATUS_SUCCESS != status)
2840 {
2841 goto handleWdiFailure;
2842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 /* call DAL API to pass init scan request to DAL */
2844 status = WDI_InitScanReq(wdiInitScanParam,
2845 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 if(IS_WDI_STATUS_FAILURE(status))
2847 {
2848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2849 "error in WDA Init Scan, Resume Tx " );
2850 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 VOS_ASSERT(0) ;
2852
2853 goto handleWdiFailure;
2854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002856handleWdiFailure:
2857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2858 "Failure in WDI Api, free all the memory " );
2859 /* free WDI command buffer */
2860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2861 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* send Failure to PE */
2863 initScanParams->status = eSIR_FAILURE ;
2864 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 return CONVERT_WDI2VOS_STATUS(status) ;
2866}
2867
Jeff Johnson295189b2012-06-20 16:38:30 -07002868/*
2869 * FUNCTION: WDA_StartScanReqCallback
2870 * send Start SCAN RSP back to PE
2871 */
2872void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2873 void* pUserData)
2874{
2875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2876 tWDA_CbContext *pWDA;
2877 tStartScanParams *pWDA_ScanParam;
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 if(NULL == pWdaParams)
2881 {
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 VOS_ASSERT(0) ;
2885 return ;
2886 }
2887 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2888 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 if(NULL == pWDA_ScanParam)
2890 {
2891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002892 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002894 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 return ;
2896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2898 {
2899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002900 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002902 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 return ;
2904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2906 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002907
Jeff Johnson295189b2012-06-20 16:38:30 -07002908
2909 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002910 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 /* send SCAN RSP message back to PE */
2912 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 return ;
2914}
2915
Jeff Johnson295189b2012-06-20 16:38:30 -07002916/*
2917 * FUNCTION: WDA_ProcessStartScanReq
2918 * Trigger start SCAN in WDI
2919 */
2920VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2921 tStartScanParams *startScanParams)
2922{
2923 WDI_Status status = WDI_STATUS_SUCCESS;
2924 WDI_StartScanReqParamsType *wdiStartScanParams =
2925 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2926 sizeof(WDI_StartScanReqParamsType)) ;
2927 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 if(NULL == wdiStartScanParams)
2931 {
2932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 VOS_ASSERT(0);
2935 return VOS_STATUS_E_NOMEM;
2936 }
2937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2938 if(NULL == pWdaParams)
2939 {
2940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 VOS_ASSERT(0);
2943 vos_mem_free(wdiStartScanParams);
2944 return VOS_STATUS_E_NOMEM;
2945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* Copy init Scan params to WDI structure */
2947 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2948 wdiStartScanParams->wdiReqStatusCB = NULL ;
2949
Jeff Johnson295189b2012-06-20 16:38:30 -07002950 /* Store Init Req pointer, as this will be used for response */
2951 /* store Params pass it to WDI */
2952 pWdaParams->pWdaContext = pWDA;
2953 pWdaParams->wdaMsgParam = startScanParams;
2954 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 /* call DAL API to pass init scan request to DAL */
2956 status = WDI_StartScanReq(wdiStartScanParams,
2957 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 /* failure returned by WDI API */
2959 if(IS_WDI_STATUS_FAILURE(status))
2960 {
2961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2962 "Failure in Start Scan WDI API, free all the memory "
2963 "It should be due to previous abort scan." );
2964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2965 vos_mem_free(pWdaParams) ;
2966 startScanParams->status = eSIR_FAILURE ;
2967 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 return CONVERT_WDI2VOS_STATUS(status) ;
2970}
Jeff Johnson295189b2012-06-20 16:38:30 -07002971/*
2972 * FUNCTION: WDA_EndScanReqCallback
2973 * END SCAN callback
2974 */
2975void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2976{
2977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2978 tWDA_CbContext *pWDA;
2979 tEndScanParams *endScanParam;
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 if(NULL == pWdaParams)
2983 {
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 VOS_ASSERT(0) ;
2987 return ;
2988 }
2989 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2990 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(NULL == endScanParam)
2992 {
2993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002994 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2997 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 return ;
2999 }
3000
3001 /* Free WDI command buffer */
3002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3003 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003005 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 /* send response back to PE */
3007 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3008 return ;
3009}
3010
Jeff Johnson295189b2012-06-20 16:38:30 -07003011/*
3012 * FUNCTION: WDA_ProcessEndScanReq
3013 * Trigger END SCAN in WDI
3014 */
3015VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3016 tEndScanParams *endScanParams)
3017{
3018 WDI_Status status = WDI_STATUS_SUCCESS;
3019 WDI_EndScanReqParamsType *wdiEndScanParams =
3020 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3021 sizeof(WDI_EndScanReqParamsType)) ;
3022 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 if(NULL == wdiEndScanParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0);
3030 return VOS_STATUS_E_NOMEM;
3031 }
3032 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3033 if(NULL == pWdaParams)
3034 {
3035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 VOS_ASSERT(0);
3038 vos_mem_free(wdiEndScanParams);
3039 return VOS_STATUS_E_NOMEM;
3040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* Copy init Scan params to WDI structure */
3042 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3043 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 /* Store Init Req pointer, as this will be used for response */
3045 /* store Params pass it to WDI */
3046 pWdaParams->pWdaContext = pWDA;
3047 pWdaParams->wdaMsgParam = endScanParams;
3048 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 /* call DAL API to pass init scan request to DAL */
3050 status = WDI_EndScanReq(wdiEndScanParams,
3051 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 if(IS_WDI_STATUS_FAILURE(status))
3053 {
3054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3055 "Failure in End Scan WDI API, free all the memory "
3056 "It should be due to previous abort scan." );
3057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3058 vos_mem_free(pWdaParams) ;
3059 endScanParams->status = eSIR_FAILURE ;
3060 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 return CONVERT_WDI2VOS_STATUS(status) ;
3063}
Jeff Johnson295189b2012-06-20 16:38:30 -07003064/*
3065 * FUNCTION: WDA_FinishScanReqCallback
3066 * Trigger Finish SCAN callback
3067 */
3068void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3069{
3070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3071 tWDA_CbContext *pWDA;
3072 tFinishScanParams *finishScanParam;
3073 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 if(NULL == pWdaParams)
3077 {
3078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 VOS_ASSERT(0) ;
3081 return ;
3082 }
3083
3084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3085 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 if(NULL == finishScanParam)
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3092 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 return ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3096 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 /*
3098 * Now Resume TX, if we reached here means, TX is already suspended, we
3099 * have to resume it unconditionaly
3100 */
3101 status = WDA_ResumeDataTx(pWDA) ;
3102
3103 if(VOS_STATUS_SUCCESS != status)
3104 {
3105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003106 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003108 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3110 return ;
3111}
Jeff Johnson295189b2012-06-20 16:38:30 -07003112/*
3113 * FUNCTION: WDA_ProcessFinshScanReq
3114 * Trigger Finish SCAN in WDI
3115 */
3116VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3117 tFinishScanParams *finishScanParams)
3118{
3119 WDI_Status status = WDI_STATUS_SUCCESS;
3120 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3121 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3122 sizeof(WDI_FinishScanReqParamsType)) ;
3123 tWDA_ReqParams *pWdaParams ;
3124 tANI_U8 i = 0;
3125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003126 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 if(NULL == wdiFinishScanParams)
3128 {
3129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 VOS_ASSERT(0);
3132 return VOS_STATUS_E_NOMEM;
3133 }
3134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3135 if(NULL == pWdaParams)
3136 {
3137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 VOS_ASSERT(0);
3140 vos_mem_free(wdiFinishScanParams);
3141 return VOS_STATUS_E_NOMEM;
3142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 /* Copy init Scan params to WDI structure */
3144 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3145 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3146 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3148 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3149 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3150 finishScanParams->frameLength ;
3151 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3152 finishScanParams->currentOperChannel ;
3153 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3154 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3155 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3157 {
3158 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3159 finishScanParams->scanEntry.bssIdx[i] ;
3160 }
3161
3162
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 /* if Frame length, copy macMgmtHdr ro WDI structure */
3164 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3165 {
3166 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3167 &finishScanParams->macMgmtHdr,
3168 sizeof(WDI_MacMgmtHdr)) ;
3169 }
3170 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 /* Store Init Req pointer, as this will be used for response */
3172 /* store Params pass it to WDI */
3173 pWdaParams->pWdaContext = pWDA;
3174 pWdaParams->wdaMsgParam = finishScanParams;
3175 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 /* call DAL API to pass init scan request to DAL */
3177 status = WDI_FinishScanReq(wdiFinishScanParams,
3178 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003179
Jeff Johnson295189b2012-06-20 16:38:30 -07003180
3181 /*
3182 * WDI API returns failure..
3183 */
3184 if(IS_WDI_STATUS_FAILURE( status))
3185 {
3186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3187 "Failure in Finish Scan WDI API, free all the memory " );
3188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3189 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 finishScanParams->status = eSIR_FAILURE ;
3191 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return CONVERT_WDI2VOS_STATUS(status) ;
3194}
Jeff Johnson295189b2012-06-20 16:38:30 -07003195/*---------------------------------------------------------------------
3196 * ASSOC API's
3197 *---------------------------------------------------------------------
3198 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003199/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303200 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 * Trigger Init SCAN callback
3202 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303203void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003204{
3205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3206 tWDA_CbContext *pWDA;
3207 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 if(NULL == pWdaParams)
3211 {
3212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 VOS_ASSERT(0) ;
3215 return ;
3216 }
3217 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3218 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 /* reset macBSSID */
3222 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* reset macSTASelf */
3224 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003225 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 return ;
3228}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303229
3230/*
3231 * FUNCTION: WDA_JoinReqCallback
3232 * Free memory and send SWITCH CHANNEL RSP back to PE.
3233 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3234 */
3235void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3236{
3237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3238 tWDA_CbContext *pWDA;
3239 tSwitchChannelParams *joinReqParam;
3240
3241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3242 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3243
3244 if(NULL == pWdaParams)
3245 {
3246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3247 "%s: pWdaParams received NULL", __func__);
3248 VOS_ASSERT(0);
3249 return;
3250 }
3251
3252 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3253 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3254 joinReqParam->status = wdiStatus;
3255
3256 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3257 {
3258 /* reset macBSSID */
3259 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3260 /* reset macSTASelf */
3261 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3262
3263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3264 vos_mem_free(pWdaParams);
3265 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3266 }
3267
3268 return;
3269}
3270
Jeff Johnson295189b2012-06-20 16:38:30 -07003271/*
3272 * FUNCTION: WDA_ProcessJoinReq
3273 * Trigger Join REQ in WDI
3274 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003275VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3276 tSwitchChannelParams* joinReqParam)
3277{
3278 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 WDI_JoinReqParamsType *wdiJoinReqParam =
3280 (WDI_JoinReqParamsType *)vos_mem_malloc(
3281 sizeof(WDI_JoinReqParamsType)) ;
3282 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003284 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 if(NULL == wdiJoinReqParam)
3286 {
3287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003290 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 return VOS_STATUS_E_NOMEM;
3292 }
3293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3294 if(NULL == pWdaParams)
3295 {
3296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 VOS_ASSERT(0);
3299 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003300 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 return VOS_STATUS_E_NOMEM;
3302 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003303
3304 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3305 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3306 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3307 {
3308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3309 "%s: received join request when BSSID or self-STA is NULL "
3310 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003312 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3313 VOS_ASSERT(0);
3314 vos_mem_free(wdiJoinReqParam);
3315 vos_mem_free(pWdaParams);
3316 joinReqParam->status = eSIR_FAILURE ;
3317 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3318 return VOS_STATUS_E_INVAL;
3319 }
3320
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 /* copy the BSSID for pWDA */
3322 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3323 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3325 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3327 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003328#ifdef WLAN_FEATURE_VOWIFI
3329 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3330 joinReqParam->maxTxPower ;
3331#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3333 joinReqParam->localPowerConstraint ;
3334#endif
3335 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3336 joinReqParam->secondaryChannelOffset ;
3337 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3338
Sachin Ahuja935eda782014-07-30 14:57:41 +05303339 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3340 wdiJoinReqParam->pUserData = pWdaParams;
3341
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 /* Store Init Req pointer, as this will be used for response */
3343 /* store Params pass it to WDI */
3344 pWdaParams->pWdaContext = pWDA;
3345 pWdaParams->wdaMsgParam = joinReqParam;
3346 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303348 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 if(IS_WDI_STATUS_FAILURE(status))
3350 {
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3352 "Failure in Join WDI API, free all the memory " );
3353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3354 vos_mem_free(pWdaParams) ;
3355 joinReqParam->status = eSIR_FAILURE ;
3356 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 return CONVERT_WDI2VOS_STATUS(status) ;
3359}
Jeff Johnson295189b2012-06-20 16:38:30 -07003360/*
3361 * FUNCTION: WDA_SwitchChannelReqCallback
3362 * send Switch channel RSP back to PE
3363 */
3364void WDA_SwitchChannelReqCallback(
3365 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3366{
3367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3368 tWDA_CbContext *pWDA;
3369 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 if(NULL == pWdaParams)
3373 {
3374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 VOS_ASSERT(0) ;
3377 return ;
3378 }
3379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3380 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3381
3382#ifdef WLAN_FEATURE_VOWIFI
3383 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3384#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3386 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003388 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 return ;
3391}
Jeff Johnson295189b2012-06-20 16:38:30 -07003392/*
3393 * FUNCTION: WDA_ProcessChannelSwitchReq
3394 * Request to WDI to switch channel REQ params.
3395 */
3396VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3397 tSwitchChannelParams *pSwitchChanParams)
3398{
3399 WDI_Status status = WDI_STATUS_SUCCESS ;
3400 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3401 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3402 sizeof(WDI_SwitchChReqParamsType)) ;
3403 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003405 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 if(NULL == wdiSwitchChanParam)
3407 {
3408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 VOS_ASSERT(0);
3411 return VOS_STATUS_E_NOMEM;
3412 }
3413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3414 if(NULL == pWdaParams)
3415 {
3416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 VOS_ASSERT(0);
3419 vos_mem_free(wdiSwitchChanParam);
3420 return VOS_STATUS_E_NOMEM;
3421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3423#ifndef WLAN_FEATURE_VOWIFI
3424 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3425 pSwitchChanParams->localPowerConstraint;
3426#endif
3427 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3428 pSwitchChanParams->secondaryChannelOffset;
3429 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 /* Store req pointer, as this will be used for response */
3431 /* store Params pass it to WDI */
3432 pWdaParams->pWdaContext = pWDA;
3433 pWdaParams->wdaMsgParam = pSwitchChanParams;
3434 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003435#ifdef WLAN_FEATURE_VOWIFI
3436 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3437 = pSwitchChanParams->maxTxPower;
3438 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3439 pSwitchChanParams ->selfStaMacAddr,
3440 sizeof(tSirMacAddr));
3441#endif
3442 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3443 pSwitchChanParams->bssId,
3444 sizeof(tSirMacAddr));
3445
3446 status = WDI_SwitchChReq(wdiSwitchChanParam,
3447 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 if(IS_WDI_STATUS_FAILURE(status))
3449 {
3450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3451 "Failure in process channel switch Req WDI API, free all the memory " );
3452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3453 vos_mem_free(pWdaParams) ;
3454 pSwitchChanParams->status = eSIR_FAILURE ;
3455 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 return CONVERT_WDI2VOS_STATUS(status) ;
3458}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003459
3460/*
3461 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3462 * send Switch channel RSP back to PE
3463 */
3464void WDA_SwitchChannelReqCallback_V1(
3465 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3466 void* pUserData)
3467{
3468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3469 tWDA_CbContext *pWDA;
3470 tSwitchChannelParams *pSwitchChanParams;
3471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3472 "<------ %s " ,__func__);
3473
3474 if (NULL == pWdaParams)
3475 {
3476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3477 "%s: pWdaParams received NULL", __func__);
3478 VOS_ASSERT(0);
3479 return ;
3480 }
3481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3482 pSwitchChanParams =
3483 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3484 pSwitchChanParams->channelSwitchSrc =
3485 wdiSwitchChanRsp->channelSwitchSrc;
3486#ifdef WLAN_FEATURE_VOWIFI
3487 pSwitchChanParams->txMgmtPower =
3488 wdiSwitchChanRsp->ucTxMgmtPower;
3489#endif
3490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3491 vos_mem_free(pWdaParams);
3492 pSwitchChanParams->status =
3493 wdiSwitchChanRsp->wdiStatus ;
3494 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3495 (void *)pSwitchChanParams , 0);
3496 return;
3497}
3498
3499/*
3500 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3501 * Request to WDI to switch channel REQ params.
3502 */
3503VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3504 tSwitchChannelParams *pSwitchChanParams)
3505{
3506 WDI_Status status = WDI_STATUS_SUCCESS ;
3507 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3508 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3509 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3510 tWDA_ReqParams *pWdaParams ;
3511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3512 "------> %s " ,__func__);
3513 if (NULL == wdiSwitchChanParam)
3514 {
3515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3516 "%s: VOS MEM Alloc Failure", __func__);
3517 VOS_ASSERT(0);
3518 return VOS_STATUS_E_NOMEM;
3519 }
3520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3521 if (NULL == pWdaParams)
3522 {
3523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3524 "%s: VOS MEM Alloc Failure", __func__);
3525 VOS_ASSERT(0);
3526 vos_mem_free(wdiSwitchChanParam);
3527 return VOS_STATUS_E_NOMEM;
3528 }
3529 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3530 pSwitchChanParams->channelSwitchSrc;
3531
3532 wdiSwitchChanParam->wdiChInfo.ucChannel =
3533 pSwitchChanParams->channelNumber;
3534#ifndef WLAN_FEATURE_VOWIFI
3535 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3536 pSwitchChanParams->localPowerConstraint;
3537#endif
3538 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3539 pSwitchChanParams->secondaryChannelOffset;
3540 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3541 /* Store req pointer, as this will be used for response */
3542 /* store Params pass it to WDI */
3543 pWdaParams->pWdaContext = pWDA;
3544 pWdaParams->wdaMsgParam = pSwitchChanParams;
3545 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3546#ifdef WLAN_FEATURE_VOWIFI
3547 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3548 pSwitchChanParams->maxTxPower;
3549 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3550 pSwitchChanParams ->selfStaMacAddr,
3551 sizeof(tSirMacAddr));
3552#endif
3553 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3554 pSwitchChanParams->bssId,
3555 sizeof(tSirMacAddr));
3556
3557 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3558 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3559 pWdaParams);
3560 if (IS_WDI_STATUS_FAILURE(status))
3561 {
3562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3563 "Failure in process channel switch Req WDI "
3564 "API, free all the memory " );
3565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3566 vos_mem_free(pWdaParams) ;
3567 pSwitchChanParams->status = eSIR_FAILURE ;
3568 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3569 (void *)pSwitchChanParams, 0) ;
3570 }
3571 return CONVERT_WDI2VOS_STATUS(status) ;
3572}
3573
Jeff Johnson295189b2012-06-20 16:38:30 -07003574/*
3575 * FUNCTION: WDA_ConfigBssReqCallback
3576 * config BSS Req Callback, called by WDI
3577 */
3578void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3579 ,void* pUserData)
3580{
3581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3582 tWDA_CbContext *pWDA;
3583 tAddBssParams *configBssReqParam;
3584 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 if(NULL == pWdaParams)
3588 {
3589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003590 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 VOS_ASSERT(0) ;
3592 return ;
3593 }
3594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3595 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3596 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003598 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3600 {
3601 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3602 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3604 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3605 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3606
3607 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3608 {
3609 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3610 {
3611 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3612 staConfigBssParam->staType = STA_ENTRY_BSSID;
3613 }
3614 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3615 (staConfigBssParam->staType == STA_ENTRY_SELF))
3616 {
3617 /* This is the 1st add BSS Req for the BTAMP STA */
3618 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3619 staConfigBssParam->staType = STA_ENTRY_BSSID;
3620 }
3621 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3622 (staConfigBssParam->staType == STA_ENTRY_PEER))
3623 {
3624 /* This is the 2nd ADD BSS Request that is sent
3625 * on the BTAMP STA side. The Sta type is
3626 * set to STA_ENTRY_PEER here.*/
3627 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3628 }
3629 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3630 (staConfigBssParam->staType == STA_ENTRY_SELF))
3631 {
3632 /* statype is already set by PE.
3633 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3634 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3635 staConfigBssParam->staType = STA_ENTRY_BSSID;
3636 }
3637 else
3638 {
3639 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3640 staConfigBssParam->staType = STA_ENTRY_PEER;
3641 }
3642 }
3643 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3644 {
3645 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3646 staConfigBssParam->staType = STA_ENTRY_SELF;
3647 }
3648 else
3649 {
3650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3651 "Invalid operation mode specified");
3652 VOS_ASSERT(0);
3653 }
3654
3655 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3660 sizeof(tSirMacAddr));
3661 staConfigBssParam->txChannelWidthSet =
3662 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3664 staConfigBssParam->htCapable)
3665 {
3666 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3667 wdiConfigBssRsp->ucBSSIdx;
3668 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3669 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303670 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3671 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3674 wdiConfigBssRsp->ucBSSIdx,
3675 wdiConfigBssRsp->ucSTAIdx))
3676 {
3677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003678 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 VOS_ASSERT(0) ;
3680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3682 {
3683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003684 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 VOS_ASSERT(0) ;
3686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003687#ifdef WLAN_FEATURE_VOWIFI
3688 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3689#endif
3690 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303691 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3692 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3694 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 return ;
3697}
Jeff Johnson295189b2012-06-20 16:38:30 -07003698/*
3699 * FUNCTION: WDA_UpdateEdcaParamsForAC
3700 * Update WDI EDCA params with PE edca params
3701 */
3702void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3703 WDI_EdcaParamRecord *wdiEdcaParam,
3704 tSirMacEdcaParamRecord *macEdcaParam)
3705{
3706 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3707 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3708 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3709 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3710 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3711 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3712}
Jeff Johnson295189b2012-06-20 16:38:30 -07003713/*
3714 * FUNCTION: WDA_ProcessConfigBssReq
3715 * Configure BSS before starting Assoc with AP
3716 */
3717VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3718 tAddBssParams* configBssReqParam)
3719{
3720 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303721 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003724 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303725 if (NULL == configBssReqParam)
3726 {
3727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3728 "%s: configBssReqParam is NULL", __func__);
3729 return VOS_STATUS_E_INVAL;
3730 }
3731
3732 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3733 sizeof(WDI_ConfigBSSReqParamsType)) ;
3734
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 if(NULL == wdiConfigBssReqParam)
3736 {
3737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 VOS_ASSERT(0);
3740 return VOS_STATUS_E_NOMEM;
3741 }
3742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3743 if(NULL == pWdaParams)
3744 {
3745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 VOS_ASSERT(0);
3748 vos_mem_free(wdiConfigBssReqParam);
3749 return VOS_STATUS_E_NOMEM;
3750 }
Kiran4a17ebe2013-01-31 10:43:43 -08003751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3752 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3755 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 /* Store Init Req pointer, as this will be used for response */
3757 /* store Params pass it to WDI */
3758 pWdaParams->pWdaContext = pWDA;
3759 pWdaParams->wdaMsgParam = configBssReqParam;
3760 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3762 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 if(IS_WDI_STATUS_FAILURE(status))
3764 {
3765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3766 "Failure in Config BSS WDI API, free all the memory " );
3767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3768 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003769 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 return CONVERT_WDI2VOS_STATUS(status) ;
3773}
Jeff Johnson295189b2012-06-20 16:38:30 -07003774#ifdef ENABLE_HAL_COMBINED_MESSAGES
3775/*
3776 * FUNCTION: WDA_PostAssocReqCallback
3777 * Post ASSOC req callback, send RSP back to PE
3778 */
3779void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3780 void* pUserData)
3781{
3782 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3783 tPostAssocParams *postAssocReqParam =
3784 (tPostAssocParams *)pWDA->wdaMsgParam ;
3785 /*STA context within the BSS Params*/
3786 tAddStaParams *staPostAssocParam =
3787 &postAssocReqParam->addBssParams.staContext ;
3788 /*STA Params for self STA*/
3789 tAddStaParams *selfStaPostAssocParam =
3790 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003794 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3796 {
3797 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3798 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3799 sizeof(tSirMacAddr)) ;
3800 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3801 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3802 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3804 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303805 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003806 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3807 pWDA->wdaWdiApiMsgParam = NULL;
3808 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 return ;
3811}
Jeff Johnson295189b2012-06-20 16:38:30 -07003812/*
3813 * FUNCTION: WDA_ProcessPostAssocReq
3814 * Trigger POST ASSOC processing in WDI
3815 */
3816VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3817 tPostAssocParams *postAssocReqParam)
3818{
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 WDI_Status status = WDI_STATUS_SUCCESS ;
3820
3821 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3822 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3823 sizeof(WDI_PostAssocReqParamsType)) ;
3824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003826
Jeff Johnson295189b2012-06-20 16:38:30 -07003827 if(NULL == wdiPostAssocReqParam)
3828 {
3829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 VOS_ASSERT(0);
3832 return VOS_STATUS_E_NOMEM;
3833 }
3834
3835 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3836 {
3837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003838 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 VOS_ASSERT(0);
3840 return VOS_STATUS_E_FAILURE;
3841 }
3842
Jeff Johnson295189b2012-06-20 16:38:30 -07003843 /* update BSS params into WDI structure */
3844 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3845 &postAssocReqParam->addBssParams) ;
3846 /* update STA params into WDI structure */
3847 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3848 &postAssocReqParam->addStaParams) ;
3849
3850 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3851 postAssocReqParam->addBssParams.highPerformance;
3852 WDA_UpdateEdcaParamsForAC(pWDA,
3853 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3854 &postAssocReqParam->addBssParams.acbe);
3855 WDA_UpdateEdcaParamsForAC(pWDA,
3856 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3857 &postAssocReqParam->addBssParams.acbk);
3858 WDA_UpdateEdcaParamsForAC(pWDA,
3859 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3860 &postAssocReqParam->addBssParams.acvi);
3861 WDA_UpdateEdcaParamsForAC(pWDA,
3862 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3863 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 /* Store Init Req pointer, as this will be used for response */
3865 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 /* store Params pass it to WDI */
3867 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3869 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 if(IS_WDI_STATUS_FAILURE(status))
3871 {
3872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3873 "Failure in Post Assoc WDI API, free all the memory " );
3874 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3875 pWDA->wdaWdiApiMsgParam = NULL;
3876 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 return CONVERT_WDI2VOS_STATUS(status) ;
3881}
3882#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003883/*
3884 * FUNCTION: WDA_AddStaReqCallback
3885 * ADD STA req callback, send RSP back to PE
3886 */
3887void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3888 void* pUserData)
3889{
3890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3891 tWDA_CbContext *pWDA;
3892 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 if(NULL == pWdaParams)
3896 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 VOS_ASSERT(0) ;
3899 return ;
3900 }
3901 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3902 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003904 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3906 {
3907 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3908 /*TODO: UMAC structure doesn't have these fields*/
3909 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3910 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3911 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3912 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3913 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3914 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003915#ifdef FEATURE_WLAN_TDLS
3916 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3917 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3918#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003920#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 {
3922 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3923 wdiConfigStaRsp->ucBssIdx;
3924 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3925 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303926 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3927 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 }
3929 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3930 {
3931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003932 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 VOS_ASSERT(0) ;
3934 return ;
3935 }
3936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3938 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003939 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 return ;
3941}
Jeff Johnson295189b2012-06-20 16:38:30 -07003942/*
3943 * FUNCTION: WDA_ConfigStaReq
3944 * Trigger Config STA processing in WDI
3945 */
3946VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3947 tAddStaParams *addStaReqParam)
3948{
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3951 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3952 sizeof(WDI_ConfigSTAReqParamsType)) ;
3953 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 if(NULL == wdiConfigStaReqParam)
3957 {
3958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 VOS_ASSERT(0);
3961 return VOS_STATUS_E_NOMEM;
3962 }
3963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3964 if(NULL == pWdaParams)
3965 {
3966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 VOS_ASSERT(0);
3969 vos_mem_free(wdiConfigStaReqParam);
3970 return VOS_STATUS_E_NOMEM;
3971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003972 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 /* update STA params into WDI structure */
3974 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3975 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 /* Store Init Req pointer, as this will be used for response */
3977 /* store Params pass it to WDI */
3978 pWdaParams->pWdaContext = pWDA;
3979 pWdaParams->wdaMsgParam = addStaReqParam;
3980 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3982 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if(IS_WDI_STATUS_FAILURE(status))
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3986 "Failure in Config STA WDI API, free all the memory " );
3987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3988 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003990 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 return CONVERT_WDI2VOS_STATUS(status) ;
3993}
Jeff Johnson295189b2012-06-20 16:38:30 -07003994/*
3995 * FUNCTION: WDA_DelBSSReqCallback
3996 * Dens DEL BSS RSP back to PE
3997 */
3998void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3999 void* pUserData)
4000{
4001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4002 tWDA_CbContext *pWDA;
4003 tDeleteBssParams *delBssReqParam;
4004 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004006 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 if(NULL == pWdaParams)
4008 {
4009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004010 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 VOS_ASSERT(0) ;
4012 return ;
4013 }
4014 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4015 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004016 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4018 {
4019 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4020 sizeof(tSirMacAddr)) ;
4021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4023 {
4024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004025 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004026 VOS_ASSERT(0) ;
4027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4029 {
4030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 VOS_ASSERT(0) ;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4035 {
4036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004037 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 VOS_ASSERT(0) ;
4039 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304040
4041 WLANTL_StartForwarding(staIdx,0,0);
4042
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4044 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 /* reset the the system role*/
4046 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4047
4048 /* Reset the BA related information */
4049 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4050 {
4051 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4052 {
4053 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4054 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304055 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 /* Reset framesTxed counters here */
4057 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4058 {
4059 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4060 }
4061 }
4062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 return ;
4065}
4066
Jeff Johnson295189b2012-06-20 16:38:30 -07004067/*
4068 * FUNCTION: WDA_ProcessDelBssReq
4069 * Init DEL BSS req with WDI
4070 */
4071VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4072 tDeleteBssParams *delBssParam)
4073{
4074 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4076 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4077 sizeof(WDI_DelBSSReqParamsType)) ;
4078 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004080 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 if(NULL == wdiDelBssReqParam)
4082 {
4083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004084 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 VOS_ASSERT(0);
4086 return VOS_STATUS_E_NOMEM;
4087 }
4088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4089 if(NULL == pWdaParams)
4090 {
4091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 VOS_ASSERT(0);
4094 vos_mem_free(wdiDelBssReqParam);
4095 return VOS_STATUS_E_NOMEM;
4096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4098 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4099
4100 /* Store Init Req pointer, as this will be used for response */
4101 /* store Params pass it to WDI */
4102 pWdaParams->pWdaContext = pWDA;
4103 pWdaParams->wdaMsgParam = delBssParam;
4104 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 status = WDI_DelBSSReq(wdiDelBssReqParam,
4106 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 if(IS_WDI_STATUS_FAILURE(status))
4108 {
4109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4110 "Failure in Del BSS WDI API, free all the memory " );
4111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4112 vos_mem_free(pWdaParams) ;
4113 delBssParam->status = eSIR_FAILURE ;
4114 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 return CONVERT_WDI2VOS_STATUS(status) ;
4117}
Jeff Johnson295189b2012-06-20 16:38:30 -07004118/*
4119 * FUNCTION: WDA_DelSTAReqCallback
4120 * Dens DEL STA RSP back to PE
4121 */
4122void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4123 void* pUserData)
4124{
4125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4126 tWDA_CbContext *pWDA;
4127 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004129 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 if(NULL == pWdaParams)
4131 {
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004133 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 VOS_ASSERT(0) ;
4135 return ;
4136 }
4137 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4138 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004139 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4141 {
4142 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4143 {
4144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004145 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 VOS_ASSERT(0) ;
4147 }
4148 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304149 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 }
4151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4152 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 /*Reset the BA information corresponding to this STAIdx */
4154 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4155 WDA_INVALID_STA_INDEX;
4156 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304157 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 return ;
4160}
Jeff Johnson295189b2012-06-20 16:38:30 -07004161/*
4162 * FUNCTION: WDA_ProcessDelStaReq
4163 * Init DEL STA req with WDI
4164 */
4165VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4166 tDeleteStaParams *delStaParam)
4167{
4168 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4170 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4171 sizeof(WDI_DelSTAReqParamsType)) ;
4172 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 if(NULL == wdiDelStaReqParam)
4176 {
4177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 VOS_ASSERT(0);
4180 return VOS_STATUS_E_NOMEM;
4181 }
4182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4183 if(NULL == pWdaParams)
4184 {
4185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 VOS_ASSERT(0);
4188 vos_mem_free(wdiDelStaReqParam);
4189 return VOS_STATUS_E_NOMEM;
4190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4192 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 /* Store Init Req pointer, as this will be used for response */
4194 /* store Params pass it to WDI */
4195 pWdaParams->pWdaContext = pWDA;
4196 pWdaParams->wdaMsgParam = delStaParam;
4197 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 status = WDI_DelSTAReq(wdiDelStaReqParam,
4199 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 if(IS_WDI_STATUS_FAILURE(status))
4201 {
4202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4203 "Failure in Del STA WDI API, free all the memory status = %d",
4204 status );
4205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4206 vos_mem_free(pWdaParams) ;
4207 delStaParam->status = eSIR_FAILURE ;
4208 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 return CONVERT_WDI2VOS_STATUS(status) ;
4211}
Jeff Johnson295189b2012-06-20 16:38:30 -07004212void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304216 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if(NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0) ;
4224 return ;
4225 }
4226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4227 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4229 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4231 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4232 pwdiAddSTASelfRsp->macSelfSta,
4233 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304234 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4235 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4236 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4237 {
4238 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4239 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 return ;
4243}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304244
Jeff Johnson295189b2012-06-20 16:38:30 -07004245/*
4246 * FUNCTION: WDA_ProcessAddStaSelfReq
4247 *
4248 */
4249VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4250{
4251 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004252 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4254 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4255 sizeof(WDI_AddSTASelfReqParamsType)) ;
4256 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004258 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304259 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 if( NULL == wdiAddStaSelfReq )
4261 {
4262 VOS_ASSERT( 0 );
4263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004264 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304265 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4266 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 return( VOS_STATUS_E_NOMEM );
4268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 if( NULL == pWdaParams )
4271 {
4272 VOS_ASSERT( 0 );
4273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004274 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304275 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4276 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 vos_mem_free(wdiAddStaSelfReq) ;
4278 return( VOS_STATUS_E_NOMEM );
4279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004282 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 /* Store Init Req pointer, as this will be used for response */
4284 /* store Params pass it to WDI */
4285 pWdaParams->pWdaContext = pWDA;
4286 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4287 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004288 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004289
Jeff Johnson43971f52012-07-17 12:26:56 -07004290 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 {
4292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4293 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004294 wstatus );
4295 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4297 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304298 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4299 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 pAddStaSelfReq->status = eSIR_FAILURE ;
4301 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4302 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004303 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004304}
Jeff Johnson295189b2012-06-20 16:38:30 -07004305/*
4306 * FUNCTION: WDA_DelSTASelfRespCallback
4307 *
4308 */
4309void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4310 wdiDelStaSelfRspParams , void* pUserData)
4311{
4312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4313 tWDA_CbContext *pWDA;
4314 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 if (NULL == pWdaParams)
4318 {
4319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004320 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 VOS_ASSERT(0);
4322 return;
4323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4325 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004327 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328
4329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
4331
4332 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 return ;
4334}
Jeff Johnson295189b2012-06-20 16:38:30 -07004335/*
4336 * FUNCTION: WDA_DelSTASelfReqCallback
4337 *
4338 */
4339void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4340 void* pUserData)
4341{
4342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4343 tWDA_CbContext *pWDA;
4344 tDelStaSelfParams *delStaSelfParams;
4345
4346 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304347 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004348 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004349
4350 if (NULL == pWdaParams)
4351 {
4352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004353 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 VOS_ASSERT(0);
4355 return;
4356 }
4357
4358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4359 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4360
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004361 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004362
4363 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4364 {
4365 VOS_ASSERT(0);
4366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4367 vos_mem_free(pWdaParams) ;
4368 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4369 }
4370
4371 return ;
4372}
4373
4374/*
4375 * FUNCTION: WDA_DelSTASelfReq
4376 * Trigger Config STA processing in WDI
4377 */
4378VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4379 tDelStaSelfParams* pDelStaSelfReqParam)
4380{
4381 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004382 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 tWDA_ReqParams *pWdaParams = NULL;
4384 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4385 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4386 sizeof(WDI_DelSTASelfReqParamsType)) ;
4387
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 if( NULL == wdiDelStaSelfReq )
4391 {
4392 VOS_ASSERT( 0 );
4393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004394 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 return( VOS_STATUS_E_NOMEM );
4396 }
4397
4398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4399 if( NULL == pWdaParams )
4400 {
4401 VOS_ASSERT( 0 );
4402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004403 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 vos_mem_free(wdiDelStaSelfReq) ;
4405 return( VOS_STATUS_E_NOMEM );
4406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 pWdaParams->pWdaContext = pWDA;
4408 /* Store param pointer as passed in by caller */
4409 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4410 /* store Params pass it to WDI */
4411 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4413 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4414
4415 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4416 wdiDelStaSelfReq->pUserData = pWdaParams;
4417
Jeff Johnson43971f52012-07-17 12:26:56 -07004418 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4420
Jeff Johnson43971f52012-07-17 12:26:56 -07004421 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 {
4423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4424 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4425 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004426 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4428 vos_mem_free(pWdaParams) ;
4429 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4430 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4431 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004432 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004433}
4434
Jeff Johnson295189b2012-06-20 16:38:30 -07004435/*
4436 * FUNCTION: WDA_SendMsg
4437 * Send Message back to PE
4438 */
4439void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4440 void *pBodyptr, tANI_U32 bodyVal)
4441{
4442 tSirMsgQ msg = {0} ;
4443 tANI_U32 status = VOS_STATUS_SUCCESS ;
4444 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 msg.type = msgType;
4446 msg.bodyval = bodyVal;
4447 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 if (VOS_STATUS_SUCCESS != status)
4450 {
4451 if(NULL != pBodyptr)
4452 {
4453 vos_mem_free(pBodyptr);
4454 }
4455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004456 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 VOS_ASSERT(0) ;
4458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 return ;
4460}
Jeff Johnson295189b2012-06-20 16:38:30 -07004461/*
4462 * FUNCTION: WDA_UpdateBSSParams
4463 * Translated WDA/PE BSS info into WDI BSS info..
4464 */
4465void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4466 WDI_ConfigBSSReqInfoType *wdiBssParams,
4467 tAddBssParams *wdaBssParams)
4468{
4469 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304470 v_U8_t i = 0;
4471
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 /* copy bssReq Params to WDI structure */
4473 vos_mem_copy(wdiBssParams->macBSSID,
4474 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4475 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4476 sizeof(tSirMacAddr)) ;
4477 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4478 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4479 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 wdiBssParams->ucShortSlotTimeSupported =
4481 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4483 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4484 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4485 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4486 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4487
4488 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4489 wdiBssParams->ucTXOPProtectionFullSupport =
4490 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4492 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4495 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4496 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4497 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4498
Chet Lanctot186b5732013-03-18 10:26:30 -07004499 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4500
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 /* copy SSID into WDI structure */
4502 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4503 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4504 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4506 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004508#ifdef WLAN_FEATURE_VOWIFI
4509 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4510#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004513#ifdef WLAN_FEATURE_VOWIFI_11R
4514 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 if(wdiBssParams->bExtSetStaKeyParamValid)
4516 {
4517 /* copy set STA key params to WDI structure */
4518 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4519 wdaBssParams->extSetStaKeyParam.staIdx;
4520 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4521 wdaBssParams->extSetStaKeyParam.encType;
4522 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4523 wdaBssParams->extSetStaKeyParam.wepType;
4524 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4525 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4527 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004528 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004529 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4530 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4531 {
4532 WDA_GetWepKeysFromCfg( pWDA,
4533 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4534 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4535 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4536 }
4537 else
4538 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4540 keyIndex++)
4541 {
4542 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4543 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4544 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4545 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4546 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4547 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304548
4549 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4550 {
4551 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4552 {
4553 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4554 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4555 }
4556
4557 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4558 {
4559 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4560 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4561 }
4562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4563 FL("%s: Negated Keys"), __func__);
4564 }
4565 else
4566 {
4567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4568 FL("%s: No change in Keys "), __func__);
4569 vos_mem_copy(
4570 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4571 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4572 WLAN_MAX_KEY_RSC_LEN);
4573 vos_mem_copy(
4574 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4575 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4576 SIR_MAC_MAX_KEY_LENGTH);
4577 }
4578
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4580 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4581 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4582 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304584 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 }
4587 }
4588 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4589 }
4590 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4591 {
4592 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4593 sizeof(wdaBssParams->extSetStaKeyParam) );
4594 }
4595#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004596#ifdef WLAN_FEATURE_11AC
4597 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4598 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4599#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004600
4601 return ;
4602}
Jeff Johnson295189b2012-06-20 16:38:30 -07004603/*
4604 * FUNCTION: WDA_UpdateSTAParams
4605 * Translated WDA/PE BSS info into WDI BSS info..
4606 */
4607void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4608 WDI_ConfigStaReqInfoType *wdiStaParams,
4609 tAddStaParams *wdaStaParams)
4610{
4611 tANI_U8 i = 0;
4612 /* Update STA params */
4613 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4614 sizeof(tSirMacAddr)) ;
4615 wdiStaParams->usAssocId = wdaStaParams->assocId;
4616 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004617 wdiStaParams->staIdx = wdaStaParams->staIdx;
4618
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 wdiStaParams->ucShortPreambleSupported =
4620 wdaStaParams->shortPreambleSupported;
4621 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4622 sizeof(tSirMacAddr)) ;
4623 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4624
4625 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4626
4627 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4628 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4629 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4630 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4631 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4632 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4633 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4634
4635 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4636 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 wdiStaParams->wdiSupportedRates.opRateMode =
4638 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004639 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4640 {
4641 wdiStaParams->wdiSupportedRates.llbRates[i] =
4642 wdaStaParams->supportedRates.llbRates[i];
4643 }
4644 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4645 {
4646 wdiStaParams->wdiSupportedRates.llaRates[i] =
4647 wdaStaParams->supportedRates.llaRates[i];
4648 }
4649 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4650 {
4651 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4652 wdaStaParams->supportedRates.aniLegacyRates[i];
4653 }
4654 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4655 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004656#ifdef WLAN_FEATURE_11AC
4657 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4658 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4659 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4660 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4661#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4663 {
4664 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4665 wdaStaParams->supportedRates.supportedMCSSet[i];
4666 }
4667 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4668 wdaStaParams->supportedRates.rxHighestDataRate;
4669
4670 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4671
4672 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4673
4674 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4675 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4676 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4677
4678 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4679 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4680 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4681 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004683#ifdef WLAN_FEATURE_11AC
4684 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4685 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004686 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304687 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4688 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4689 * must be set by default */
4690 if ( wdiStaParams->vhtTxMUBformeeCapable )
4691 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004692#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004693 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4694 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 return ;
4696}
Jeff Johnson295189b2012-06-20 16:38:30 -07004697/*
4698 * -------------------------------------------------------------------------
4699 * CFG update to WDI
4700 * -------------------------------------------------------------------------
4701 */
4702
4703 /*
4704 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4705 * Convert the WNI CFG ID to HAL CFG ID
4706 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004707static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004708{
4709 switch(wniCfgId)
4710 {
4711 case WNI_CFG_STA_ID:
4712 return QWLAN_HAL_CFG_STA_ID;
4713 case WNI_CFG_CURRENT_TX_ANTENNA:
4714 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4715 case WNI_CFG_CURRENT_RX_ANTENNA:
4716 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4717 case WNI_CFG_LOW_GAIN_OVERRIDE:
4718 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4719 case WNI_CFG_POWER_STATE_PER_CHAIN:
4720 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4721 case WNI_CFG_CAL_PERIOD:
4722 return QWLAN_HAL_CFG_CAL_PERIOD;
4723 case WNI_CFG_CAL_CONTROL:
4724 return QWLAN_HAL_CFG_CAL_CONTROL;
4725 case WNI_CFG_PROXIMITY:
4726 return QWLAN_HAL_CFG_PROXIMITY;
4727 case WNI_CFG_NETWORK_DENSITY:
4728 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4729 case WNI_CFG_MAX_MEDIUM_TIME:
4730 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4731 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4732 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4733 case WNI_CFG_RTS_THRESHOLD:
4734 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4735 case WNI_CFG_SHORT_RETRY_LIMIT:
4736 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4737 case WNI_CFG_LONG_RETRY_LIMIT:
4738 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4739 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4740 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4741 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4742 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4743 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4744 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4745 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4746 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4747 case WNI_CFG_FIXED_RATE:
4748 return QWLAN_HAL_CFG_FIXED_RATE;
4749 case WNI_CFG_RETRYRATE_POLICY:
4750 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4751 case WNI_CFG_RETRYRATE_SECONDARY:
4752 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4753 case WNI_CFG_RETRYRATE_TERTIARY:
4754 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4755 case WNI_CFG_FORCE_POLICY_PROTECTION:
4756 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4757 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4758 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4759 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4760 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4761 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4762 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4763 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4764 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4765 case WNI_CFG_MAX_BA_SESSIONS:
4766 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4767 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4768 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4769 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4770 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4771 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4772 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4773 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4774 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4775 case WNI_CFG_STATS_PERIOD:
4776 return QWLAN_HAL_CFG_STATS_PERIOD;
4777 case WNI_CFG_CFP_MAX_DURATION:
4778 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4779#if 0 /*This is not part of CFG*/
4780 case WNI_CFG_FRAME_TRANS_ENABLED:
4781 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4782#endif
4783 case WNI_CFG_DTIM_PERIOD:
4784 return QWLAN_HAL_CFG_DTIM_PERIOD;
4785 case WNI_CFG_EDCA_WME_ACBK:
4786 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4787 case WNI_CFG_EDCA_WME_ACBE:
4788 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4789 case WNI_CFG_EDCA_WME_ACVI:
4790 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4791 case WNI_CFG_EDCA_WME_ACVO:
4792 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4793#if 0
4794 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4795 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4796 case WNI_CFG_TELE_BCN_TRANS_LI:
4797 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4798 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4799 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4800 case WNI_CFG_TELE_BCN_MAX_LI:
4801 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4802 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4803 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4804#endif
4805 case WNI_CFG_ENABLE_CLOSE_LOOP:
4806 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004807 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4808 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304809 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4810 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 default:
4812 {
4813 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004814 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 wniCfgId);
4816 return VOS_STATUS_E_INVAL;
4817 }
4818 }
4819}
Jeff Johnson295189b2012-06-20 16:38:30 -07004820/*
4821 * FUNCTION: WDA_UpdateCfgCallback
4822 *
4823 */
4824void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4825{
4826 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4827 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4828 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 /*
4832 * currently there is no response message is expected between PE and
4833 * WDA, Failure return from WDI is a ASSERT condition
4834 */
4835 if(WDI_STATUS_SUCCESS != wdiStatus)
4836 {
4837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004838 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4840 }
4841
4842 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4843 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4844 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 return ;
4846}
Jeff Johnson295189b2012-06-20 16:38:30 -07004847/*
4848 * FUNCTION: WDA_UpdateCfg
4849 *
4850 */
4851VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4852{
4853
4854 WDI_Status status = WDI_STATUS_SUCCESS ;
4855 tANI_U32 val =0;
4856 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4857 tHalCfg *configData;
4858 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4859 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 if (NULL == pMac )
4863 {
4864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004865 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 return VOS_STATUS_E_FAILURE;
4867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 if(WDA_START_STATE != pWDA->wdaState)
4869 {
4870 return VOS_STATUS_E_FAILURE;
4871 }
4872
4873 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4874 {
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 VOS_ASSERT(0);
4878 return VOS_STATUS_E_FAILURE;
4879 }
4880
4881 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4882 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 if(NULL == wdiCfgReqParam)
4884 {
4885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 VOS_ASSERT(0);
4888 return VOS_STATUS_E_NOMEM;
4889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4891 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 if(NULL == wdiCfgReqParam->pConfigBuffer)
4893 {
4894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 vos_mem_free(wdiCfgReqParam);
4897 VOS_ASSERT(0);
4898 return VOS_STATUS_E_NOMEM;
4899 }
4900
4901 /*convert the WNI CFG Id to HAL CFG Id*/
4902 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4903 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4904
4905 /*TODO: revisit this for handling string parameters */
4906 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4907 &val) != eSIR_SUCCESS)
4908 {
4909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004910 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4912 vos_mem_free(wdiCfgReqParam);
4913 return eSIR_FAILURE;
4914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4916 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4917 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4918 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4919 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4920
4921 /* store Params pass it to WDI */
4922 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004923#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4924 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4925 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 if(IS_WDI_STATUS_FAILURE(status))
4927 {
4928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4929 "Failure in Update CFG WDI API, free all the memory " );
4930 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4931 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4932 pWDA->wdaWdiCfgApiMsgParam = NULL;
4933 /* Failure is not expected */
4934 VOS_ASSERT(0) ;
4935 }
4936#else
4937 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4938 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4939 pWDA->wdaWdiCfgApiMsgParam = NULL;
4940#endif
4941 return CONVERT_WDI2VOS_STATUS(status) ;
4942}
4943
Jeff Johnson295189b2012-06-20 16:38:30 -07004944VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4945 v_U8_t *pDefaultKeyId,
4946 v_U8_t *pNumKeys,
4947 WDI_KeysType *pWdiKeys )
4948{
4949 v_U32_t i, j, defKeyId = 0;
4950 v_U32_t val = SIR_MAC_KEY_LENGTH;
4951 VOS_STATUS status = WDI_STATUS_SUCCESS;
4952 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 if (NULL == pMac )
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 return VOS_STATUS_E_FAILURE;
4958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4960 &defKeyId ))
4961 {
4962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4963 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4964 }
4965
4966 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 /* Need to extract ALL of the configured WEP Keys */
4968 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4969 {
4970 val = SIR_MAC_KEY_LENGTH;
4971 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4972 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4973 pWdiKeys[j].key,
4974 &val ))
4975 {
4976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004977 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 }
4979 else
4980 {
4981 pWdiKeys[j].keyId = (tANI_U8) i;
4982 /*
4983 * Actually, a DC (Don't Care) because
4984 * this is determined (and set) by PE/MLME
4985 */
4986 pWdiKeys[j].unicast = 0;
4987 /*
4988 * Another DC (Don't Care)
4989 */
4990 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4991 /* Another DC (Don't Care). Unused for WEP */
4992 pWdiKeys[j].paeRole = 0;
4993 /* Determined from wlan_cfgGetStr() above.*/
4994 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 j++;
4996 *pNumKeys = (tANI_U8) j;
4997 }
4998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 return status;
5000}
Jeff Johnson295189b2012-06-20 16:38:30 -07005001/*
5002 * FUNCTION: WDA_SetBssKeyReqCallback
5003 * send SET BSS key RSP back to PE
5004 */
5005void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5006{
5007 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5008 tWDA_CbContext *pWDA;
5009 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005011 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 if(NULL == pWdaParams)
5013 {
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005015 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 VOS_ASSERT(0) ;
5017 return ;
5018 }
5019 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5020 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305021 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5022 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5024 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005025 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 return ;
5028}
Jeff Johnson295189b2012-06-20 16:38:30 -07005029/*
5030 * FUNCTION: WDA_ProcessSetBssKeyReq
5031 * Request to WDI for programming the BSS key( key for
5032 * broadcast/multicast frames Encryption)
5033 */
5034VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5035 tSetBssKeyParams *setBssKeyParams )
5036{
5037 WDI_Status status = WDI_STATUS_SUCCESS ;
5038 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5039 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5040 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5041 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 if(NULL == wdiSetBssKeyParam)
5046 {
5047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 VOS_ASSERT(0);
5050 return VOS_STATUS_E_NOMEM;
5051 }
5052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5053 if(NULL == pWdaParams)
5054 {
5055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 VOS_ASSERT(0);
5058 vos_mem_free(wdiSetBssKeyParam);
5059 return VOS_STATUS_E_NOMEM;
5060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 /* copy set BSS params to WDI structure */
5063 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5064 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5065 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 if(setBssKeyParams->encType != eSIR_ED_NONE)
5067 {
5068 if( setBssKeyParams->numKeys == 0 &&
5069 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5070 setBssKeyParams->encType == eSIR_ED_WEP104))
5071 {
5072 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5074 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5075 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5076 }
5077 else
5078 {
5079 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5080 {
5081 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5082 setBssKeyParams->key[keyIndex].keyId;
5083 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5084 setBssKeyParams->key[keyIndex].unicast;
5085 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5086 setBssKeyParams->key[keyIndex].keyDirection;
5087 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5088 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5089 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5090 setBssKeyParams->key[keyIndex].paeRole;
5091 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5092 setBssKeyParams->key[keyIndex].keyLength;
5093 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5094 setBssKeyParams->key[keyIndex].key,
5095 SIR_MAC_MAX_KEY_LENGTH);
5096 }
5097 }
5098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5100 setBssKeyParams->singleTidRc;
5101 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 /* Store set key pointer, as this will be used for response */
5103 /* store Params pass it to WDI */
5104 pWdaParams->pWdaContext = pWDA;
5105 pWdaParams->wdaMsgParam = setBssKeyParams;
5106 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5108 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5109
5110 if(IS_WDI_STATUS_FAILURE(status))
5111 {
5112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5113 "Failure in Set BSS Key Req WDI API, free all the memory " );
5114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5115 vos_mem_free(pWdaParams) ;
5116 setBssKeyParams->status = eSIR_FAILURE ;
5117 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 return CONVERT_WDI2VOS_STATUS(status) ;
5120}
Jeff Johnson295189b2012-06-20 16:38:30 -07005121/*
5122 * FUNCTION: WDA_RemoveBssKeyReqCallback
5123 * send SET BSS key RSP back to PE
5124 */
5125void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5126{
5127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5128 tWDA_CbContext *pWDA;
5129 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005131 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 if(NULL == pWdaParams)
5133 {
5134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005135 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 VOS_ASSERT(0) ;
5137 return ;
5138 }
5139 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5140 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5142 vos_mem_free(pWdaParams) ;
5143
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005144 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 return ;
5147}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305148
5149/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305150 * FUNCTION: WDA_GetFrameLogRspCallback
5151 * recieves get frame log response from FW
5152 */
5153void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5154 void* pUserData)
5155{
5156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5157 tWDA_CbContext *pWDA = NULL;
5158 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5159
5160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5161 "<------ Entering: %s " ,__func__);
5162 if(NULL == pWdaParams)
5163 {
5164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5165 "%s: pWdaParams received NULL", __func__);
5166 VOS_ASSERT(0) ;
5167 return ;
5168 }
5169
5170 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5171 if (NULL == pWDA)
5172 {
5173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5174 "%s:pWDA is NULL", __func__);
5175 VOS_ASSERT(0);
5176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5177 vos_mem_free(pWdaParams);
5178 return ;
5179 }
5180
5181 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5182 if(NULL == pGetFrameLogReqParams)
5183 {
5184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5185 "%s: pGetFrameLogReqParams received NULL", __func__);
5186 VOS_ASSERT(0);
5187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5188 vos_mem_free(pWdaParams);
5189 return;
5190 }
5191
5192 pGetFrameLogReqParams->rspStatus = wdiRsp->wdiStatus;
5193 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5195 "%s:GetFrameLog with rsp status %d", __func__, wdiRsp->wdiStatus);
5196 }
5197
5198 if(pGetFrameLogReqParams->getFramelogCallback)
5199 {
5200 pGetFrameLogReqParams->getFramelogCallback(
5201 pGetFrameLogReqParams->pDevContext);
5202 }
5203 else
5204 {
5205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5206 "%s: pGetFrameLogReqParams callback is NULL", __func__);
5207 }
5208
5209 /* free WDI command buffer only */
5210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5211 vos_mem_free(pWdaParams->wdaMsgParam);
5212 vos_mem_free(pWdaParams);
5213
5214 return ;
5215
5216}
5217/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305218 * FUNCTION: WDA_MgmtLoggingInitRspCallback
5219 * recieves Mgmt Logging init response from FW
5220 */
5221void WDA_MgmtLoggingInitRspCallback(WDI_MgmtLoggingRspParamType* wdiRsp,
5222 void* pUserData)
5223{
5224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5225 tSirMgmtLoggingInitParam *pMgmtLoggingInitParams;
5226
5227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5228 "<------ %s " ,__func__);
5229
5230 if(NULL == pWdaParams)
5231 {
5232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5233 "%s: pWdaParams received NULL", __func__);
5234 VOS_ASSERT(0);
5235 return ;
5236 }
5237
5238 if(NULL == pWdaParams->wdaMsgParam)
5239 {
5240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5241 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5242 VOS_ASSERT(0);
5243 vos_mem_free(pWdaParams);
5244 return ;
5245 }
5246
5247 pMgmtLoggingInitParams = (tSirMgmtLoggingInitParam *)pWdaParams->wdaMsgParam;
5248
5249 if(pMgmtLoggingInitParams->mgmtlogInitCallback)
5250 {
5251 pMgmtLoggingInitParams->mgmtlogInitCallback(
5252 pMgmtLoggingInitParams->mgmtlogInitCbContext,
5253 CONVERT_WDI2VOS_STATUS(wdiRsp->wdiStatus));
5254 }
5255 else
5256 {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "%s: pMgmtLoggingInitParams callback is NULL", __func__);
5259 }
5260
5261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5262 vos_mem_free(pWdaParams->wdaMsgParam);
5263 vos_mem_free(pWdaParams);
5264
5265 return;
5266}
5267
5268/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305269 * FUNCTION: WDA_SpoofMacAddrRspCallback
5270 * recieves spoof mac addr response from FW
5271 */
5272void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5273{
5274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5275 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305276
Siddharth Bhal171788a2014-09-29 21:02:40 +05305277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5278 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305279
Siddharth Bhal171788a2014-09-29 21:02:40 +05305280 if(NULL == pWdaParams)
5281 {
5282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5283 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305284 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305285 return ;
5286 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305287 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305288
Siddharth Bhal029d6732014-10-09 21:31:23 +05305289 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305291 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305292 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305293 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5294 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305295
Siddharth Bhal171788a2014-09-29 21:02:40 +05305296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305297 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305298 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305299
5300 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305301}
5302
Jeff Johnson295189b2012-06-20 16:38:30 -07005303/*
5304 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5305 * Request to WDI to remove the BSS key( key for broadcast/multicast
5306 * frames Encryption)
5307 */
5308VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5309 tRemoveBssKeyParams *removeBssKeyParams )
5310{
5311 WDI_Status status = WDI_STATUS_SUCCESS ;
5312 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5313 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5314 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5315 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 if(NULL == wdiRemoveBssKeyParam)
5319 {
5320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 VOS_ASSERT(0);
5323 return VOS_STATUS_E_NOMEM;
5324 }
5325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5326 if(NULL == pWdaParams)
5327 {
5328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 VOS_ASSERT(0);
5331 vos_mem_free(wdiRemoveBssKeyParam);
5332 return VOS_STATUS_E_NOMEM;
5333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 /* copy Remove BSS key params to WDI structure*/
5335 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5336 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5337 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5338 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5339 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 /* Store remove key pointer, as this will be used for response */
5341 /* store Params pass it to WDI */
5342 pWdaParams->pWdaContext = pWDA;
5343 pWdaParams->wdaMsgParam = removeBssKeyParams;
5344 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5346 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 if(IS_WDI_STATUS_FAILURE(status))
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5350 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5352 vos_mem_free(pWdaParams) ;
5353 removeBssKeyParams->status = eSIR_FAILURE ;
5354 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 return CONVERT_WDI2VOS_STATUS(status) ;
5357}
Jeff Johnson295189b2012-06-20 16:38:30 -07005358/*
5359 * FUNCTION: WDA_SetBssKeyReqCallback
5360 * send SET BSS key RSP back to PE
5361 */
5362void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5363{
5364 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5365 tWDA_CbContext *pWDA;
5366 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 if(NULL == pWdaParams)
5370 {
5371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005372 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_ASSERT(0) ;
5374 return ;
5375 }
5376 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5377 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305378 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5379 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5381 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005382 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 return ;
5385}
Jeff Johnson295189b2012-06-20 16:38:30 -07005386/*
5387 * FUNCTION: WDA_ProcessSetStaKeyReq
5388 * Request to WDI for programming the STA key( key for Unicast frames
5389 * Encryption)
5390 */
5391VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5392 tSetStaKeyParams *setStaKeyParams )
5393{
5394 WDI_Status status = WDI_STATUS_SUCCESS ;
5395 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5396 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5397 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5398 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005401 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 if(NULL == wdiSetStaKeyParam)
5403 {
5404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 VOS_ASSERT(0);
5407 return VOS_STATUS_E_NOMEM;
5408 }
5409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5410 if(NULL == pWdaParams)
5411 {
5412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 VOS_ASSERT(0);
5415 vos_mem_free(wdiSetStaKeyParam);
5416 return VOS_STATUS_E_NOMEM;
5417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 /* copy set STA key params to WDI structure */
5421 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5422 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5423 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5424 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 if(setStaKeyParams->encType != eSIR_ED_NONE)
5426 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005427 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5429 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5430 {
5431 WDA_GetWepKeysFromCfg( pWDA,
5432 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5433 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5434 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5435 }
5436 else
5437 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5439 keyIndex++)
5440 {
5441 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5442 setStaKeyParams->key[keyIndex].keyId;
5443 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5444 setStaKeyParams->key[keyIndex].unicast;
5445 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5446 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5448 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5449 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5450 setStaKeyParams->key[keyIndex].paeRole;
5451 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5452 setStaKeyParams->key[keyIndex].keyLength;
5453 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5454 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5455 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5456 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5457 {
5458 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5459 }
5460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5462 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 }
5464 }
5465 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5466 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 /* Store set key pointer, as this will be used for response */
5468 /* store Params pass it to WDI */
5469 pWdaParams->pWdaContext = pWDA;
5470 pWdaParams->wdaMsgParam = setStaKeyParams;
5471 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005472 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5473 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 if(IS_WDI_STATUS_FAILURE(status))
5475 {
5476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5477 "Failure in set STA Key Req WDI API, free all the memory " );
5478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5479 vos_mem_free(pWdaParams) ;
5480 setStaKeyParams->status = eSIR_FAILURE ;
5481 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 return CONVERT_WDI2VOS_STATUS(status) ;
5484}
Jeff Johnson295189b2012-06-20 16:38:30 -07005485/*
5486 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5487 * send SET Bcast STA key RSP back to PE
5488 */
5489void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5490{
5491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5492 tWDA_CbContext *pWDA;
5493 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005495 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 if(NULL == pWdaParams)
5497 {
5498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005499 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 VOS_ASSERT(0) ;
5501 return ;
5502 }
5503 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5504 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5506 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005507 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 return ;
5510}
5511
Jeff Johnson295189b2012-06-20 16:38:30 -07005512/*
5513 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5514 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5515 * Encryption)
5516 */
5517VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5518 tSetStaKeyParams *setStaKeyParams )
5519{
5520 WDI_Status status = WDI_STATUS_SUCCESS ;
5521 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5522 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5523 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5524 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 if(NULL == wdiSetStaKeyParam)
5529 {
5530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 VOS_ASSERT(0);
5533 return VOS_STATUS_E_NOMEM;
5534 }
5535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5536 if(NULL == pWdaParams)
5537 {
5538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_ASSERT(0);
5541 vos_mem_free(wdiSetStaKeyParam);
5542 return VOS_STATUS_E_NOMEM;
5543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 /* copy set STA key params to WDI structure */
5547 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5548 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5549 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5550 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 if(setStaKeyParams->encType != eSIR_ED_NONE)
5552 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5554 keyIndex++)
5555 {
5556 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5557 setStaKeyParams->key[keyIndex].keyId;
5558 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5559 setStaKeyParams->key[keyIndex].unicast;
5560 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5561 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5563 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5564 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5565 setStaKeyParams->key[keyIndex].paeRole;
5566 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5567 setStaKeyParams->key[keyIndex].keyLength;
5568 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5569 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5572 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 }
5574 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 /* Store set key pointer, as this will be used for response */
5576 /* store Params pass it to WDI */
5577 pWdaParams->pWdaContext = pWDA;
5578 pWdaParams->wdaMsgParam = setStaKeyParams;
5579 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5581 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 if(IS_WDI_STATUS_FAILURE(status))
5583 {
5584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5585 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5587 vos_mem_free(pWdaParams) ;
5588 setStaKeyParams->status = eSIR_FAILURE ;
5589 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 return CONVERT_WDI2VOS_STATUS(status) ;
5592}
Jeff Johnson295189b2012-06-20 16:38:30 -07005593/*
5594 * FUNCTION: WDA_RemoveStaKeyReqCallback
5595 * send SET BSS key RSP back to PE
5596 */
5597void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5598{
5599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5600 tWDA_CbContext *pWDA;
5601 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 if(NULL == pWdaParams)
5605 {
5606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005607 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 VOS_ASSERT(0) ;
5609 return ;
5610 }
5611 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5612 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5614 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005615 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 return ;
5618}
5619
Jeff Johnson295189b2012-06-20 16:38:30 -07005620/*
5621 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5622 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5623 */
5624VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5625 tRemoveStaKeyParams *removeStaKeyParams )
5626{
5627 WDI_Status status = WDI_STATUS_SUCCESS ;
5628 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5629 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5630 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5631 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 if(NULL == wdiRemoveStaKeyParam)
5635 {
5636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 VOS_ASSERT(0);
5639 return VOS_STATUS_E_NOMEM;
5640 }
5641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5642 if(NULL == pWdaParams)
5643 {
5644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 VOS_ASSERT(0);
5647 vos_mem_free(wdiRemoveStaKeyParam);
5648 return VOS_STATUS_E_NOMEM;
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 /* copy remove STA key params to WDI structure*/
5651 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5652 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5653 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5654 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5655 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 /* Store remove key pointer, as this will be used for response */
5657 /* store Params pass it to WDI */
5658 pWdaParams->pWdaContext = pWDA;
5659 pWdaParams->wdaMsgParam = removeStaKeyParams;
5660 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5662 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 if(IS_WDI_STATUS_FAILURE(status))
5664 {
5665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5666 "Failure in remove STA Key Req WDI API, free all the memory " );
5667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5668 vos_mem_free(pWdaParams) ;
5669 removeStaKeyParams->status = eSIR_FAILURE ;
5670 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 return CONVERT_WDI2VOS_STATUS(status) ;
5673}
Jeff Johnson295189b2012-06-20 16:38:30 -07005674/*
5675 * FUNCTION: WDA_IsHandleSetLinkStateReq
5676 * Update the WDA state and return the status to handle this message or not
5677 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005678WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5679 tWDA_CbContext *pWDA,
5680 tLinkStateParams *linkStateParams)
5681{
5682 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 switch(linkStateParams->state)
5684 {
5685 case eSIR_LINK_PREASSOC_STATE:
5686 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5687 /*
5688 * set the WDA state to PRE ASSOC
5689 * copy the BSSID into pWDA to use it in join request and return,
5690 * No need to handle these messages.
5691 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005692 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5693 {
5694 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005696 }
5697 else
5698 {
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005701 VOS_ASSERT(0);
5702 }
5703
5704 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5705 {
5706 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005708 }
5709 else
5710 {
5711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005712 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005713 VOS_ASSERT(0);
5714 }
5715
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5717 *channel and after ) so reset the WDA state to ready when the second
5718 * time UMAC issue the link state with PREASSOC
5719 */
5720 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5721 {
5722 /* RESET WDA state back to WDA_READY_STATE */
5723 pWDA->wdaState = WDA_READY_STATE;
5724 }
5725 else
5726 {
5727 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5728 }
5729 //populate linkState info in WDACbCtxt
5730 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 default:
5733 if(pWDA->wdaState != WDA_READY_STATE)
5734 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005735 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5736 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5737 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5738 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5739 *the ASSERT in WDA_Stop during module unload.*/
5740 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5741 {
5742 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005743 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005744 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005745 else
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005748 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005749 status = WDA_IGNORE_SET_LINK_STATE;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 }
5752 break;
5753 }
5754
5755 return status;
5756}
Jeff Johnson295189b2012-06-20 16:38:30 -07005757/*
5758 * FUNCTION: WDA_SetLinkStateCallback
5759 * call back function for set link state from WDI
5760 */
5761void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5762{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305763 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 tLinkStateParams *linkStateParams;
5765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005767 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305768 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005769 {
5770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 VOS_ASSERT(0) ;
5773 return ;
5774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305776 if (NULL == pWDA)
5777 {
5778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5779 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5781 vos_mem_free(pWdaParams->wdaMsgParam);
5782 vos_mem_free(pWdaParams);
5783
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305784 VOS_ASSERT(0);
5785 return ;
5786 }
5787
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 /*
5790 * In STA mode start the BA activity check timer after association
5791 * and in AP mode start BA activity check timer after BSS start */
5792 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5793 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005794 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5795 ((status == WDI_STATUS_SUCCESS) &&
5796 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 {
5798 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005800 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 /*
5802 * No respone required for WDA_SET_LINK_STATE so free the request
5803 * param here
5804 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5806 vos_mem_free(pWdaParams);
5807
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 return ;
5809}
Jeff Johnson295189b2012-06-20 16:38:30 -07005810/*
5811 * FUNCTION: WDA_ProcessSetLinkState
5812 * Request to WDI to set the link status.
5813 */
5814VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5815 tLinkStateParams *linkStateParams)
5816{
5817 WDI_Status status = WDI_STATUS_SUCCESS ;
5818 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5819 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5820 sizeof(WDI_SetLinkReqParamsType)) ;
5821 tWDA_ReqParams *pWdaParams ;
5822 tpAniSirGlobal pMac;
5823 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5824
5825 if(NULL == pMac)
5826 {
5827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005828 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005830 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 return VOS_STATUS_E_FAILURE;
5832 }
5833
5834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005835 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 if(NULL == wdiSetLinkStateParam)
5837 {
5838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 VOS_ASSERT(0);
5841 return VOS_STATUS_E_NOMEM;
5842 }
5843 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5844 if(NULL == pWdaParams)
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_ASSERT(0);
5849 vos_mem_free(wdiSetLinkStateParam);
5850 return VOS_STATUS_E_NOMEM;
5851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 if(WDA_IGNORE_SET_LINK_STATE ==
5853 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5854 {
5855 status = WDI_STATUS_E_FAILURE;
5856 }
5857 else
5858 {
5859 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5860 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5862 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5864 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 pWdaParams->pWdaContext = pWDA;
5866 /* Store remove key pointer, as this will be used for response */
5867 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 /* store Params pass it to WDI */
5869 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5870 /* Stop Timer only other than GO role and concurrent session */
5871 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005872 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005873 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5874 {
5875 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5878 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 if(IS_WDI_STATUS_FAILURE(status))
5880 {
5881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5882 "Failure in set link state Req WDI API, free all the memory " );
5883 }
5884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 if(IS_WDI_STATUS_FAILURE(status))
5886 {
5887 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005888 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 vos_mem_free(pWdaParams);
5890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 return CONVERT_WDI2VOS_STATUS(status) ;
5892}
Jeff Johnson295189b2012-06-20 16:38:30 -07005893/*
5894 * FUNCTION: WDA_GetStatsReqParamsCallback
5895 * send the response to PE with Stats received from WDI
5896 */
5897void WDA_GetStatsReqParamsCallback(
5898 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5899 void* pUserData)
5900{
5901 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5902 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5903
5904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 pGetPEStatsRspParams =
5907 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5908 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5909
5910 if(NULL == pGetPEStatsRspParams)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return;
5916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5918 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5919 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5920 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005921
5922 //Fill the Session Id Properly in PE
5923 pGetPEStatsRspParams->sessionId = 0;
5924 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005925 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5927 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 vos_mem_copy( pGetPEStatsRspParams + 1,
5929 wdiGetStatsRsp + 1,
5930 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 /* send response to UMAC*/
5932 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5933
5934 return;
5935}
5936
Jeff Johnson295189b2012-06-20 16:38:30 -07005937/*
5938 * FUNCTION: WDA_ProcessGetStatsReq
5939 * Request to WDI to get the statistics
5940 */
5941VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5942 tAniGetPEStatsReq *pGetStatsParams)
5943{
5944 WDI_Status status = WDI_STATUS_SUCCESS ;
5945 WDI_GetStatsReqParamsType wdiGetStatsParam;
5946 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005948 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5950 pGetStatsParams->staId;
5951 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5952 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 status = WDI_GetStatsReq(&wdiGetStatsParam,
5955 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 if(IS_WDI_STATUS_FAILURE(status))
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5959 "Failure in Get Stats Req WDI API, free all the memory " );
5960 pGetPEStatsRspParams =
5961 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5962 if(NULL == pGetPEStatsRspParams)
5963 {
5964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005967 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 return VOS_STATUS_E_NOMEM;
5969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5971 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5972 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5973 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5974 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5975 (void *)pGetPEStatsRspParams, 0) ;
5976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 /* Free the request message */
5978 vos_mem_free(pGetStatsParams);
5979 return CONVERT_WDI2VOS_STATUS(status);
5980}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005981
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005982#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005983/*
5984 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5985 * send the response to PE with roam Rssi received from WDI
5986 */
5987void WDA_GetRoamRssiReqParamsCallback(
5988 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5989 void* pUserData)
5990{
5991 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5992 tWDA_CbContext *pWDA = NULL;
5993 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5994 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5996 "<------ %s " ,__func__);
5997 if(NULL == pWdaParams)
5998 {
5999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6000 "%s: pWdaParams received NULL", __func__);
6001 VOS_ASSERT(0) ;
6002 return ;
6003 }
6004 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6005 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6006
6007 if(NULL == pGetRoamRssiReqParams)
6008 {
6009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6010 "%s: pGetRoamRssiReqParams received NULL", __func__);
6011 VOS_ASSERT(0);
6012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6013 vos_mem_free(pWdaParams);
6014 return ;
6015 }
6016 pGetRoamRssiRspParams =
6017 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6018
6019 if(NULL == pGetRoamRssiRspParams)
6020 {
6021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6022 "%s: VOS MEM Alloc Failure", __func__);
6023 VOS_ASSERT(0);
6024 return;
6025 }
6026 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6027 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006028 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006029 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6030 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6031
6032 /* Assign get roam rssi req (backup) in to the response */
6033 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6034
6035 /* free WDI command buffer */
6036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6037 vos_mem_free(pWdaParams) ;
6038
6039 /* send response to UMAC*/
6040 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6041
6042 return;
6043}
6044
6045
6046
6047/*
6048 * FUNCTION: WDA_ProcessGetRoamRssiReq
6049 * Request to WDI to get the statistics
6050 */
6051VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6052 tAniGetRssiReq *pGetRoamRssiParams)
6053{
6054 WDI_Status status = WDI_STATUS_SUCCESS ;
6055 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6056 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6057 tWDA_ReqParams *pWdaParams = NULL;
6058
6059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6060 "------> %s " ,__func__);
6061 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6062 pGetRoamRssiParams->staId;
6063 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6064
6065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6066 if(NULL == pWdaParams)
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6069 "%s: VOS MEM Alloc Failure", __func__);
6070 VOS_ASSERT(0);
6071 return VOS_STATUS_E_NOMEM;
6072 }
6073
6074 /* Store Init Req pointer, as this will be used for response */
6075 pWdaParams->pWdaContext = pWDA;
6076
6077 /* Take Get roam Rssi req backup as it stores the callback to be called after
6078 receiving the response */
6079 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6080 pWdaParams->wdaWdiApiMsgParam = NULL;
6081
6082 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6083 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6084 if(IS_WDI_STATUS_FAILURE(status))
6085 {
6086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6087 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6088 pGetRoamRssiRspParams =
6089 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6090 if(NULL == pGetRoamRssiRspParams)
6091 {
6092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6093 "%s: VOS MEM Alloc Failure", __func__);
6094 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306095 vos_mem_free(pGetRoamRssiParams);
6096 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006097 return VOS_STATUS_E_NOMEM;
6098 }
6099 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6100 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6101 pGetRoamRssiRspParams->rssi = 0;
6102 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6103 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6104 (void *)pGetRoamRssiRspParams, 0) ;
6105 }
6106 return CONVERT_WDI2VOS_STATUS(status);
6107}
6108#endif
6109
6110
Jeff Johnson295189b2012-06-20 16:38:30 -07006111/*
6112 * FUNCTION: WDA_UpdateEDCAParamCallback
6113 * call back function for Update EDCA params from WDI
6114 */
6115void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6116{
6117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6118 tEdcaParams *pEdcaParams;
6119
6120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006121 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 if(NULL == pWdaParams)
6123 {
6124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006125 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 VOS_ASSERT(0) ;
6127 return ;
6128 }
6129 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6131 vos_mem_free(pWdaParams);
6132 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 return ;
6134}
Jeff Johnson295189b2012-06-20 16:38:30 -07006135/*
6136 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6137 * Request to WDI to Update the EDCA params.
6138 */
6139VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6140 tEdcaParams *pEdcaParams)
6141{
6142 WDI_Status status = WDI_STATUS_SUCCESS ;
6143 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6144 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6145 sizeof(WDI_UpdateEDCAParamsType)) ;
6146 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 if(NULL == wdiEdcaParam)
6150 {
6151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006154 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 return VOS_STATUS_E_NOMEM;
6156 }
6157 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6158 if(NULL == pWdaParams)
6159 {
6160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006161 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 VOS_ASSERT(0);
6163 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006164 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006165 return VOS_STATUS_E_NOMEM;
6166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006168 /*
6169 Since firmware is not using highperformance flag, we have removed
6170 this flag from wdiEDCAInfo structure to match sizeof the structure
6171 between host and firmware.In future if we are planning to use
6172 highperformance flag then Please define this flag in wdiEDCAInfo
6173 structure, update it here and send it to firmware. i.e.
6174 Following is the original line which we removed as part of the fix
6175 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6176 pEdcaParams->highPerformance;
6177 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6179 &pEdcaParams->acbe);
6180 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6181 &pEdcaParams->acbk);
6182 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6183 &pEdcaParams->acvi);
6184 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6185 &pEdcaParams->acvo);
6186 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 pWdaParams->pWdaContext = pWDA;
6188 /* Store remove key pointer, as this will be used for response */
6189 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 /* store Params pass it to WDI */
6191 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6193 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 if(IS_WDI_STATUS_FAILURE(status))
6195 {
6196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6197 "Failure in Update EDCA Params WDI API, free all the memory " );
6198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6199 vos_mem_free(pWdaParams);
6200 vos_mem_free(pEdcaParams);
6201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 return CONVERT_WDI2VOS_STATUS(status) ;
6203}
Jeff Johnson295189b2012-06-20 16:38:30 -07006204/*
6205 * FUNCTION: WDA_AddBAReqCallback
6206 * send ADD BA RSP back to PE
6207 */
6208void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6209 void* pUserData)
6210{
6211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6212 tWDA_CbContext *pWDA;
6213 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006215 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306216 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 {
6218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006219 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 VOS_ASSERT(0) ;
6221 return ;
6222 }
6223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306224 if (NULL == pWDA)
6225 {
6226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6227 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6229 vos_mem_free(pWdaParams->wdaMsgParam);
6230 vos_mem_free(pWdaParams);
6231
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306232 VOS_ASSERT(0);
6233 return ;
6234 }
6235
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6238 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006239 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006240 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 return ;
6242}
6243
Jeff Johnson295189b2012-06-20 16:38:30 -07006244/*
6245 * FUNCTION: WDA_ProcessAddBAReq
6246 * Request to WDI to Update the ADDBA REQ params.
6247 */
6248VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306249 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006250{
Jeff Johnson43971f52012-07-17 12:26:56 -07006251 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6253 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6254 sizeof(WDI_AddBAReqParamsType)) ;
6255 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 if(NULL == wdiAddBAReqParam)
6259 {
6260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 VOS_ASSERT(0);
6263 return VOS_STATUS_E_NOMEM;
6264 }
6265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6266 if(NULL == pWdaParams)
6267 {
6268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 VOS_ASSERT(0);
6271 vos_mem_free(wdiAddBAReqParam);
6272 return VOS_STATUS_E_NOMEM;
6273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 do
6275 {
6276 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 wdiAddBaInfo->ucSTAIdx = staIdx ;
6278 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306279 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 } while(0) ;
6281 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 pWdaParams->pWdaContext = pWDA;
6283 /* store Params pass it to WDI */
6284 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6285 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006286 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6287 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006288
Jeff Johnson43971f52012-07-17 12:26:56 -07006289 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 {
6291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006292 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6293 status = CONVERT_WDI2VOS_STATUS(wstatus);
6294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 vos_mem_free(pWdaParams);
6296 pAddBAReqParams->status = eSIR_FAILURE;
6297 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6298 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006299 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006300}
Jeff Johnson295189b2012-06-20 16:38:30 -07006301/*
6302 * FUNCTION: WDA_AddBASessionReqCallback
6303 * send ADD BA SESSION RSP back to PE/(or TL)
6304 */
6305void WDA_AddBASessionReqCallback(
6306 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6307{
6308 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6309 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306310 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 if(NULL == pWdaParams)
6315 {
6316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006317 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 VOS_ASSERT(0) ;
6319 return ;
6320 }
6321 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306322 if (NULL == pWDA)
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6325 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6327 vos_mem_free(pWdaParams->wdaMsgParam);
6328 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306329 VOS_ASSERT(0);
6330 return ;
6331 }
6332
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 if( NULL == pAddBAReqParams )
6335 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006337 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6340 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 return ;
6342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6344 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306346 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 * another request to HAL(/WDI) (ADD_BA_REQ)
6348 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 if((VOS_STATUS_SUCCESS ==
6350 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306351 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 {
6353 /* Update TL with BA info received from HAL/WDI */
6354 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6355 wdiAddBaSession->usBaSessionID,
6356 wdiAddBaSession->ucSTAIdx,
6357 wdiAddBaSession->ucBaTID,
6358 wdiAddBaSession->ucBaBufferSize,
6359 wdiAddBaSession->ucWinSize,
6360 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306362 wdiAddBaSession->ucSTAIdx,
6363 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 }
6365 else
6366 {
6367 pAddBAReqParams->status =
6368 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6369
6370 /* Setting Flag to indicate that Set BA is success */
6371 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6372 {
6373 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6374 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6375 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 /*Reset the WDA state to READY */
6380 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 return ;
6382}
6383
Jeff Johnson295189b2012-06-20 16:38:30 -07006384/*
6385 * FUNCTION: WDA_ProcessAddBASessionReq
6386 * Request to WDI to Update the ADDBA REQ params.
6387 */
6388VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6389 tAddBAParams *pAddBAReqParams)
6390{
6391 WDI_Status status = WDI_STATUS_SUCCESS ;
6392 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6393 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6394 sizeof(WDI_AddBASessionReqParamsType)) ;
6395 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006396 WLANTL_STAStateType tlSTAState = 0;
6397
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 if(NULL == wdiAddBASessionReqParam)
6401 {
6402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 VOS_ASSERT(0);
6405 return VOS_STATUS_E_NOMEM;
6406 }
6407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6408 if(NULL == pWdaParams)
6409 {
6410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 VOS_ASSERT(0);
6413 vos_mem_free(wdiAddBASessionReqParam);
6414 return VOS_STATUS_E_NOMEM;
6415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 /*
6417 * Populate ADD BA parameters and pass these paarmeters to WDI.
6418 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6419 * the state to track if these is BA recipient case or BA initiator
6420 * case.
6421 */
6422 do
6423 {
6424 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6425 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6426 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6427 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6428 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6429 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6430 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6433 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6434 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6435 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6436 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306437
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 }while(0) ;
6439 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 pWdaParams->pWdaContext = pWDA;
6441 /* Store ADD BA pointer, as this will be used for response */
6442 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6443 /* store Params pass it to WDI */
6444 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006445
6446 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6447 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6448 */
6449 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6450 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6451 {
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006453 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006454 status = WDI_STATUS_E_NOT_ALLOWED;
6455 pAddBAReqParams->status =
6456 CONVERT_WDI2SIR_STATUS(status) ;
6457 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6458 /*Reset the WDA state to READY */
6459 pWDA->wdaState = WDA_READY_STATE;
6460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6461 vos_mem_free(pWdaParams);
6462
6463 return CONVERT_WDI2VOS_STATUS(status) ;
6464 }
6465
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6467 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 if(IS_WDI_STATUS_FAILURE(status))
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006471 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006473 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006474 pAddBAReqParams->status =
6475 CONVERT_WDI2SIR_STATUS(status) ;
6476 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006477 /*Reset the WDA state to READY */
6478 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 vos_mem_free(pWdaParams);
6481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006483}
Jeff Johnson295189b2012-06-20 16:38:30 -07006484/*
6485 * FUNCTION: WDA_DelBANotifyTL
6486 * send DEL BA IND to TL
6487 */
6488void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6489 tDelBAParams *pDelBAReqParams)
6490{
6491 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6492 //tSirMsgQ msg;
6493 vos_msg_t vosMsg;
6494 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006495 if(NULL == pDelBAInd)
6496 {
6497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 VOS_ASSERT(0) ;
6500 return;
6501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6503 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6504 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6505 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006506
Jeff Johnson295189b2012-06-20 16:38:30 -07006507
6508 vosMsg.type = WDA_DELETEBA_IND;
6509 vosMsg.bodyptr = pDelBAInd;
6510 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6511 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6512 {
6513 vosStatus = VOS_STATUS_E_BADMSG;
6514 }
6515}
Jeff Johnson295189b2012-06-20 16:38:30 -07006516/*
6517 * FUNCTION: WDA_DelBAReqCallback
6518 * send DEL BA RSP back to PE
6519 */
6520void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6521{
6522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6523 tWDA_CbContext *pWDA;
6524 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006526 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 if(NULL == pWdaParams)
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 VOS_ASSERT(0) ;
6532 return ;
6533 }
6534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306535
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 /* Notify TL about DEL BA in case of recipinet */
6538 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6539 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6540 {
6541 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 /*
6544 * No respone required for WDA_DELBA_IND so just free the request
6545 * param here
6546 */
6547 vos_mem_free(pDelBAReqParams);
6548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6549 vos_mem_free(pWdaParams);
6550 return ;
6551}
6552
Jeff Johnson295189b2012-06-20 16:38:30 -07006553/*
6554 * FUNCTION: WDA_ProcessDelBAReq
6555 * Request to WDI to Update the DELBA REQ params.
6556 */
6557VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6558 tDelBAParams *pDelBAReqParams)
6559{
6560 WDI_Status status = WDI_STATUS_SUCCESS ;
6561 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6562 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6563 sizeof(WDI_DelBAReqParamsType)) ;
6564 tWDA_ReqParams *pWdaParams ;
6565 tANI_U16 staIdx = 0;
6566 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006568 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 if(NULL == wdiDelBAReqParam)
6570 {
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 VOS_ASSERT(0);
6574 return VOS_STATUS_E_NOMEM;
6575 }
6576 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6577 if(NULL == pWdaParams)
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 VOS_ASSERT(0);
6582 vos_mem_free(wdiDelBAReqParam);
6583 return VOS_STATUS_E_NOMEM;
6584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6586 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6587 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6588 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 pWdaParams->pWdaContext = pWDA;
6590 /* Store DEL BA pointer, as this will be used for response */
6591 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 /* store Params pass it to WDI */
6593 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6595 * maintained in WDA, so that WDA can retry for another BA session
6596 */
6597 staIdx = pDelBAReqParams->staIdx;
6598 tid = pDelBAReqParams->baTID;
6599 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 status = WDI_DelBAReq(wdiDelBAReqParam,
6601 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 if(IS_WDI_STATUS_FAILURE(status))
6603 {
6604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6605 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6607 vos_mem_free(pWdaParams->wdaMsgParam);
6608 vos_mem_free(pWdaParams);
6609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006611}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006612
6613/*
6614 * FUNCTION: WDA_UpdateChReqCallback
6615 *
6616 */
6617void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6618{
Siddharth Bhala006c122014-05-03 12:13:27 +05306619 tWDA_ReqParams *pWdaParams;
6620 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6621 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6622 WDI_UpdateChannelReqinfoType *pChanInfoType;
6623 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006624
6625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6626 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306627 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006628 {
6629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306630 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006631 VOS_ASSERT(0);
6632 return;
6633 }
6634
Siddharth Bhala006c122014-05-03 12:13:27 +05306635 pWdaParams = (tWDA_ReqParams *)pUserData;
6636 pwdiUpdateChReqParam =
6637 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6638 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6639 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6640 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006641 /*
6642 * currently there is no response message is expected between PE and
6643 * WDA, Failure return from WDI is a ASSERT condition
6644 */
6645 vos_mem_free(pChanInfoType);
6646 vos_mem_free(pChanList);
6647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6648 vos_mem_free(pWdaParams);
6649
6650 return;
6651}
6652
6653/*
6654 * FUNCTION: WDA_ProcessUpdateChannelList
6655 * Request to WDI to Update the ChannelList params.
6656 */
6657VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6658 tSirUpdateChanList *pChanList)
6659{
6660 WDI_Status status = WDI_STATUS_SUCCESS;
6661 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6662 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6663 WDI_UpdateChannelReqinfoType *pChanInfoType;
6664 tWDA_ReqParams *pWdaParams;
6665 wpt_uint8 i;
6666
6667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6668 "------> %s " ,__func__);
6669 if(NULL == pChanList)
6670 {
6671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6672 "%s: NULL pChanList", __func__);
6673 VOS_ASSERT(0);
6674 return VOS_STATUS_E_INVAL;
6675 }
6676
6677 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6678 {
6679 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6680 "Update channel list capability Not Supported");
6681 vos_mem_free(pChanList);
6682 return VOS_STATUS_E_INVAL;
6683 }
6684
6685 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6686 sizeof(WDI_UpdateChReqParamsType));
6687 if(NULL == pwdiUpdateChReqParam)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6690 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6691 __func__);
6692 VOS_ASSERT(0);
6693 vos_mem_free(pChanList);
6694 return VOS_STATUS_E_NOMEM;
6695 }
6696 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6697 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6698 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6699 pChanList->numChan);
6700 if(NULL == pChanInfoType)
6701 {
6702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6703 "%s: VOS MEM Alloc Failure", __func__);
6704 VOS_ASSERT(0);
6705 vos_mem_free(pChanList);
6706 vos_mem_free(pwdiUpdateChReqParam);
6707 return VOS_STATUS_E_NOMEM;
6708 }
6709 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6710 * pChanList->numChan);
6711 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6712
6713 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6714 if(NULL == pWdaParams)
6715 {
6716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6717 "%s: VOS MEM Alloc Failure", __func__);
6718 VOS_ASSERT(0);
6719 vos_mem_free(pChanList);
6720 vos_mem_free(pChanInfoType);
6721 vos_mem_free(pwdiUpdateChReqParam);
6722 return VOS_STATUS_E_NOMEM;
6723 }
6724 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6725
6726 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6727 {
6728 pChanInfoType->mhz =
6729 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6730
6731 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6732 pChanInfoType->band_center_freq2 = 0;
6733
6734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6735 "chan[%d] = %u", i, pChanInfoType->mhz);
6736 if (pChanList->chanParam[i].dfsSet)
6737 {
6738 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6740 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6741 pChanList->chanParam[i].dfsSet);
6742 }
6743
6744 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6745 {
6746 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6747 }
6748 else
6749 {
6750 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6751 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6752 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6753 }
6754
6755 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6756 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306757 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006758 pChanInfoType++;
6759 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006760 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6761 pWdaParams->pWdaContext = pWDA;
6762 pWdaParams->wdaMsgParam = (void *)pChanList;
6763 /* store Params pass it to WDI */
6764 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6765 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6766 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6767 if(IS_WDI_STATUS_FAILURE(status))
6768 {
6769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6770 "Failure in Update Channel REQ Params WDI API, free all the memory");
6771 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6772 vos_mem_free(pwdiUpdateChReqParam);
6773 vos_mem_free(pWdaParams->wdaMsgParam);
6774 vos_mem_free(pWdaParams);
6775 }
6776 return CONVERT_WDI2VOS_STATUS(status);
6777}
6778
Jeff Johnson295189b2012-06-20 16:38:30 -07006779/*
6780 * FUNCTION: WDA_AddTSReqCallback
6781 * send ADD TS RSP back to PE
6782 */
6783void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6784{
6785 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306786 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 tAddTsParams *pAddTsReqParams;
6788
6789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 if(NULL == pWdaParams)
6792 {
6793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 VOS_ASSERT(0) ;
6796 return ;
6797 }
6798 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306799 if (NULL == pWDA)
6800 {
6801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6802 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6804 vos_mem_free(pWdaParams->wdaMsgParam);
6805 vos_mem_free(pWdaParams);
6806
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306807 VOS_ASSERT(0);
6808 return ;
6809 }
6810
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6813 vos_mem_free(pWdaParams);
6814
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006815 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 return ;
6818}
6819
Jeff Johnson295189b2012-06-20 16:38:30 -07006820/*
6821 * FUNCTION: WDA_ProcessAddTSReq
6822 * Request to WDI to Update the ADD TS REQ params.
6823 */
6824VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6825 tAddTsParams *pAddTsReqParams)
6826{
6827 WDI_Status status = WDI_STATUS_SUCCESS ;
6828 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6829 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6830 sizeof(WDI_AddTSReqParamsType)) ;
6831 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 if(NULL == wdiAddTSReqParam)
6835 {
6836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 VOS_ASSERT(0);
6839 return VOS_STATUS_E_NOMEM;
6840 }
6841 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6842 if(NULL == pWdaParams)
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 VOS_ASSERT(0);
6847 vos_mem_free(wdiAddTSReqParam);
6848 return VOS_STATUS_E_NOMEM;
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6851 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 //TS IE
6853 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6854 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6855 pAddTsReqParams->tspec.length;
6856
6857 //TS IE : TS INFO : TRAFFIC
6858 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6859 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6860 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6861 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6862 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6863 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6864 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6865 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6866 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6867 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6868 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6869 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6870 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6871 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6872 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6873 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6874
6875 //TS IE : TS INFO : SCHEDULE
6876 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6877 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6878 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6879 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 //TS IE
6881 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6882 pAddTsReqParams->tspec.nomMsduSz;
6883 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6884 pAddTsReqParams->tspec.maxMsduSz;
6885 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6886 pAddTsReqParams->tspec.minSvcInterval;
6887 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6888 pAddTsReqParams->tspec.maxSvcInterval;
6889 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6890 pAddTsReqParams->tspec.inactInterval;
6891 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6892 pAddTsReqParams->tspec.suspendInterval;
6893 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6894 pAddTsReqParams->tspec.svcStartTime;
6895 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6896 pAddTsReqParams->tspec.minDataRate;
6897 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6898 pAddTsReqParams->tspec.meanDataRate;
6899 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6900 pAddTsReqParams->tspec.peakDataRate;
6901 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6902 pAddTsReqParams->tspec.maxBurstSz;
6903 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6904 pAddTsReqParams->tspec.delayBound;
6905 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6906 pAddTsReqParams->tspec.minPhyRate;
6907 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6908 pAddTsReqParams->tspec.surplusBw;
6909 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6910 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 /* TODO: tAddTsParams doesn't have the following fields */
6912#if 0
6913 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6914 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6915 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6916 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6917#endif
6918 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6919
6920 pWdaParams->pWdaContext = pWDA;
6921 /* Store ADD TS pointer, as this will be used for response */
6922 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 /* store Params pass it to WDI */
6924 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 status = WDI_AddTSReq(wdiAddTSReqParam,
6926 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 if(IS_WDI_STATUS_FAILURE(status))
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6930 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6932 vos_mem_free(pWdaParams);
6933 pAddTsReqParams->status = eSIR_FAILURE ;
6934 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006937}
6938
Jeff Johnson295189b2012-06-20 16:38:30 -07006939/*
6940 * FUNCTION: WDA_DelTSReqCallback
6941 * send DEL TS RSP back to PE
6942 */
6943void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6944{
6945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006947 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6949 vos_mem_free(pWdaParams->wdaMsgParam) ;
6950 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 /*
6952 * No respone required for WDA_DEL_TS_REQ so just free the request
6953 * param here
6954 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 return ;
6956}
6957
Jeff Johnson295189b2012-06-20 16:38:30 -07006958/*
6959 * FUNCTION: WDA_ProcessDelTSReq
6960 * Request to WDI to Update the DELTS REQ params.
6961 */
6962VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6963 tDelTsParams *pDelTSReqParams)
6964{
6965 WDI_Status status = WDI_STATUS_SUCCESS ;
6966 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6967 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6968 sizeof(WDI_DelTSReqParamsType)) ;
6969 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006971 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 if(NULL == wdiDelTSReqParam)
6973 {
6974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_ASSERT(0);
6977 return VOS_STATUS_E_NOMEM;
6978 }
6979 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6980 if(NULL == pWdaParams)
6981 {
6982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 VOS_ASSERT(0);
6985 vos_mem_free(wdiDelTSReqParam);
6986 return VOS_STATUS_E_NOMEM;
6987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6989 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6990 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6991 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6992 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 pWdaParams->pWdaContext = pWDA;
6994 /* Store DEL TS pointer, as this will be used for response */
6995 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 /* store Params pass it to WDI */
6997 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 status = WDI_DelTSReq(wdiDelTSReqParam,
6999 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 if(IS_WDI_STATUS_FAILURE(status))
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7003 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7005 vos_mem_free(pWdaParams->wdaMsgParam);
7006 vos_mem_free(pWdaParams);
7007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007009}
Jeff Johnson295189b2012-06-20 16:38:30 -07007010/*
7011 * FUNCTION: WDA_UpdateBeaconParamsCallback
7012 * Free the memory. No need to send any response to PE in this case
7013 */
7014void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7015{
7016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 if(NULL == pWdaParams)
7020 {
7021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 VOS_ASSERT(0) ;
7024 return ;
7025 }
7026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7027 vos_mem_free(pWdaParams->wdaMsgParam) ;
7028 vos_mem_free(pWdaParams);
7029 /*
7030 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7031 * param here
7032 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 return ;
7034}
Jeff Johnson295189b2012-06-20 16:38:30 -07007035/*
7036 * FUNCTION: WDA_ProcessUpdateBeaconParams
7037 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7038 */
7039VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7040 tUpdateBeaconParams *pUpdateBeaconParams)
7041{
7042 WDI_Status status = WDI_STATUS_SUCCESS ;
7043 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7044 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7045 sizeof(WDI_UpdateBeaconParamsType)) ;
7046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 if(NULL == wdiUpdateBeaconParams)
7050 {
7051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 VOS_ASSERT(0);
7054 return VOS_STATUS_E_NOMEM;
7055 }
7056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7057 if(NULL == pWdaParams)
7058 {
7059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 VOS_ASSERT(0);
7062 vos_mem_free(wdiUpdateBeaconParams);
7063 return VOS_STATUS_E_NOMEM;
7064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7066 pUpdateBeaconParams->bssIdx;
7067 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7068 pUpdateBeaconParams->fShortPreamble;
7069 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7070 pUpdateBeaconParams->fShortSlotTime;
7071 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7072 pUpdateBeaconParams->beaconInterval;
7073 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7074 pUpdateBeaconParams->llaCoexist;
7075 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7076 pUpdateBeaconParams->llbCoexist;
7077 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7078 pUpdateBeaconParams->llgCoexist;
7079 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7080 pUpdateBeaconParams->ht20MhzCoexist;
7081 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7082 pUpdateBeaconParams->llnNonGFCoexist;
7083 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7084 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7085 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7086 pUpdateBeaconParams->fRIFSMode;
7087 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7088 pUpdateBeaconParams->paramChangeBitmap;
7089 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7090
7091 pWdaParams->pWdaContext = pWDA;
7092 /* Store UpdateBeacon Req pointer, as this will be used for response */
7093 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 /* store Params pass it to WDI */
7095 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7097 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7098 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 if(IS_WDI_STATUS_FAILURE(status))
7100 {
7101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7102 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7104 vos_mem_free(pWdaParams->wdaMsgParam);
7105 vos_mem_free(pWdaParams);
7106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007109#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007110/*
7111 * FUNCTION: WDA_TSMStatsReqCallback
7112 * send TSM Stats RSP back to PE
7113 */
7114void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7115{
7116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7117 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007118 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7119 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007120
7121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007122 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 if(NULL == pWdaParams)
7124 {
7125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 VOS_ASSERT(0) ;
7128 return ;
7129 }
7130 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307131 if (NULL == pWDA)
7132 {
7133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7134 "%s:pWDA is NULL", __func__);
7135 VOS_ASSERT(0);
7136 return ;
7137 }
7138
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007139 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7140
7141 if(NULL == pGetTsmStatsReqParams)
7142 {
7143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7144 "%s: pGetTsmStatsReqParams received NULL", __func__);
7145 VOS_ASSERT(0);
7146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7147 vos_mem_free(pWdaParams);
7148 return;
7149 }
7150
7151 pTsmRspParams =
7152 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 if( NULL == pTsmRspParams )
7154 {
7155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007156 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 VOS_ASSERT( 0 );
7158 return ;
7159 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007160 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7161 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7162 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7163
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7165 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7166 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7167 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7168 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7169 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7170 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7171 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7172 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7173 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007174
7175 /* Assign get tsm stats req req (backup) in to the response */
7176 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7177
7178 /* free WDI command buffer */
7179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7180 vos_mem_free(pWdaParams);
7181
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 return ;
7184}
7185
7186
Jeff Johnson295189b2012-06-20 16:38:30 -07007187/*
7188 * FUNCTION: WDA_ProcessTsmStatsReq
7189 * Request to WDI to get the TSM Stats params.
7190 */
7191VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007192 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007193{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007194 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007196 tWDA_ReqParams *pWdaParams = NULL;
7197 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7198
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007200 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7202 sizeof(WDI_TSMStatsReqParamsType));
7203 if(NULL == wdiTSMReqParam)
7204 {
7205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 VOS_ASSERT(0);
7208 return VOS_STATUS_E_NOMEM;
7209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7211 if(NULL == pWdaParams)
7212 {
7213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 VOS_ASSERT(0);
7216 vos_mem_free(wdiTSMReqParam);
7217 return VOS_STATUS_E_NOMEM;
7218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7220 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7221 pTsmStats->bssId,
7222 sizeof(wpt_macAddr));
7223 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7224
7225 pWdaParams->pWdaContext = pWDA;
7226 /* Store TSM Stats pointer, as this will be used for response */
7227 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007228 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 status = WDI_TSMStatsReq(wdiTSMReqParam,
7230 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 if(IS_WDI_STATUS_FAILURE(status))
7232 {
7233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7234 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007235 vos_mem_free(pWdaParams);
7236
7237 pGetTsmStatsRspParams =
7238 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7239 if(NULL == pGetTsmStatsRspParams)
7240 {
7241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7242 "%s: VOS MEM Alloc Failure", __func__);
7243 VOS_ASSERT(0);
7244 vos_mem_free(pTsmStats);
7245 return VOS_STATUS_E_NOMEM;
7246 }
7247 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7248 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7249 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7250
7251 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 return CONVERT_WDI2VOS_STATUS(status) ;
7254}
7255#endif
7256/*
7257 * FUNCTION: WDA_SendBeaconParamsCallback
7258 * No need to send any response to PE in this case
7259 */
7260void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7261{
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 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 return ;
7266}
Jeff Johnson295189b2012-06-20 16:38:30 -07007267/*
7268 * FUNCTION: WDA_ProcessSendBeacon
7269 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7270 * start beacon trasmission
7271 */
7272VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7273 tSendbeaconParams *pSendbeaconParams)
7274{
7275 WDI_Status status = WDI_STATUS_SUCCESS ;
7276 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7280 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7281 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7282 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7284 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307285 /* p2pIeOffset should be atleast greater than timIeOffset */
7286 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7287 (pSendbeaconParams->p2pIeOffset <
7288 pSendbeaconParams->timIeOffset))
7289 {
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7291 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7292 VOS_ASSERT( 0 );
7293 return WDI_STATUS_E_FAILURE;
7294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7296 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 /* Copy the beacon template to local buffer */
7298 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7299 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7300 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7301
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7303 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 if(IS_WDI_STATUS_FAILURE(status))
7305 {
7306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "Failure in SEND BEACON REQ Params WDI API" );
7308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 vos_mem_free(pSendbeaconParams);
7310 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007311}
Jeff Johnson295189b2012-06-20 16:38:30 -07007312/*
7313 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7314 * No need to send any response to PE in this case
7315 */
7316void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7317{
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007319 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 return ;
7321}
7322
Jeff Johnson295189b2012-06-20 16:38:30 -07007323/*
7324 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7325 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7326 * send probe response
7327 */
7328VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7329 tSendProbeRespParams *pSendProbeRspParams)
7330{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007331 WDI_Status status = WDI_STATUS_SUCCESS;
7332 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7333 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007335 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007336
7337 if (!wdiSendProbeRspParam)
7338 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7339
Jeff Johnson295189b2012-06-20 16:38:30 -07007340 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007341 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007343 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 /* Copy the Probe Response template to local buffer */
7346 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007347 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007348 pSendProbeRspParams->pProbeRespTemplate,
7349 pSendProbeRspParams->probeRespTemplateLen);
7350 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007351 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7353 WDI_PROBE_REQ_BITMAP_IE_LEN);
7354
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007355 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007356
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007357 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 if(IS_WDI_STATUS_FAILURE(status))
7360 {
7361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7362 "Failure in SEND Probe RSP Params WDI API" );
7363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007365 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007367}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007368#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007369/*
7370 * FUNCTION: WDA_SetMaxTxPowerCallBack
7371 * send the response to PE with power value received from WDI
7372 */
7373void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7374 void* pUserData)
7375{
7376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7377 tWDA_CbContext *pWDA = NULL;
7378 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7379
7380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007381 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 if(NULL == pWdaParams)
7383 {
7384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007385 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 VOS_ASSERT(0) ;
7387 return ;
7388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307390 if (NULL == pWDA)
7391 {
7392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7393 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7395 vos_mem_free(pWdaParams->wdaMsgParam);
7396 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307397 VOS_ASSERT(0);
7398 return ;
7399 }
7400
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 if( NULL == pMaxTxPowerParams )
7403 {
7404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007405 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007406 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7408 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 return ;
7410 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007411
Jeff Johnson295189b2012-06-20 16:38:30 -07007412
7413 /*need to free memory for the pointers used in the
7414 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7416 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007418
Jeff Johnson295189b2012-06-20 16:38:30 -07007419
7420 /* send response to UMAC*/
7421 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7422
7423 return;
7424}
Jeff Johnson295189b2012-06-20 16:38:30 -07007425/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 * Request to WDI to send set Max Tx Power Request
7428 */
7429 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7430 tMaxTxPowerParams *MaxTxPowerParams)
7431{
7432 WDI_Status status = WDI_STATUS_SUCCESS;
7433 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7434 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007438
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7440 sizeof(WDI_SetMaxTxPowerParamsType));
7441 if(NULL == wdiSetMaxTxPowerParams)
7442 {
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 VOS_ASSERT(0);
7446 return VOS_STATUS_E_NOMEM;
7447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7449 if(NULL == pWdaParams)
7450 {
7451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 vos_mem_free(wdiSetMaxTxPowerParams);
7454 VOS_ASSERT(0);
7455 return VOS_STATUS_E_NOMEM;
7456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 /* Copy.Max.Tx.Power Params to WDI structure */
7458 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7459 MaxTxPowerParams->bssId,
7460 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7462 MaxTxPowerParams->selfStaMacAddr,
7463 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7465 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 pWdaParams->pWdaContext = pWDA;
7468 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 /* store Params pass it to WDI */
7470 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7472 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 if(IS_WDI_STATUS_FAILURE(status))
7474 {
7475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7476 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7478 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007479 /* send response to UMAC*/
7480 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 }
7482 return CONVERT_WDI2VOS_STATUS(status);
7483
7484}
Jeff Johnson295189b2012-06-20 16:38:30 -07007485#endif
schang86c22c42013-03-13 18:41:24 -07007486
7487/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007488 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7489 * send the response to PE with power value received from WDI
7490 */
7491void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7492 *pwdiSetMaxTxPowerPerBandRsp,
7493 void* pUserData)
7494{
7495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7496 tWDA_CbContext *pWDA = NULL;
7497 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7498
7499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7500 "<------ %s ", __func__);
7501 if (NULL == pWdaParams)
7502 {
7503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7504 "%s: pWdaParams received NULL", __func__);
7505 VOS_ASSERT(0);
7506 return ;
7507 }
7508 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307509 if (NULL == pWDA)
7510 {
7511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7512 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7514 vos_mem_free(pWdaParams->wdaMsgParam);
7515 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307516 VOS_ASSERT(0);
7517 return ;
7518 }
7519
Arif Hussaina5ebce02013-08-09 15:09:58 -07007520 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7521 if ( NULL == pMxTxPwrPerBandParams )
7522 {
7523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7524 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7525 VOS_ASSERT(0);
7526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7527 vos_mem_free(pWdaParams);
7528 return;
7529 }
7530
7531 /*need to free memory for the pointers used in the
7532 WDA Process.Set Max Tx Power Req function*/
7533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7534 vos_mem_free(pWdaParams);
7535 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7536
7537 /* send response to UMAC*/
7538 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7539 pMxTxPwrPerBandParams, 0);
7540
7541 return;
7542}
7543
7544/*
7545 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7546 * Request to WDI to send set Max Tx Power Per band Request
7547 */
7548 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7549 tMaxTxPowerPerBandParams
7550 *MaxTxPowerPerBandParams)
7551{
7552 WDI_Status status = WDI_STATUS_SUCCESS;
7553 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7554 tWDA_ReqParams *pWdaParams = NULL;
7555
7556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7557 "------> %s ", __func__);
7558
7559 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7560 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7561
7562 if (NULL == wdiSetMxTxPwrPerBandParams)
7563 {
7564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7565 "%s: VOS MEM Alloc Failure", __func__);
7566 VOS_ASSERT(0);
7567 return VOS_STATUS_E_NOMEM;
7568 }
7569 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7570 if (NULL == pWdaParams)
7571 {
7572 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7573 "%s: VOS MEM Alloc Failure", __func__);
7574 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7575 VOS_ASSERT(0);
7576 return VOS_STATUS_E_NOMEM;
7577 }
7578 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7579 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7580 MaxTxPowerPerBandParams->bandInfo;
7581 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7582 MaxTxPowerPerBandParams->power;
7583 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7584 pWdaParams->pWdaContext = pWDA;
7585 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7586 /* store Params pass it to WDI */
7587 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7588 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7589 WDA_SetMaxTxPowerPerBandCallBack,
7590 pWdaParams);
7591 if (IS_WDI_STATUS_FAILURE(status))
7592 {
7593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7594 "Failure in SET MAX TX Power REQ Params WDI API,"
7595 " free all the memory");
7596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7597 vos_mem_free(pWdaParams);
7598 /* send response to UMAC*/
7599 WDA_SendMsg(pWDA,
7600 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7601 MaxTxPowerPerBandParams, 0);
7602 }
7603 return CONVERT_WDI2VOS_STATUS(status);
7604}
7605
7606/*
schang86c22c42013-03-13 18:41:24 -07007607 * FUNCTION: WDA_SetTxPowerCallBack
7608 * send the response to PE with power value received from WDI
7609 */
7610void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7611 void* pUserData)
7612{
7613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7614 tWDA_CbContext *pWDA = NULL;
7615 tSirSetTxPowerReq *pTxPowerParams = NULL;
7616
7617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7618 "<------ %s ", __func__);
7619 if(NULL == pWdaParams)
7620 {
7621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7622 "%s: pWdaParams received NULL", __func__);
7623 VOS_ASSERT(0) ;
7624 return ;
7625 }
7626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307627 if (NULL == pWDA)
7628 {
7629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7630 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7632 vos_mem_free(pWdaParams->wdaMsgParam);
7633 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307634 VOS_ASSERT(0);
7635 return ;
7636 }
7637
schang86c22c42013-03-13 18:41:24 -07007638 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7639 if(NULL == pTxPowerParams)
7640 {
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7642 "%s: pTxPowerParams received NULL " ,__func__);
7643 VOS_ASSERT(0);
7644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7645 vos_mem_free(pWdaParams);
7646 return ;
7647 }
7648
7649 /*need to free memory for the pointers used in the
7650 WDA Process.Set Max Tx Power Req function*/
7651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7652 vos_mem_free(pWdaParams);
7653
7654 /* send response to UMAC*/
7655 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7656 return;
7657}
7658
7659/*
7660 * FUNCTION: WDA_ProcessSetTxPowerReq
7661 * Request to WDI to send set Tx Power Request
7662 */
7663 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7664 tSirSetTxPowerReq *txPowerParams)
7665{
7666 WDI_Status status = WDI_STATUS_SUCCESS;
7667 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7668 tWDA_ReqParams *pWdaParams = NULL;
7669
7670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7671 "------> %s ", __func__);
7672
7673 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7674 sizeof(WDI_SetTxPowerParamsType));
7675 if(NULL == wdiSetTxPowerParams)
7676 {
7677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7678 "%s: VOS MEM Alloc Failure", __func__);
7679 VOS_ASSERT(0);
7680 return VOS_STATUS_E_NOMEM;
7681 }
7682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7683 if(NULL == pWdaParams)
7684 {
7685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7686 "%s: VOS MEM Alloc Failure", __func__);
7687 vos_mem_free(wdiSetTxPowerParams);
7688 VOS_ASSERT(0);
7689 return VOS_STATUS_E_NOMEM;
7690 }
7691 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7692 txPowerParams->bssIdx;
7693 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7694 txPowerParams->mwPower;
7695 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7696 pWdaParams->pWdaContext = pWDA;
7697 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7698 /* store Params pass it to WDI */
7699 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7700 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7701 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7702 if(IS_WDI_STATUS_FAILURE(status))
7703 {
7704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7705 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7707 vos_mem_free(pWdaParams);
7708 /* send response to UMAC*/
7709 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7710 }
7711 return CONVERT_WDI2VOS_STATUS(status);
7712}
7713
Jeff Johnson295189b2012-06-20 16:38:30 -07007714/*
7715 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7716 * Free the memory. No need to send any response to PE in this case
7717 */
7718void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7719{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7721
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007723 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007724
7725 if(NULL == pWdaParams)
7726 {
7727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007728 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007729 VOS_ASSERT(0) ;
7730 return ;
7731 }
7732
7733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7734 vos_mem_free(pWdaParams->wdaMsgParam) ;
7735 vos_mem_free(pWdaParams);
7736
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 /*
7738 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7739 * so just free the request param here
7740 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 return ;
7742}
7743
Jeff Johnson295189b2012-06-20 16:38:30 -07007744/*
7745 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7746 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7747 */
7748VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7749 tP2pPsParams *pP2pPsConfigParams)
7750{
7751 WDI_Status status = WDI_STATUS_SUCCESS ;
7752 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7753 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7754 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007755 tWDA_ReqParams *pWdaParams = NULL;
7756
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007758 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 if(NULL == wdiSetP2PGONOAReqParam)
7760 {
7761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 VOS_ASSERT(0);
7764 return VOS_STATUS_E_NOMEM;
7765 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007766
7767 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7768 if(NULL == pWdaParams)
7769 {
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007773 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007774 VOS_ASSERT(0);
7775 return VOS_STATUS_E_NOMEM;
7776 }
7777
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7779 pP2pPsConfigParams->opp_ps;
7780 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7781 pP2pPsConfigParams->ctWindow;
7782 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7783 pP2pPsConfigParams->count;
7784 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7785 pP2pPsConfigParams->duration;
7786 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7787 pP2pPsConfigParams->interval;
7788 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7789 pP2pPsConfigParams->single_noa_duration;
7790 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7791 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007792
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7794 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007795 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7796
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007798 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7799 pWdaParams->pWdaContext = pWDA;
7800
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007802 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7803
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 if(IS_WDI_STATUS_FAILURE(status))
7805 {
7806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7807 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7809 vos_mem_free(pWdaParams->wdaMsgParam);
7810 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 return CONVERT_WDI2VOS_STATUS(status);
7813
Jeff Johnson295189b2012-06-20 16:38:30 -07007814}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307815
7816#ifdef FEATURE_WLAN_TDLS
7817/*
7818 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7819 * Free the memory. No need to send any response to PE in this case
7820 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307821void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7822 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307823{
7824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7825 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307826 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307827
7828
7829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7830 "<------ %s " ,__func__);
7831 if(NULL == pWdaParams)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7834 "%s: pWdaParams received NULL", __func__);
7835 VOS_ASSERT(0) ;
7836 return ;
7837 }
7838 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7839
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307840 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307841 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7843 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7845 vos_mem_free(pWdaParams->wdaMsgParam);
7846 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307847 VOS_ASSERT(0);
7848 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307849 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307850
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307851 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7852 if( NULL == pTdlsLinkEstablishParams )
7853 {
7854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7855 "%s: pTdlsLinkEstablishParams "
7856 "received NULL " ,__func__);
7857 VOS_ASSERT(0);
7858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7859 vos_mem_free(pWdaParams);
7860 return ;
7861 }
7862 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7863 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307865 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307866 /* send response to UMAC*/
7867 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7868
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307869 return ;
7870}
7871
7872VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7873 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7874{
7875 WDI_Status status = WDI_STATUS_SUCCESS ;
7876 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7877 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7878 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7879 tWDA_ReqParams *pWdaParams = NULL;
7880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7881 "------> %s " ,__func__);
7882 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7883 {
7884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7885 "%s: VOS MEM Alloc Failure", __func__);
7886 VOS_ASSERT(0);
7887 return VOS_STATUS_E_NOMEM;
7888 }
7889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7890 if(NULL == pWdaParams)
7891 {
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7893 "%s: VOS MEM Alloc Failure", __func__);
7894 vos_mem_free(pTdlsLinkEstablishParams);
7895 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7896 VOS_ASSERT(0);
7897 return VOS_STATUS_E_NOMEM;
7898 }
7899 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307900 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307901 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307902 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307903 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307904 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307905 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307906 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307907 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307908 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307909 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7910 pTdlsLinkEstablishParams->isOffChannelSupported;
7911
7912 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7913 pTdlsLinkEstablishParams->validChannels,
7914 pTdlsLinkEstablishParams->validChannelsLen);
7915
7916 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7917 pTdlsLinkEstablishParams->validChannelsLen;
7918
7919 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7920 pTdlsLinkEstablishParams->validOperClasses,
7921 pTdlsLinkEstablishParams->validOperClassesLen);
7922 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7923 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307924
7925 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7926 /* Store msg pointer from PE, as this will be used for response */
7927 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7928 /* store Params pass it to WDI */
7929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7930 pWdaParams->pWdaContext = pWDA;
7931
7932 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7933 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7934 WDA_SetTDLSLinkEstablishReqParamsCallback,
7935 pWdaParams);
7936 if(IS_WDI_STATUS_FAILURE(status))
7937 {
7938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7939 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7941 vos_mem_free(pWdaParams->wdaMsgParam);
7942 vos_mem_free(pWdaParams);
7943 }
7944 return CONVERT_WDI2VOS_STATUS(status);
7945}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307946
7947// tdlsoffchan
7948void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7949 void* pUserData)
7950{
7951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7952 tWDA_CbContext *pWDA = NULL;
7953 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7954
7955
7956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7957 "<------ %s " ,__func__);
7958 if(NULL == pWdaParams)
7959 {
7960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7961 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307962 VOS_ASSERT(0) ;
7963 return ;
7964 }
7965 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7966
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307967 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307968 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7970 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7972 vos_mem_free(pWdaParams->wdaMsgParam);
7973 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307974 VOS_ASSERT(0);
7975 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307976 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307977
Atul Mittalc0f739f2014-07-31 13:47:47 +05307978 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307979 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "%s: pTdlsChanSwitchParams "
7983 "received NULL " ,__func__);
7984 VOS_ASSERT(0);
7985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7986 vos_mem_free(pWdaParams);
7987 return ;
7988 }
7989 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7990 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7992 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307993 /* send response to UMAC*/
7994 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307995
7996 return ;
7997}
7998VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7999 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8000{
8001 WDI_Status status = WDI_STATUS_SUCCESS ;
8002 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8003 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8004 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8005 tWDA_ReqParams *pWdaParams = NULL;
8006
8007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8008 "Enter: %s ",__func__);
8009 if(NULL == wdiSetTDLSChanSwitchReqParam)
8010 {
8011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8012 "%s: VOS MEM Alloc Failure", __func__);
8013 VOS_ASSERT(0);
8014 return VOS_STATUS_E_NOMEM;
8015 }
8016
8017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8018 if(NULL == pWdaParams)
8019 {
8020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8021 "%s: VOS MEM Alloc Failure", __func__);
8022 vos_mem_free(pTdlsChanSwitchParams);
8023 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8024 VOS_ASSERT(0);
8025 return VOS_STATUS_E_NOMEM;
8026 }
8027 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8028 pTdlsChanSwitchParams->staIdx;
8029 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8030 pTdlsChanSwitchParams->tdlsSwMode;
8031 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8032 pTdlsChanSwitchParams->operClass;
8033 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8034 pTdlsChanSwitchParams->tdlsOffCh;
8035 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8036 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8037
8038
8039 /* Store msg pointer from PE, as this will be used for response */
8040 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8041 /* store Params pass it to WDI */
8042 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8043 pWdaParams->pWdaContext = pWDA;
8044 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8045 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8046 WDA_SetTDLSChanSwitchReqParamsCallback,
8047 pWdaParams);
8048 if(IS_WDI_STATUS_FAILURE(status))
8049 {
8050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8051 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8053 vos_mem_free(pWdaParams->wdaMsgParam);
8054 vos_mem_free(pWdaParams);
8055 }
8056 return CONVERT_WDI2VOS_STATUS(status);
8057}
8058#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308059
8060
Jeff Johnson295189b2012-06-20 16:38:30 -07008061#ifdef WLAN_FEATURE_VOWIFI_11R
8062/*
8063 * FUNCTION: WDA_AggrAddTSReqCallback
8064 * send ADD AGGREGATED TS RSP back to PE
8065 */
8066void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8067{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308069 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008070 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008073 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008074 if(NULL == pWdaParams)
8075 {
8076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008077 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008078 VOS_ASSERT(0) ;
8079 return ;
8080 }
8081
8082 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308083 if (NULL == pWDA)
8084 {
8085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8086 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8088 vos_mem_free(pWdaParams->wdaMsgParam);
8089 vos_mem_free(pWdaParams);
8090
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308091 VOS_ASSERT(0);
8092 return ;
8093 }
8094
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008095 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008096
8097 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8098 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008099 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008102
8103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8104 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 return ;
8106}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008107/*
8108 * FUNCTION: WDA_ProcessAddTSReq
8109 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8110 */
8111VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8112 tAggrAddTsParams *pAggrAddTsReqParams)
8113{
8114 WDI_Status status = WDI_STATUS_SUCCESS ;
8115 int i;
8116 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008117 tWDA_ReqParams *pWdaParams = NULL;
8118
8119
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008121 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8123 sizeof(WDI_AggrAddTSReqParamsType)) ;
8124 if(NULL == wdiAggrAddTSReqParam)
8125 {
8126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_ASSERT(0);
8129 return VOS_STATUS_E_NOMEM;
8130 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008131
8132
8133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8134 if(NULL == pWdaParams)
8135 {
8136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008137 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008138 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008139 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008140 VOS_ASSERT(0);
8141 return VOS_STATUS_E_NOMEM;
8142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8144 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8145 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8147 {
8148 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8149 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8150 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8152 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8153 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8154 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8155 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8156 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8157 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8158 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8159 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8160 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8161 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8162 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8163 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8164 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8165 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8166 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8168 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8170 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8172 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8174 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8176 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8178 pAggrAddTsReqParams->tspec[i].inactInterval;
8179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8180 pAggrAddTsReqParams->tspec[i].suspendInterval;
8181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8182 pAggrAddTsReqParams->tspec[i].svcStartTime;
8183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8184 pAggrAddTsReqParams->tspec[i].minDataRate;
8185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8186 pAggrAddTsReqParams->tspec[i].meanDataRate;
8187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8188 pAggrAddTsReqParams->tspec[i].peakDataRate;
8189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8190 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8191 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8192 pAggrAddTsReqParams->tspec[i].delayBound;
8193 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8194 pAggrAddTsReqParams->tspec[i].minPhyRate;
8195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8196 pAggrAddTsReqParams->tspec[i].surplusBw;
8197 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8198 pAggrAddTsReqParams->tspec[i].mediumTime;
8199 }
8200
8201 /* TODO: tAggrAddTsParams doesn't have the following fields */
8202#if 0
8203 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8204 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8205 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8206 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8207#endif
8208 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8209
8210 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008211 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008213 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8214
8215 pWdaParams->pWdaContext = pWDA;
8216
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008218 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8219
Jeff Johnson295189b2012-06-20 16:38:30 -07008220 if(IS_WDI_STATUS_FAILURE(status))
8221 {
8222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8223 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8225 vos_mem_free(pWdaParams);
8226
8227 /* send the failure response back to PE*/
8228 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8229 {
8230 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8231 }
8232
8233 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8234 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 return CONVERT_WDI2VOS_STATUS(status) ;
8237}
8238#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008239/*
Mihir Shetea4306052014-03-25 00:02:54 +05308240 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 * send Enter IMPS RSP back to PE
8242 */
Mihir Shetea4306052014-03-25 00:02:54 +05308243void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008244{
Mihir Shetea4306052014-03-25 00:02:54 +05308245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308246 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308247
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308249 "<------ %s status=%d" ,__func__,status);
8250 if(NULL == pWdaParams)
8251 {
8252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8253 "%s: pWdaParams received NULL", __func__);
8254 VOS_ASSERT(0);
8255 return;
8256 }
8257
8258 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308259 if (NULL == pWDA)
8260 {
8261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8262 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8264 vos_mem_free(pWdaParams->wdaMsgParam);
8265 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308266 VOS_ASSERT(0);
8267 return ;
8268 }
Mihir Shetea4306052014-03-25 00:02:54 +05308269
8270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8271 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008272 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 return ;
8274}
Mihir Shetea4306052014-03-25 00:02:54 +05308275
8276
8277/*
8278 * FUNCTION: WDA_EnterImpsReqCallback
8279 * Free memory and send Enter IMPS RSP back to PE.
8280 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8281 */
8282void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8283{
8284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308285 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308286
8287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8288 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8289
8290 if(NULL == pWdaParams)
8291 {
8292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8293 "%s: pWdaParams received NULL", __func__);
8294 VOS_ASSERT(0);
8295 return;
8296 }
8297
8298 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308299 if (NULL == pWDA)
8300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8302 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8304 vos_mem_free(pWdaParams->wdaMsgParam);
8305 vos_mem_free(pWdaParams);
8306
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308307 VOS_ASSERT(0);
8308 return ;
8309 }
8310
Mihir Shetea4306052014-03-25 00:02:54 +05308311
8312 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8313 {
8314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8315 vos_mem_free(pWdaParams);
8316 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8317 CONVERT_WDI2SIR_STATUS(wdiStatus));
8318 }
8319
8320 return;
8321}
Jeff Johnson295189b2012-06-20 16:38:30 -07008322/*
8323 * FUNCTION: WDA_ProcessEnterImpsReq
8324 * Request to WDI to Enter IMPS power state.
8325 */
8326VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8327{
8328 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308329 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8330 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308331 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008333 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308334
8335
8336 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8337 if (NULL == wdiEnterImpsReqParams)
8338 {
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8340 "%s: VOS MEM Alloc Failure", __func__);
8341 VOS_ASSERT(0);
8342 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8343 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8344 return VOS_STATUS_E_NOMEM;
8345 }
8346
8347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8348 if (NULL == pWdaParams)
8349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8351 "%s: VOS MEM Alloc Failure", __func__);
8352 VOS_ASSERT(0);
8353 vos_mem_free(wdiEnterImpsReqParams);
8354 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8355 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8356 return VOS_STATUS_E_NOMEM;
8357 }
8358
8359 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8360 wdiEnterImpsReqParams->pUserData = pWdaParams;
8361
8362 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8363 pWdaParams->wdaMsgParam = NULL;
8364 pWdaParams->pWdaContext = pWDA;
8365
8366 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8367 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8368 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 if(IS_WDI_STATUS_FAILURE(status))
8370 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308371 if (! (failcnt & 0xF))
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8373 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8374 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308375 vos_mem_free(wdiEnterImpsReqParams);
8376 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008377 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 return CONVERT_WDI2VOS_STATUS(status) ;
8380}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308381
8382/*
8383 * FUNCTION: WDA_ExitImpsRespCallback
8384 * send Exit IMPS RSP back to PE
8385 */
8386void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8387{
8388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8389 tWDA_CbContext *pWDA;
8390
8391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8392 "<------ %s " ,__func__);
8393
8394 if (NULL == pWdaParams)
8395 {
8396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8397 "%s: pWdaParams received NULL", __func__);
8398 VOS_ASSERT(0);
8399 return;
8400 }
8401 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8402
8403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8404 vos_mem_free(pWdaParams);
8405
8406 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8407 return;
8408}
8409
Jeff Johnson295189b2012-06-20 16:38:30 -07008410/*
8411 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 */
8413void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8414{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008417 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308418 if(NULL == pWdaParams)
8419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8421 "%s: pWdaParams received NULL", __func__);
8422 VOS_ASSERT(0);
8423 return;
8424 }
8425
8426 if (IS_WDI_STATUS_FAILURE(status))
8427 {
8428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8429 vos_mem_free(pWdaParams);
8430 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8431 {
8432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8433 FL("reload wlan driver"));
8434 wpalWlanReload();
8435 }
8436 }
8437 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008438}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308439
Jeff Johnson295189b2012-06-20 16:38:30 -07008440/*
8441 * FUNCTION: WDA_ProcessExitImpsReq
8442 * Request to WDI to Exit IMPS power state.
8443 */
8444VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8445{
8446 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308447 tWDA_ReqParams *pWdaParams;
8448 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8449
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008451 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308452 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8453 sizeof(WDI_ExitImpsReqParamsType));
8454 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8457 "%s: VOS MEM Alloc Failure", __func__);
8458 VOS_ASSERT(0);
8459 return VOS_STATUS_E_NOMEM;
8460 }
8461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8462 if(NULL == pWdaParams)
8463 {
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8465 "%s: VOS MEM Alloc Failure", __func__);
8466 VOS_ASSERT(0);
8467 vos_mem_free(wdiExitImpsReqParams);
8468 return VOS_STATUS_E_NOMEM;
8469 }
8470 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8471 wdiExitImpsReqParams->pUserData = pWdaParams;
8472
8473 /* Store param pointer as passed in by caller */
8474 /* store Params pass it to WDI */
8475 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8476 pWdaParams->pWdaContext = pWDA;
8477 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8478 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8479 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8480 pWdaParams);
8481 if (IS_WDI_STATUS_FAILURE(status))
8482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8484 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8486 vos_mem_free(pWdaParams);
8487 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 return CONVERT_WDI2VOS_STATUS(status) ;
8490}
Jeff Johnson295189b2012-06-20 16:38:30 -07008491/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008492 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 * send Enter BMPS RSP back to PE
8494 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008495void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008496{
8497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308498 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008499 tEnterBmpsParams *pEnterBmpsRspParams;
8500
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008502 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 if(NULL == pWdaParams)
8504 {
8505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008506 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 VOS_ASSERT(0) ;
8508 return ;
8509 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008510
8511 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308512 if (NULL == pWDA)
8513 {
8514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8515 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308516
8517 if(pWdaParams->wdaWdiApiMsgParam)
8518 {
8519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8520 }
8521 vos_mem_free(pWdaParams);
8522
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308523 VOS_ASSERT(0);
8524 return ;
8525 }
8526
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008527 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8528
8529 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008530 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008531
8532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008534 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8535
Jeff Johnson295189b2012-06-20 16:38:30 -07008536 return ;
8537}
Jeff Johnson295189b2012-06-20 16:38:30 -07008538/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008539 * FUNCTION: WDA_EnterBmpsReqCallback
8540 * Free memory and send Enter BMPS RSP back to PE.
8541 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8542 */
8543void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8544{
8545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308546 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008547 tEnterBmpsParams *pEnterBmpsRspParams;
8548
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8550 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8551
8552 if(NULL == pWdaParams)
8553 {
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8555 "%s: pWdaParams received NULL", __func__);
8556 VOS_ASSERT(0);
8557 return;
8558 }
8559
8560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308561 if (NULL == pWDA)
8562 {
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8564 "%s:pWDA is NULL", __func__);
8565 VOS_ASSERT(0);
8566 return ;
8567 }
8568
Yue Ma7f44bbe2013-04-12 11:47:39 -07008569 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8570 pEnterBmpsRspParams->status = wdiStatus;
8571
8572 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8573 {
8574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8575 vos_mem_free(pWdaParams);
8576 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8577 }
8578
8579 return;
8580}
8581/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 * FUNCTION: WDA_ProcessEnterBmpsReq
8583 * Request to WDI to Enter BMPS power state.
8584 */
8585VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8586 tEnterBmpsParams *pEnterBmpsReqParams)
8587{
8588 WDI_Status status = WDI_STATUS_SUCCESS;
8589 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8590 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008592 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008596 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 VOS_ASSERT(0);
8598 return VOS_STATUS_E_FAILURE;
8599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8601 if (NULL == wdiEnterBmpsReqParams)
8602 {
8603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008606 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8607 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 return VOS_STATUS_E_NOMEM;
8609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8611 if (NULL == pWdaParams)
8612 {
8613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 VOS_ASSERT(0);
8616 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008617 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8618 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 return VOS_STATUS_E_NOMEM;
8620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8622 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8623 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8624 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008625 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8627 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8628 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008629 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8630 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008631
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 /* Store param pointer as passed in by caller */
8633 /* store Params pass it to WDI */
8634 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008635 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008638 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 if (IS_WDI_STATUS_FAILURE(status))
8640 {
8641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8642 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008644 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008646 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 return CONVERT_WDI2VOS_STATUS(status);
8649}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008650
8651
8652static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8653 WDI_Status wdiStatus,
8654 tExitBmpsParams *pExitBmpsReqParams)
8655{
8656 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8657
8658 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8659}
8660
8661
Jeff Johnson295189b2012-06-20 16:38:30 -07008662/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008663 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 * send Exit BMPS RSP back to PE
8665 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008666void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008667{
8668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308669 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008670 tExitBmpsParams *pExitBmpsRspParams;
8671
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008673 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 if(NULL == pWdaParams)
8675 {
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008677 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 VOS_ASSERT(0) ;
8679 return ;
8680 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008681
8682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308683 if (NULL == pWDA)
8684 {
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8686 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308687
8688 if(pWdaParams->wdaWdiApiMsgParam)
8689 {
8690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8691 }
8692 vos_mem_free(pWdaParams);
8693
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308694 VOS_ASSERT(0);
8695 return ;
8696 }
8697
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008698 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8699
8700 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008701 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008702
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8704 vos_mem_free(pWdaParams) ;
8705
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008706 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 return ;
8708}
Jeff Johnson295189b2012-06-20 16:38:30 -07008709/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008710 * FUNCTION: WDA_ExitBmpsReqCallback
8711 * Free memory and send Exit BMPS RSP back to PE.
8712 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8713 */
8714void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8715{
8716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308717 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008718 tExitBmpsParams *pExitBmpsRspParams;
8719
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8721 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8722
8723 if(NULL == pWdaParams)
8724 {
8725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8726 "%s: pWdaParams received NULL", __func__);
8727 VOS_ASSERT(0);
8728 return;
8729 }
8730
8731 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308732 if (NULL == pWDA)
8733 {
8734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8735 "%s:pWDA is NULL", __func__);
8736 VOS_ASSERT(0);
8737 return ;
8738 }
8739
Yue Ma7f44bbe2013-04-12 11:47:39 -07008740 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8741 pExitBmpsRspParams->status = wdiStatus;
8742
8743 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8744 {
8745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8746 vos_mem_free(pWdaParams);
8747 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8748 }
8749
8750 return;
8751}
8752/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 * FUNCTION: WDA_ProcessExitBmpsReq
8754 * Request to WDI to Exit BMPS power state.
8755 */
8756VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8757 tExitBmpsParams *pExitBmpsReqParams)
8758{
8759 WDI_Status status = WDI_STATUS_SUCCESS ;
8760 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8761 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8762 sizeof(WDI_ExitBmpsReqParamsType)) ;
8763 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008765 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 if(NULL == wdiExitBmpsReqParams)
8767 {
8768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008771 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 return VOS_STATUS_E_NOMEM;
8773 }
8774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8775 if(NULL == pWdaParams)
8776 {
8777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 VOS_ASSERT(0);
8780 vos_mem_free(wdiExitBmpsReqParams);
8781 return VOS_STATUS_E_NOMEM;
8782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008784
8785 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8786
Yue Ma7f44bbe2013-04-12 11:47:39 -07008787 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8788 wdiExitBmpsReqParams->pUserData = pWdaParams;
8789
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 /* Store param pointer as passed in by caller */
8791 /* store Params pass it to WDI */
8792 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8793 pWdaParams->pWdaContext = pWDA;
8794 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008796 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 if(IS_WDI_STATUS_FAILURE(status))
8798 {
8799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8800 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8802 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008803 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 return CONVERT_WDI2VOS_STATUS(status) ;
8806}
Jeff Johnson295189b2012-06-20 16:38:30 -07008807/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008808 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 * send Enter UAPSD RSP back to PE
8810 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008811void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008812{
8813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308814 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008815 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 if(NULL == pWdaParams)
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008821 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 VOS_ASSERT(0) ;
8823 return ;
8824 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008825
8826 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308827 if (NULL == pWDA)
8828 {
8829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8830 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05308831
8832 if(pWdaParams->wdaWdiApiMsgParam)
8833 {
8834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8835 }
8836 vos_mem_free(pWdaParams);
8837
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308838 VOS_ASSERT(0);
8839 return ;
8840 }
8841
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008842 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8843
8844 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008845 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008846
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8848 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008849 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 return ;
8851}
Jeff Johnson295189b2012-06-20 16:38:30 -07008852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008853 * FUNCTION: WDA_EnterUapsdReqCallback
8854 * Free memory and send Enter UAPSD RSP back to PE.
8855 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8856 */
8857void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8858{
8859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8860 tWDA_CbContext *pWDA;
8861 tUapsdParams *pEnterUapsdRsqParams;
8862
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8864 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8865
8866 if(NULL == pWdaParams)
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "%s: pWdaParams received NULL", __func__);
8870 VOS_ASSERT(0);
8871 return;
8872 }
8873
8874 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308875 if (NULL == pWDA)
8876 {
8877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8878 "%s:pWDA is NULL", __func__);
8879 VOS_ASSERT(0);
8880 return ;
8881 }
8882
Yue Ma7f44bbe2013-04-12 11:47:39 -07008883 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8884 pEnterUapsdRsqParams->status = wdiStatus;
8885
8886 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8887 {
8888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8889 vos_mem_free(pWdaParams);
8890 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8891 }
8892
8893 return;
8894}
8895/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 * FUNCTION: WDA_ProcessEnterUapsdReq
8897 * Request to WDI to Enter UAPSD power state.
8898 */
8899VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8900 tUapsdParams *pEnterUapsdReqParams)
8901{
8902 WDI_Status status = WDI_STATUS_SUCCESS ;
8903 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8904 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8905 sizeof(WDI_EnterUapsdReqParamsType)) ;
8906 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 if(NULL == wdiEnterUapsdReqParams)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 VOS_ASSERT(0);
8914 return VOS_STATUS_E_NOMEM;
8915 }
8916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8917 if(NULL == pWdaParams)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 VOS_ASSERT(0);
8922 vos_mem_free(wdiEnterUapsdReqParams);
8923 return VOS_STATUS_E_NOMEM;
8924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8926 pEnterUapsdReqParams->beDeliveryEnabled;
8927 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8928 pEnterUapsdReqParams->beTriggerEnabled;
8929 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8930 pEnterUapsdReqParams->bkDeliveryEnabled;
8931 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8932 pEnterUapsdReqParams->bkTriggerEnabled;
8933 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8934 pEnterUapsdReqParams->viDeliveryEnabled;
8935 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8936 pEnterUapsdReqParams->viTriggerEnabled;
8937 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8938 pEnterUapsdReqParams->voDeliveryEnabled;
8939 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8940 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008941 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008942
Yue Ma7f44bbe2013-04-12 11:47:39 -07008943 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8944 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008945
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 /* Store param pointer as passed in by caller */
8947 /* store Params pass it to WDI */
8948 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8949 pWdaParams->pWdaContext = pWDA;
8950 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008952 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 if(IS_WDI_STATUS_FAILURE(status))
8954 {
8955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8956 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8957 vos_mem_free(pWdaParams->wdaMsgParam) ;
8958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8959 vos_mem_free(pWdaParams) ;
8960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 return CONVERT_WDI2VOS_STATUS(status) ;
8962}
Jeff Johnson295189b2012-06-20 16:38:30 -07008963/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008964 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 * send Exit UAPSD RSP back to PE
8966 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008967void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008968{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008969
8970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8971 tWDA_CbContext *pWDA;
8972 tExitUapsdParams *pExitUapsdRspParams;
8973
Jeff Johnson295189b2012-06-20 16:38:30 -07008974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008975 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008976 if(NULL == pWdaParams)
8977 {
8978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008980 VOS_ASSERT(0);
8981 return;
8982 }
8983
8984 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8985 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8986
8987 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008988 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008989
8990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8991 vos_mem_free(pWdaParams) ;
8992
8993 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 return ;
8995}
Jeff Johnson295189b2012-06-20 16:38:30 -07008996/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008997 * FUNCTION: WDA_ExitUapsdReqCallback
8998 * Free memory and send Exit UAPSD RSP back to PE.
8999 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9000 */
9001void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9002{
9003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309004 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009005 tExitUapsdParams *pExitUapsdRspParams;
9006
9007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9008 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9009
9010 if(NULL == pWdaParams)
9011 {
9012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9013 "%s: pWdaParams received NULL", __func__);
9014 VOS_ASSERT(0);
9015 return;
9016 }
9017
9018 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309019 if (NULL == pWDA)
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9022 "%s:pWDA is NULL", __func__);
9023 VOS_ASSERT(0);
9024 return ;
9025 }
9026
Yue Ma7f44bbe2013-04-12 11:47:39 -07009027 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9028 pExitUapsdRspParams->status = wdiStatus;
9029
9030 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9031 {
9032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9033 vos_mem_free(pWdaParams);
9034 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9035 }
9036
9037 return;
9038}
9039/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009040 * FUNCTION: WDA_ProcessExitUapsdReq
9041 * Request to WDI to Exit UAPSD power state.
9042 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009043VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9044 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009045{
9046 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009047 tWDA_ReqParams *pWdaParams ;
9048 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9049 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9050 sizeof(WDI_ExitUapsdReqParamsType)) ;
9051
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009053 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009054
9055 if(NULL == wdiExitUapsdReqParams)
9056 {
9057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009059 VOS_ASSERT(0);
9060 return VOS_STATUS_E_NOMEM;
9061 }
9062 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9063 if(NULL == pWdaParams)
9064 {
9065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009066 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009067 VOS_ASSERT(0);
9068 vos_mem_free(wdiExitUapsdReqParams);
9069 return VOS_STATUS_E_NOMEM;
9070 }
9071
9072 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009073 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9074 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009075
9076 /* Store param pointer as passed in by caller */
9077 /* store Params pass it to WDI */
9078 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9079 pWdaParams->pWdaContext = pWDA;
9080 pWdaParams->wdaMsgParam = pExitUapsdParams;
9081
Yue Ma7f44bbe2013-04-12 11:47:39 -07009082 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 if(IS_WDI_STATUS_FAILURE(status))
9084 {
9085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9086 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009087 vos_mem_free(pWdaParams->wdaMsgParam) ;
9088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9089 vos_mem_free(pWdaParams) ;
9090
Jeff Johnson295189b2012-06-20 16:38:30 -07009091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 return CONVERT_WDI2VOS_STATUS(status) ;
9093}
9094
Jeff Johnson295189b2012-06-20 16:38:30 -07009095/*
9096 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9097 *
9098 */
9099void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9100{
9101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009103 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 if(NULL == pWdaParams)
9105 {
9106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009107 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 VOS_ASSERT(0) ;
9109 return ;
9110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 if( pWdaParams != NULL )
9112 {
9113 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9114 {
9115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9116 }
9117 if( pWdaParams->wdaMsgParam != NULL )
9118 {
9119 vos_mem_free(pWdaParams->wdaMsgParam) ;
9120 }
9121 vos_mem_free(pWdaParams) ;
9122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 return ;
9124}
Jeff Johnson295189b2012-06-20 16:38:30 -07009125/*
9126 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9127 * Request to WDI to set the power save params at start.
9128 */
9129VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9130 tSirPowerSaveCfg *pPowerSaveCfg)
9131{
9132 WDI_Status status = WDI_STATUS_SUCCESS ;
9133 tHalCfg *tlvStruct = NULL ;
9134 tANI_U8 *tlvStructStart = NULL ;
9135 v_PVOID_t *configParam;
9136 tANI_U32 configParamSize;
9137 tANI_U32 *configDataValue;
9138 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9139 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009141 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9143 {
9144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009145 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009147 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 return VOS_STATUS_E_FAILURE;
9149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9151 if (NULL == wdiPowerSaveCfg)
9152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009156 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 return VOS_STATUS_E_NOMEM;
9158 }
9159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9160 if(NULL == pWdaParams)
9161 {
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 VOS_ASSERT(0);
9165 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009166 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009167 return VOS_STATUS_E_NOMEM;
9168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9170 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 if(NULL == configParam)
9172 {
9173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009174 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009175 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 vos_mem_free(pWdaParams);
9177 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009178 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 return VOS_STATUS_E_NOMEM;
9180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 vos_mem_set(configParam, configParamSize, 0);
9182 wdiPowerSaveCfg->pConfigBuffer = configParam;
9183 tlvStruct = (tHalCfg *)configParam;
9184 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009185 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9186 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9187 tlvStruct->length = sizeof(tANI_U32);
9188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9189 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9191 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9193 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9194 tlvStruct->length = sizeof(tANI_U32);
9195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9196 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9198 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9200 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9201 tlvStruct->length = sizeof(tANI_U32);
9202 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9203 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9205 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9207 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9208 tlvStruct->length = sizeof(tANI_U32);
9209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9210 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009211 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9212 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9214 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9215 tlvStruct->length = sizeof(tANI_U32);
9216 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9217 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9219 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9221 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9222 tlvStruct->length = sizeof(tANI_U32);
9223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9224 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9226 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9228 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9229 tlvStruct->length = sizeof(tANI_U32);
9230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9231 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009232 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9233 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9235 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9236 tlvStruct->length = sizeof(tANI_U32);
9237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9238 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9239 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9240 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9242 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9243 tlvStruct->length = sizeof(tANI_U32);
9244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9245 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9246 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9247 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9249 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9250 tlvStruct->length = sizeof(tANI_U32);
9251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9252 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9254 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9256 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9257 tlvStruct->length = sizeof(tANI_U32);
9258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9259 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9261 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 /* store Params pass it to WDI */
9265 pWdaParams->wdaMsgParam = configParam;
9266 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9267 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9269 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 if(IS_WDI_STATUS_FAILURE(status))
9271 {
9272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9273 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9274 vos_mem_free(pWdaParams->wdaMsgParam);
9275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9276 vos_mem_free(pWdaParams);
9277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 return CONVERT_WDI2VOS_STATUS(status);
9280}
Jeff Johnson295189b2012-06-20 16:38:30 -07009281/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009282 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 *
9284 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009285void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009286{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9288
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009290 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009291
9292 if(NULL == pWdaParams)
9293 {
9294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9295 "%s: pWdaParams received NULL", __func__);
9296 VOS_ASSERT(0);
9297 return ;
9298 }
9299
9300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009301 vos_mem_free(pWdaParams);
9302
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 return ;
9304}
Jeff Johnson295189b2012-06-20 16:38:30 -07009305/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009306 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9307 * Free memory.
9308 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9309 */
9310void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9311{
9312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9313
9314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9315 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9316
9317 if(NULL == pWdaParams)
9318 {
9319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9320 "%s: pWdaParams received NULL", __func__);
9321 VOS_ASSERT(0);
9322 return;
9323 }
9324
9325 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9326 {
9327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9328 vos_mem_free(pWdaParams);
9329 }
9330
9331 return;
9332}
9333/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 * FUNCTION: WDA_SetUapsdAcParamsReq
9335 * Request to WDI to set the UAPSD params for an ac (sta mode).
9336 */
9337VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9338 tUapsdInfo *pUapsdInfo)
9339{
9340 WDI_Status status = WDI_STATUS_SUCCESS;
9341 tWDA_CbContext *pWDA = NULL ;
9342 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9343 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9344 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9345 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 if(NULL == wdiUapsdParams)
9349 {
9350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 VOS_ASSERT(0);
9353 return VOS_STATUS_E_NOMEM;
9354 }
9355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9356 if(NULL == pWdaParams)
9357 {
9358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009360 VOS_ASSERT(0);
9361 vos_mem_free(wdiUapsdParams);
9362 return VOS_STATUS_E_NOMEM;
9363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9365 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9366 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9367 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9368 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9369 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009370 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9371 wdiUapsdParams->pUserData = pWdaParams;
9372
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 pWdaParams->pWdaContext = pWDA;
9375 /* Store param pointer as passed in by caller */
9376 pWdaParams->wdaMsgParam = pUapsdInfo;
9377 /* store Params pass it to WDI */
9378 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009380 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 if(IS_WDI_STATUS_FAILURE(status))
9383 {
9384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9385 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9387 vos_mem_free(pWdaParams);
9388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9390 return VOS_STATUS_SUCCESS;
9391 else
9392 return VOS_STATUS_E_FAILURE;
9393
Jeff Johnson295189b2012-06-20 16:38:30 -07009394}
9395/*
9396 * FUNCTION: WDA_ClearUapsdAcParamsReq
9397 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9398 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9399 * and again enter the UPASD with the modified params. Hence the disable
9400 * function was kept empty.
9401 *
9402 */
9403VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9404{
9405 /* do nothing */
9406 return VOS_STATUS_SUCCESS;
9407}
Jeff Johnson295189b2012-06-20 16:38:30 -07009408/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009409 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 *
9411 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009412void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009413{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9415
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009417 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009418
9419 if(NULL == pWdaParams)
9420 {
9421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009422 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009423 VOS_ASSERT(0) ;
9424 return ;
9425 }
9426
9427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9428 vos_mem_free(pWdaParams->wdaMsgParam);
9429 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009430
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 //print a msg, nothing else to do
9432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009433 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 return ;
9435}
Jeff Johnson295189b2012-06-20 16:38:30 -07009436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009437 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9438 * Free memory.
9439 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9440 */
9441void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9442{
9443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9444
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9446 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9447
9448 if(NULL == pWdaParams)
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9451 "%s: pWdaParams received NULL", __func__);
9452 VOS_ASSERT(0);
9453 return;
9454 }
9455
9456 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9457 {
9458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9459 vos_mem_free(pWdaParams->wdaMsgParam);
9460 vos_mem_free(pWdaParams);
9461 }
9462
9463 return;
9464}
9465/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 * FUNCTION: WDA_UpdateUapsdParamsReq
9467 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9468 */
9469VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9470 tUpdateUapsdParams* pUpdateUapsdInfo)
9471{
9472 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009473 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9475 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9476 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009477 tWDA_ReqParams *pWdaParams = NULL;
9478
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 if(NULL == wdiUpdateUapsdParams)
9482 {
9483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 VOS_ASSERT(0);
9486 return VOS_STATUS_E_NOMEM;
9487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9489 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9490 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009491 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9492 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009493
9494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9495 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 {
9497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009500 vos_mem_free(pUpdateUapsdInfo);
9501 vos_mem_free(wdiUpdateUapsdParams);
9502 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009505 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009507 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9508 pWdaParams->pWdaContext = pWDA;
9509
Jeff Johnson43971f52012-07-17 12:26:56 -07009510 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009511 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009512 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513
Jeff Johnson43971f52012-07-17 12:26:56 -07009514 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9517 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009518 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9520 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009521 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009523 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009524}
Jeff Johnson295189b2012-06-20 16:38:30 -07009525/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009526 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 *
9528 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009529void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009530{
9531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009533 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 if(WDI_STATUS_SUCCESS != wdiStatus)
9535 {
9536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009537 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 if(NULL == pWdaParams)
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009542 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 VOS_ASSERT(0) ;
9544 return ;
9545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9547 vos_mem_free(pWdaParams->wdaMsgParam);
9548 vos_mem_free(pWdaParams);
9549 return ;
9550}
Jeff Johnson295189b2012-06-20 16:38:30 -07009551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009552 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9553 * Free memory.
9554 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9555 */
9556void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9557{
9558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9559
9560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9561 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9562
9563 if(NULL == pWdaParams)
9564 {
9565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9566 "%s: pWdaParams received NULL", __func__);
9567 VOS_ASSERT(0);
9568 return;
9569 }
9570
9571 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9572 {
9573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9574 vos_mem_free(pWdaParams->wdaMsgParam);
9575 vos_mem_free(pWdaParams);
9576 }
9577
9578 return;
9579}
9580/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9582 *
9583 */
9584VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9585 tSirWlanSetRxpFilters *pWlanSuspendParam)
9586{
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009588 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309589 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009590 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309591 /* Sanity Check
9592 * This is very unlikely and add assert to collect more info next time */
9593 if(NULL == pWlanSuspendParam)
9594 {
9595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9596 "%s: pWlanSuspendParam received NULL", __func__);
9597 VOS_ASSERT(0) ;
9598 return VOS_STATUS_E_FAULT;
9599 }
9600 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9601 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 if(NULL == wdiRxpFilterParams)
9605 {
9606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 VOS_ASSERT(0);
9609 vos_mem_free(pWlanSuspendParam);
9610 return VOS_STATUS_E_NOMEM;
9611 }
9612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9613 if(NULL == pWdaParams)
9614 {
9615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009617 VOS_ASSERT(0);
9618 vos_mem_free(wdiRxpFilterParams);
9619 vos_mem_free(pWlanSuspendParam);
9620 return VOS_STATUS_E_NOMEM;
9621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9623 pWlanSuspendParam->setMcstBcstFilter;
9624 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9625 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9626
Yue Ma7f44bbe2013-04-12 11:47:39 -07009627 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9628 wdiRxpFilterParams->pUserData = pWdaParams;
9629
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 pWdaParams->pWdaContext = pWDA;
9631 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9632 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009633 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009634 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009636 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 {
9638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9639 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009640 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9642 vos_mem_free(pWdaParams->wdaMsgParam);
9643 vos_mem_free(pWdaParams);
9644 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009645 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009646}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309647
9648/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309649 * FUNCTION: WDA_ProcessGetFrameLogReq
9650 * Request to WDI to get the Frame Log.
9651 */
9652VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9653 tAniGetFrameLogReq *pGetFrameLog)
9654{
9655 VOS_STATUS status = VOS_STATUS_SUCCESS;
9656 WDI_Status wstatus;
9657 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9658 tWDA_ReqParams *pWdaParams ;
9659
9660 /* Sanity Check*/
9661 if(NULL == pGetFrameLog)
9662 {
9663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9664 "%s: pMgmtLoggingInitParam received NULL", __func__);
9665 VOS_ASSERT(0) ;
9666 return VOS_STATUS_E_FAULT;
9667 }
9668
9669 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9670 sizeof(WDI_GetFrameLogReqInfoType));
9671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9672 "------> %s " ,__func__);
9673
9674 if(NULL == wdiGetFrameLogInfo)
9675 {
9676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9677 "%s: VOS MEM Alloc Failure", __func__);
9678 VOS_ASSERT(0);
9679 vos_mem_free(pGetFrameLog);
9680 return VOS_STATUS_E_NOMEM;
9681 }
9682
9683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9684 if(NULL == pWdaParams)
9685 {
9686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9687 "%s: VOS MEM Alloc Failure", __func__);
9688 VOS_ASSERT(0);
9689 vos_mem_free(wdiGetFrameLogInfo);
9690 vos_mem_free(pGetFrameLog);
9691 return VOS_STATUS_E_NOMEM;
9692 }
9693
9694 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9695
9696 pWdaParams->pWdaContext = pWDA;
9697 pWdaParams->wdaMsgParam = pGetFrameLog;
9698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9699
9700 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9701 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9702 pWdaParams);
9703 if(IS_WDI_STATUS_FAILURE(wstatus))
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9706 "Failure in get frame log REQ WDI API, free all the memory" );
9707 status = CONVERT_WDI2VOS_STATUS(wstatus);
9708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9709 vos_mem_free(pWdaParams->wdaMsgParam);
9710 vos_mem_free(pWdaParams);
9711 }
9712 return status;
9713}
9714
9715/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309716 * FUNCTION: WDA_ProcessMgmtLoggingInitReq
9717 *
9718 */
9719VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
9720 tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
9721{
9722 VOS_STATUS status = VOS_STATUS_SUCCESS;
9723 WDI_Status wstatus;
9724 WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
9725 tWDA_ReqParams *pWdaParams ;
9726
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9728 "------> %s " ,__func__);
9729
9730 /* Sanity Check*/
9731 if(NULL == pMgmtLoggingInitParam)
9732 {
9733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9734 "%s: pMgmtLoggingInitParam received NULL", __func__);
9735 VOS_ASSERT(0) ;
9736 return VOS_STATUS_E_FAULT;
9737 }
9738
9739 wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
9740 sizeof(WDI_MgmtLoggingInitReqInfoType));
9741 if(NULL == wdiMgmtLoggingInitInfo)
9742 {
9743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9744 "%s: VOS MEM Alloc Failure", __func__);
9745 VOS_ASSERT(0);
9746 vos_mem_free(pMgmtLoggingInitParam);
9747 return VOS_STATUS_E_NOMEM;
9748 }
9749
9750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9751 if(NULL == pWdaParams)
9752 {
9753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9754 "%s: VOS MEM Alloc Failure", __func__);
9755 VOS_ASSERT(0);
9756 vos_mem_free(wdiMgmtLoggingInitInfo);
9757 vos_mem_free(pMgmtLoggingInitParam);
9758 return VOS_STATUS_E_NOMEM;
9759 }
9760
9761 wdiMgmtLoggingInitInfo->enableFlag=
9762 pMgmtLoggingInitParam->enableFlag;
9763 wdiMgmtLoggingInitInfo->frameType=
9764 pMgmtLoggingInitParam->frameType;
9765 wdiMgmtLoggingInitInfo->frameSize=
9766 pMgmtLoggingInitParam->frameSize;
9767 wdiMgmtLoggingInitInfo->bufferMode=
9768 pMgmtLoggingInitParam->bufferMode;
9769
9770 pWdaParams->pWdaContext = pWDA;
9771 pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
9772 pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
9773
9774 wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
9775 (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
9776 pWdaParams);
9777 if(IS_WDI_STATUS_FAILURE(wstatus))
9778 {
9779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9780 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9781 status = CONVERT_WDI2VOS_STATUS(wstatus);
9782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9783 vos_mem_free(pWdaParams->wdaMsgParam);
9784 vos_mem_free(pWdaParams);
9785 }
9786
9787 return status;
9788}
9789
Jeff Johnson295189b2012-06-20 16:38:30 -07009790/*
9791 * FUNCTION: WDA_WdiIndicationCallback
9792 *
9793 */
9794void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9795 void* pUserData)
9796{
9797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009799}
Jeff Johnson295189b2012-06-20 16:38:30 -07009800/*
9801 * FUNCTION: WDA_ProcessWlanSuspendInd
9802 *
9803 */
9804VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9805 tSirWlanSuspendParam *pWlanSuspendParam)
9806{
9807 WDI_Status wdiStatus;
9808 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9812 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9813 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9814 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9817 if(WDI_STATUS_PENDING == wdiStatus)
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009820 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 }
9822 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9823 {
9824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009825 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 vos_mem_free(pWlanSuspendParam);
9828 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9829}
9830
Chet Lanctot186b5732013-03-18 10:26:30 -07009831#ifdef WLAN_FEATURE_11W
9832/*
9833 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9834 *
9835 */
9836VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9837 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9838{
9839 WDI_Status wdiStatus;
9840 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9842 "------> %s ", __func__);
9843
9844 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9845 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9846 sizeof(tSirMacAddr));
9847
9848 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9849 wdiExclUnencryptParams.pUserData = pWDA;
9850
9851 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9852 if(WDI_STATUS_PENDING == wdiStatus)
9853 {
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9855 "Pending received for %s:%d ", __func__, __LINE__ );
9856 }
9857 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9858 {
9859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9860 "Failure in %s:%d ", __func__, __LINE__ );
9861 }
9862 vos_mem_free(pExclUnencryptParam);
9863 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9864}
9865#endif
9866
Jeff Johnson295189b2012-06-20 16:38:30 -07009867/*
9868 * FUNCTION: WDA_ProcessWlanResumeCallback
9869 *
9870 */
9871void WDA_ProcessWlanResumeCallback(
9872 WDI_SuspendResumeRspParamsType *resumeRspParams,
9873 void* pUserData)
9874{
9875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 if(NULL == pWdaParams)
9879 {
9880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009881 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 VOS_ASSERT(0) ;
9883 return ;
9884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9886 {
9887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009888 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9891 vos_mem_free(pWdaParams->wdaMsgParam);
9892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 return ;
9894}
Jeff Johnson295189b2012-06-20 16:38:30 -07009895/*
9896 * FUNCTION: WDA_ProcessWlanResumeReq
9897 *
9898 */
9899VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9900 tSirWlanResumeParam *pWlanResumeParam)
9901{
9902 WDI_Status wdiStatus;
9903 WDI_ResumeParamsType *wdiResumeParams =
9904 (WDI_ResumeParamsType *)vos_mem_malloc(
9905 sizeof(WDI_ResumeParamsType) ) ;
9906 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 if(NULL == wdiResumeParams)
9910 {
9911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 VOS_ASSERT(0);
9914 return VOS_STATUS_E_NOMEM;
9915 }
9916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9917 if(NULL == pWdaParams)
9918 {
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 VOS_ASSERT(0);
9922 vos_mem_free(wdiResumeParams);
9923 return VOS_STATUS_E_NOMEM;
9924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9926 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 wdiResumeParams->wdiReqStatusCB = NULL;
9929 pWdaParams->wdaMsgParam = pWlanResumeParam;
9930 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9931 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9933 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9934 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9936 {
9937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9938 "Failure in Host Resume REQ WDI API, free all the memory " );
9939 VOS_ASSERT(0);
9940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9941 vos_mem_free(pWdaParams->wdaMsgParam);
9942 vos_mem_free(pWdaParams);
9943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9945}
9946
Jeff Johnson295189b2012-06-20 16:38:30 -07009947/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009948 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 *
9950 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009951void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009952{
9953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 if(NULL == pWdaParams)
9957 {
9958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009959 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 VOS_ASSERT(0) ;
9961 return ;
9962 }
9963
9964 vos_mem_free(pWdaParams->wdaMsgParam) ;
9965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9966 vos_mem_free(pWdaParams) ;
9967 /*
9968 * No respone required for SetBeaconFilter req so just free the request
9969 * param here
9970 */
9971
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 return ;
9973}
Jeff Johnson295189b2012-06-20 16:38:30 -07009974/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009975 * FUNCTION: WDA_SetBeaconFilterReqCallback
9976 * Free memory.
9977 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9978 */
9979void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9980{
9981 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9982
9983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9984 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9985
9986 if(NULL == pWdaParams)
9987 {
9988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9989 "%s: pWdaParams received NULL", __func__);
9990 VOS_ASSERT(0);
9991 return;
9992 }
9993
9994 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9995 {
9996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9997 vos_mem_free(pWdaParams->wdaMsgParam);
9998 vos_mem_free(pWdaParams);
9999 }
10000
10001 return;
10002}
10003/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 * FUNCTION: WDA_SetBeaconFilterReq
10005 * Request to WDI to send the beacon filtering related information.
10006 */
10007VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10008 tBeaconFilterMsg* pBeaconFilterInfo)
10009{
10010 WDI_Status status = WDI_STATUS_SUCCESS;
10011 tANI_U8 *dstPtr, *srcPtr;
10012 tANI_U8 filterLength;
10013 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10014 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10015 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 if(NULL == wdiBeaconFilterInfo)
10020 {
10021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 VOS_ASSERT(0);
10024 return VOS_STATUS_E_NOMEM;
10025 }
10026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10027 if(NULL == pWdaParams)
10028 {
10029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 VOS_ASSERT(0);
10032 vos_mem_free(wdiBeaconFilterInfo);
10033 return VOS_STATUS_E_NOMEM;
10034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
10036 pBeaconFilterInfo->beaconInterval;
10037 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
10038 pBeaconFilterInfo->capabilityInfo;
10039 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
10040 pBeaconFilterInfo->capabilityMask;
10041 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070010042
10043 //Fill the BssIdx
10044 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
10045
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 //Fill structure with info contained in the beaconFilterTable
10047 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
10048 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
10049 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
10050 if(WDI_BEACON_FILTER_LEN < filterLength)
10051 {
10052 filterLength = WDI_BEACON_FILTER_LEN;
10053 }
10054 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010055 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
10056 wdiBeaconFilterInfo->pUserData = pWdaParams;
10057
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 /* Store param pointer as passed in by caller */
10059 /* store Params pass it to WDI */
10060 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
10061 pWdaParams->pWdaContext = pWDA;
10062 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
10063
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010065 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 if(IS_WDI_STATUS_FAILURE(status))
10067 {
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10069 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
10070 vos_mem_free(pWdaParams->wdaMsgParam) ;
10071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10072 vos_mem_free(pWdaParams) ;
10073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 return CONVERT_WDI2VOS_STATUS(status) ;
10075}
Jeff Johnson295189b2012-06-20 16:38:30 -070010076/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 *
10079 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010080void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010081{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10083
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010085 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010086
10087 if(NULL == pWdaParams)
10088 {
10089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010090 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010091 VOS_ASSERT(0) ;
10092 return ;
10093 }
10094
10095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10096 vos_mem_free(pWdaParams->wdaMsgParam);
10097 vos_mem_free(pWdaParams);
10098
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 //print a msg, nothing else to do
10100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010101 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 return ;
10103}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010104/*
10105 * FUNCTION: WDA_RemBeaconFilterReqCallback
10106 * Free memory.
10107 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10108 */
10109void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10110{
10111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10112
10113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10114 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10115
10116 if(NULL == pWdaParams)
10117 {
10118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10119 "%s: pWdaParams received NULL", __func__);
10120 VOS_ASSERT(0);
10121 return;
10122 }
10123
10124 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10125 {
10126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10127 vos_mem_free(pWdaParams->wdaMsgParam);
10128 vos_mem_free(pWdaParams);
10129 }
10130
10131 return;
10132}
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 // TODO: PE does not have this feature for now implemented,
10134 // but the support for removing beacon filter exists between
10135 // HAL and FW. This function can be called whenever PE defines
10136 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010137/*
10138 * FUNCTION: WDA_RemBeaconFilterReq
10139 * Request to WDI to send the removal of beacon filtering related information.
10140 */
10141VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10142 tRemBeaconFilterMsg* pBeaconFilterInfo)
10143{
10144 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010145 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10147 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10148 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010149 tWDA_ReqParams *pWdaParams ;
10150
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010153 if(NULL == wdiBeaconFilterInfo)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 VOS_ASSERT(0);
10158 return VOS_STATUS_E_NOMEM;
10159 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10161 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010165 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010166 vos_mem_free(wdiBeaconFilterInfo);
10167 vos_mem_free(pBeaconFilterInfo);
10168 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010170
10171 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10172 pBeaconFilterInfo->ucIeCount;
10173 //Fill structure with info contained in the ucRemIeId
10174 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10175 pBeaconFilterInfo->ucRemIeId,
10176 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10177 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10178 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010179
10180 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010181 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010182 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10184
10185 pWdaParams->pWdaContext = pWDA;
10186
Jeff Johnson43971f52012-07-17 12:26:56 -070010187 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010188 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010189 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 {
10191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10192 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010193 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10195 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010196 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010197 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010198 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010199}
Jeff Johnson295189b2012-06-20 16:38:30 -070010200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010201 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 *
10203 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010204void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010205{
10206 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 if(NULL == pWdaParams)
10210 {
10211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010212 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 VOS_ASSERT(0) ;
10214 return ;
10215 }
10216
10217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10218 vos_mem_free(pWdaParams) ;
10219
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 return ;
10221}
Jeff Johnson295189b2012-06-20 16:38:30 -070010222/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010223 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10224 * Free memory.
10225 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10226 */
10227void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10228{
10229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10230
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10232 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10233
10234 if(NULL == pWdaParams)
10235 {
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10237 "%s: pWdaParams received NULL", __func__);
10238 VOS_ASSERT(0);
10239 return;
10240 }
10241
10242 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10243 {
10244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10245 vos_mem_free(pWdaParams);
10246 }
10247
10248 return;
10249}
10250/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 * FUNCTION: WDA_SetRSSIThresholdsReq
10252 * Request to WDI to set the RSSI thresholds (sta mode).
10253 */
10254VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10255{
10256 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010257 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 tWDA_CbContext *pWDA = NULL ;
10259 v_PVOID_t pVosContext = NULL;
10260 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10261 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10262 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10263 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 if(NULL == wdiRSSIThresholdsInfo)
10267 {
10268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 VOS_ASSERT(0);
10271 return VOS_STATUS_E_NOMEM;
10272 }
10273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10274 if(NULL == pWdaParams)
10275 {
10276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 VOS_ASSERT(0);
10279 vos_mem_free(wdiRSSIThresholdsInfo);
10280 return VOS_STATUS_E_NOMEM;
10281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10290 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10291 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010292 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10293 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10295 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10296
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 /* Store param pointer as passed in by caller */
10298 /* store Params pass it to WDI */
10299 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10300 pWdaParams->pWdaContext = pWDA;
10301 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010302 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010303 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010304 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 {
10306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10307 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010308 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10310 vos_mem_free(pWdaParams) ;
10311 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010312 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010313
10314}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010315/*
Yue Madb90ac12013-04-04 13:39:13 -070010316 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 *
10318 */
Yue Madb90ac12013-04-04 13:39:13 -070010319void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010320{
10321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10322
10323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 if(NULL == pWdaParams)
10326 {
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 VOS_ASSERT(0) ;
10330 return ;
10331 }
10332
10333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10334 vos_mem_free(pWdaParams->wdaMsgParam);
10335 vos_mem_free(pWdaParams) ;
10336
10337 //print a msg, nothing else to do
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010339 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 return ;
10341}
Jeff Johnson295189b2012-06-20 16:38:30 -070010342/*
Yue Madb90ac12013-04-04 13:39:13 -070010343 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010344 * Free memory.
10345 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010346 */
10347void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10348{
10349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10350
10351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10353
10354 if(NULL == pWdaParams)
10355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10357 "%s: Invalid pWdaParams pointer", __func__);
10358 VOS_ASSERT(0);
10359 return;
10360 }
10361
10362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10363 {
10364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10365 vos_mem_free(pWdaParams->wdaMsgParam);
10366 vos_mem_free(pWdaParams);
10367 }
10368
10369 return;
10370}
10371/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 * FUNCTION: WDA_ProcessHostOffloadReq
10373 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10374 * to broadcast traffic (sta mode).
10375 */
10376VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10377 tSirHostOffloadReq *pHostOffloadParams)
10378{
10379 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010380 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10382 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10383 sizeof(WDI_HostOffloadReqParamsType)) ;
10384 tWDA_ReqParams *pWdaParams ;
10385
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010387 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010388
10389 if(NULL == wdiHostOffloadInfo)
10390 {
10391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 VOS_ASSERT(0);
10394 return VOS_STATUS_E_NOMEM;
10395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10397 if(NULL == pWdaParams)
10398 {
10399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 VOS_ASSERT(0);
10402 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010403 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 return VOS_STATUS_E_NOMEM;
10405 }
10406
10407 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10408 pHostOffloadParams->offloadType;
10409 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10410 pHostOffloadParams->enableOrDisable;
10411
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010412 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10413 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10414
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10416 {
10417 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10418 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10419 pHostOffloadParams->params.hostIpv4Addr,
10420 4);
10421 break;
10422 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10423 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10424 pHostOffloadParams->params.hostIpv6Addr,
10425 16);
10426 break;
10427 case SIR_IPV6_NS_OFFLOAD:
10428 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10429 pHostOffloadParams->params.hostIpv6Addr,
10430 16);
10431
10432#ifdef WLAN_NS_OFFLOAD
10433 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10434 {
10435 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10436 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10437 16);
10438 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10439 }
10440 else
10441 {
10442 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10443 }
10444
10445 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10446 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10447 16);
10448 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10449 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10450 6);
10451
10452 //Only two are supported so let's go through them without a loop
10453 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10454 {
10455 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10456 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10457 16);
10458 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10459 }
10460 else
10461 {
10462 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10463 }
10464
10465 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10466 {
10467 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10468 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10469 16);
10470 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10471 }
10472 else
10473 {
10474 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10475 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010476 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10477 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 break;
10479#endif //WLAN_NS_OFFLOAD
10480 default:
10481 {
10482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10483 "No Handling for Offload Type %x in WDA "
10484 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10485 //WDA_VOS_ASSERT(0) ;
10486 }
10487 }
Yue Madb90ac12013-04-04 13:39:13 -070010488 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10489 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010490
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010492 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 /* store Params pass it to WDI */
10494 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10495 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010496
Jeff Johnson295189b2012-06-20 16:38:30 -070010497
Jeff Johnson43971f52012-07-17 12:26:56 -070010498 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010499 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010500
Jeff Johnson43971f52012-07-17 12:26:56 -070010501 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010502 {
10503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010504 "Failure in host offload REQ WDI API, free all the memory %d",
10505 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010506 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10508 vos_mem_free(pWdaParams->wdaMsgParam);
10509 vos_mem_free(pWdaParams) ;
10510 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010512
10513}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010514/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010515 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 *
10517 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010518void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010519{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10521
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010523 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010524
10525 if(NULL == pWdaParams)
10526 {
10527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010528 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010529 VOS_ASSERT(0) ;
10530 return ;
10531 }
10532
10533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10534 vos_mem_free(pWdaParams->wdaMsgParam);
10535 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010536
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 //print a msg, nothing else to do
10538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010539 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 return ;
10541}
Jeff Johnson295189b2012-06-20 16:38:30 -070010542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010543 * FUNCTION: WDA_KeepAliveReqCallback
10544 * Free memory.
10545 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10546 */
10547void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10548{
10549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10550
10551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10553
10554 if(NULL == pWdaParams)
10555 {
10556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10557 "%s: pWdaParams received NULL", __func__);
10558 VOS_ASSERT(0);
10559 return;
10560 }
10561
10562 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10563 {
10564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10565 vos_mem_free(pWdaParams->wdaMsgParam);
10566 vos_mem_free(pWdaParams);
10567 }
10568
10569 return;
10570}
10571/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010572 * FUNCTION: WDA_ProcessKeepAliveReq
10573 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10574 * wakeup due to broadcast traffic (sta mode).
10575 */
10576VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10577 tSirKeepAliveReq *pKeepAliveParams)
10578{
10579 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010580 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010581 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10582 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10583 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010584 tWDA_ReqParams *pWdaParams;
10585
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 if(NULL == wdiKeepAliveInfo)
10589 {
10590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010593 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010594 return VOS_STATUS_E_NOMEM;
10595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010596
10597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10598 if(NULL == pWdaParams)
10599 {
10600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010601 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010602 VOS_ASSERT(0);
10603 vos_mem_free(wdiKeepAliveInfo);
10604 vos_mem_free(pKeepAliveParams);
10605 return VOS_STATUS_E_NOMEM;
10606 }
10607
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10609 pKeepAliveParams->packetType;
10610 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10611 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010612
10613 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10614 pKeepAliveParams->bssId,
10615 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010616
10617 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10618 {
10619 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10620 pKeepAliveParams->hostIpv4Addr,
10621 SIR_IPV4_ADDR_LEN);
10622 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10623 pKeepAliveParams->destIpv4Addr,
10624 SIR_IPV4_ADDR_LEN);
10625 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10626 pKeepAliveParams->destMacAddr,
10627 SIR_MAC_ADDR_LEN);
10628 }
10629 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10630 {
10631 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10632 SIR_IPV4_ADDR_LEN,
10633 0);
10634 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10635 SIR_IPV4_ADDR_LEN,
10636 0);
10637 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10638 SIR_MAC_ADDR_LEN,
10639 0);
10640 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010641 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10642 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010643
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010645 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10648 pWdaParams->pWdaContext = pWDA;
10649
Jeff Johnson295189b2012-06-20 16:38:30 -070010650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10651 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10652 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10653 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10654 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10657 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10658 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10661 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10662 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10663 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10664 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10665 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10666 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10667 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10669 "TimePeriod %d PacketType %d",
10670 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10671 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010672 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010673 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010674
Jeff Johnson43971f52012-07-17 12:26:56 -070010675 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 {
10677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10678 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010679 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10681 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010684 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010685
10686}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010687/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010688 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 *
10690 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010691void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010692 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10693 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010694{
10695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 if(NULL == pWdaParams)
10699 {
10700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 VOS_ASSERT(0) ;
10703 return ;
10704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10706 vos_mem_free(pWdaParams->wdaMsgParam);
10707 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 return ;
10709}
Jeff Johnson295189b2012-06-20 16:38:30 -070010710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010711 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10712 * Free memory.
10713 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10714 */
10715void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10716{
10717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10718
10719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10720 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10721
10722 if(NULL == pWdaParams)
10723 {
10724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10725 "%s: pWdaParams received NULL", __func__);
10726 VOS_ASSERT(0);
10727 return;
10728 }
10729
10730 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10731 {
10732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10733 vos_mem_free(pWdaParams->wdaMsgParam);
10734 vos_mem_free(pWdaParams);
10735 }
10736
10737 return;
10738}
10739
10740/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10742 * Request to WDI to add WOWL Bcast pattern
10743 */
10744VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10745 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10746{
10747 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010748 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10750 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10751 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10752 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010754 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010755 if(NULL == wdiWowlAddBcPtrnInfo)
10756 {
10757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 VOS_ASSERT(0);
10760 return VOS_STATUS_E_NOMEM;
10761 }
10762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10763 if(NULL == pWdaParams)
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010767 VOS_ASSERT(0);
10768 vos_mem_free(wdiWowlAddBcPtrnInfo);
10769 return VOS_STATUS_E_NOMEM;
10770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10772 pWowlAddBcPtrnParams->ucPatternId;
10773 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10774 pWowlAddBcPtrnParams->ucPatternByteOffset;
10775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10776 pWowlAddBcPtrnParams->ucPatternMaskSize;
10777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10778 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10780 {
10781 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10782 pWowlAddBcPtrnParams->ucPattern,
10783 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10784 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10785 pWowlAddBcPtrnParams->ucPatternMask,
10786 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10787 }
10788 else
10789 {
10790 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10791 pWowlAddBcPtrnParams->ucPattern,
10792 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10793 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10794 pWowlAddBcPtrnParams->ucPatternMask,
10795 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10796
10797 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10798 pWowlAddBcPtrnParams->ucPatternExt,
10799 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10800 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10801 pWowlAddBcPtrnParams->ucPatternMaskExt,
10802 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10803 }
10804
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010805 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10806 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10807
Yue Ma7f44bbe2013-04-12 11:47:39 -070010808 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10809 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 /* Store param pointer as passed in by caller */
10811 /* store Params pass it to WDI */
10812 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10813 pWdaParams->pWdaContext = pWDA;
10814 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010815 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010816 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010817 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 {
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10820 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010821 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010822 vos_mem_free(pWdaParams->wdaMsgParam) ;
10823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10824 vos_mem_free(pWdaParams) ;
10825 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010826 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827
10828}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010830 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 *
10832 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010833void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010834 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10835 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010836{
10837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 if(NULL == pWdaParams)
10841 {
10842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 VOS_ASSERT(0) ;
10845 return ;
10846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10848 vos_mem_free(pWdaParams->wdaMsgParam);
10849 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 return ;
10851}
Jeff Johnson295189b2012-06-20 16:38:30 -070010852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010853 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10854 * Free memory.
10855 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10856 */
10857void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10858{
10859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10860
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10862 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10863
10864 if(NULL == pWdaParams)
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10867 "%s: pWdaParams received NULL", __func__);
10868 VOS_ASSERT(0);
10869 return;
10870 }
10871
10872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10873 {
10874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10875 vos_mem_free(pWdaParams->wdaMsgParam);
10876 vos_mem_free(pWdaParams);
10877 }
10878
10879 return;
10880}
10881/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10883 * Request to WDI to delete WOWL Bcast pattern
10884 */
10885VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10886 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10887{
10888 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010889 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010890 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10891 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10892 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10893 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010896 if(NULL == wdiWowlDelBcPtrnInfo)
10897 {
10898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 VOS_ASSERT(0);
10901 return VOS_STATUS_E_NOMEM;
10902 }
10903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10904 if(NULL == pWdaParams)
10905 {
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 VOS_ASSERT(0);
10909 vos_mem_free(wdiWowlDelBcPtrnInfo);
10910 return VOS_STATUS_E_NOMEM;
10911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10913 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010914
10915 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10916 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10917
Yue Ma7f44bbe2013-04-12 11:47:39 -070010918 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10919 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 /* Store param pointer as passed in by caller */
10921 /* store Params pass it to WDI */
10922 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10923 pWdaParams->pWdaContext = pWDA;
10924 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010925 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010926 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010927 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 {
10929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10930 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010931 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 vos_mem_free(pWdaParams->wdaMsgParam) ;
10933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10934 vos_mem_free(pWdaParams) ;
10935 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010936 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010937
10938}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010939/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010940 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 *
10942 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010943void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010944{
10945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010946 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010950 if(NULL == pWdaParams)
10951 {
10952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010953 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 VOS_ASSERT(0) ;
10955 return ;
10956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010957 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010958 if (NULL == pWDA)
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10961 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010962
10963 if(pWdaParams->wdaWdiApiMsgParam)
10964 {
10965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10966 }
10967 vos_mem_free(pWdaParams);
10968
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010969 VOS_ASSERT(0);
10970 return ;
10971 }
10972
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10974
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010975 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10976
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10978 vos_mem_free(pWdaParams) ;
10979
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010980 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010981 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010982 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 return ;
10984}
Jeff Johnson295189b2012-06-20 16:38:30 -070010985/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010986 * FUNCTION: WDA_WowlEnterReqCallback
10987 * Free memory and send WOWL Enter RSP back to PE.
10988 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10989 */
10990void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10991{
10992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010993 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010994 tSirHalWowlEnterParams *pWowlEnterParams;
10995
10996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10997 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10998
10999 if(NULL == pWdaParams)
11000 {
11001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11002 "%s: pWdaParams received NULL", __func__);
11003 VOS_ASSERT(0);
11004 return;
11005 }
11006
11007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011008 if (NULL == pWDA)
11009 {
11010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11011 "%s:pWDA is NULL", __func__);
11012 VOS_ASSERT(0);
11013 return ;
11014 }
11015
Yue Ma7f44bbe2013-04-12 11:47:39 -070011016 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11017 pWowlEnterParams->status = wdiStatus;
11018
11019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11020 {
11021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11022 vos_mem_free(pWdaParams);
11023 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11024 }
11025
11026 return;
11027}
11028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011029 * FUNCTION: WDA_ProcessWowlEnterReq
11030 * Request to WDI to enter WOWL
11031 */
11032VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
11033 tSirHalWowlEnterParams *pWowlEnterParams)
11034{
11035 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011036 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
11038 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
11039 sizeof(WDI_WowlEnterReqParamsType)) ;
11040 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011042 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 if(NULL == wdiWowlEnterInfo)
11044 {
11045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 VOS_ASSERT(0);
11048 return VOS_STATUS_E_NOMEM;
11049 }
11050 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11051 if(NULL == pWdaParams)
11052 {
11053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 VOS_ASSERT(0);
11056 vos_mem_free(wdiWowlEnterInfo);
11057 return VOS_STATUS_E_NOMEM;
11058 }
Kumar Anandaca924e2013-07-22 14:35:34 -070011059
11060 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
11061
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
11063 pWowlEnterParams->magicPtrn,
11064 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
11066 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
11068 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
11070 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
11072 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
11074 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
11076 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070011077 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
11078 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
11080 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070011081#ifdef WLAN_WAKEUP_EVENTS
11082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
11083 pWowlEnterParams->ucWoWEAPIDRequestEnable;
11084
11085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
11086 pWowlEnterParams->ucWoWEAPOL4WayEnable;
11087
11088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
11089 pWowlEnterParams->ucWowNetScanOffloadMatch;
11090
11091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
11092 pWowlEnterParams->ucWowGTKRekeyError;
11093
11094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
11095 pWowlEnterParams->ucWoWBSSConnLoss;
11096#endif // WLAN_WAKEUP_EVENTS
11097
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011098 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
11099 pWowlEnterParams->bssIdx;
11100
Yue Ma7f44bbe2013-04-12 11:47:39 -070011101 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11102 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 /* Store param pointer as passed in by caller */
11104 /* store Params pass it to WDI */
11105 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11106 pWdaParams->pWdaContext = pWDA;
11107 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011108 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011110 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11113 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011114 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 vos_mem_free(pWdaParams->wdaMsgParam) ;
11116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11117 vos_mem_free(pWdaParams) ;
11118 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011119 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011120
11121}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011122/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011123 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 *
11125 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011126void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011127{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011129 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011130 tSirHalWowlExitParams *pWowlExitParams;
11131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011132 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011133 if(NULL == pWdaParams)
11134 {
11135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011136 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011137 VOS_ASSERT(0) ;
11138 return ;
11139 }
11140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011141 if (NULL == pWDA)
11142 {
11143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11144 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011145
11146 if(pWdaParams->wdaWdiApiMsgParam)
11147 {
11148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11149 }
11150 vos_mem_free(pWdaParams);
11151
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011152 VOS_ASSERT(0);
11153 return ;
11154 }
11155
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011156 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11157
11158 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011159 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011160
11161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11162 vos_mem_free(pWdaParams) ;
11163
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011165 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011166 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 return ;
11168}
Jeff Johnson295189b2012-06-20 16:38:30 -070011169/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011170 * FUNCTION: WDA_WowlExitReqCallback
11171 * Free memory and send WOWL Exit RSP back to PE.
11172 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11173 */
11174void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11175{
11176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011177 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011178 tSirHalWowlExitParams *pWowlExitParams;
11179
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11181 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11182
11183 if(NULL == pWdaParams)
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11186 "%s: pWdaParams received NULL", __func__);
11187 VOS_ASSERT(0);
11188 return;
11189 }
11190
11191 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011192 if (NULL == pWDA)
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11195 "%s:pWDA is NULL", __func__);
11196 VOS_ASSERT(0);
11197 return ;
11198 }
11199
Yue Ma7f44bbe2013-04-12 11:47:39 -070011200 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11201 pWowlExitParams->status = wdiStatus;
11202
11203 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11204 {
11205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11206 vos_mem_free(pWdaParams);
11207 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11208 }
11209
11210 return;
11211}
11212/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 * FUNCTION: WDA_ProcessWowlExitReq
11214 * Request to WDI to add WOWL Bcast pattern
11215 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011216VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11217 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011218{
11219 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011220 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011221 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11222 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11223 sizeof(WDI_WowlExitReqParamsType)) ;
11224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011226 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011227 if(NULL == wdiWowlExitInfo)
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011230 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011231 VOS_ASSERT(0);
11232 return VOS_STATUS_E_NOMEM;
11233 }
11234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11235 if(NULL == pWdaParams)
11236 {
11237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011238 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011239 VOS_ASSERT(0);
11240 vos_mem_free(wdiWowlExitInfo);
11241 return VOS_STATUS_E_NOMEM;
11242 }
11243
11244 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11245 pWowlExitParams->bssIdx;
11246
Yue Ma7f44bbe2013-04-12 11:47:39 -070011247 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11248 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011249
11250 /* Store param pointer as passed in by caller */
11251 /* store Params pass it to WDI */
11252 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11253 pWdaParams->pWdaContext = pWDA;
11254 pWdaParams->wdaMsgParam = pWowlExitParams;
11255
11256 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011257 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011258
Jeff Johnson43971f52012-07-17 12:26:56 -070011259 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 {
11261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11262 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011263 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11265 vos_mem_free(pWdaParams->wdaMsgParam);
11266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011268 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011269}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011270/*
11271 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11272 * Request to WDI to determine whether a given station is capable of
11273 * using HW-based frame translation
11274 */
11275v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11276 tANI_U8 staIdx)
11277{
11278 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11279}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011280
11281/*
11282 * FUNCTION: WDA_IsSelfSTA
11283 * Request to WDI to determine whether a given STAID is self station
11284 * index.
11285 */
11286v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11287{
11288
11289 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11290
Girish Gowli05cf44e2014-06-12 21:53:37 +053011291 if (NULL != pWDA)
11292 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11293 else
11294 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011295}
Jeff Johnson295189b2012-06-20 16:38:30 -070011296/*
11297 * FUNCTION: WDA_NvDownloadReqCallback
11298 * send NV Download RSP back to PE
11299 */
11300void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11301 void* pUserData)
11302{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011303
11304 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011305 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011306
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011308 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011309
11310 if(NULL == pWdaParams)
11311 {
11312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011313 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011314 VOS_ASSERT(0) ;
11315 return ;
11316 }
11317
11318 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011319 if (NULL == pWDA)
11320 {
11321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11322 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011323
11324 if(pWdaParams->wdaWdiApiMsgParam)
11325 {
11326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11327 }
11328 vos_mem_free(pWdaParams);
11329
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011330 VOS_ASSERT(0);
11331 return ;
11332 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011333
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11336 vos_mem_free(pWdaParams);
11337
Jeff Johnson295189b2012-06-20 16:38:30 -070011338 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 return ;
11340}
Jeff Johnson295189b2012-06-20 16:38:30 -070011341/*
11342 * FUNCTION: WDA_ProcessNvDownloadReq
11343 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11344 */
11345VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11346{
11347 /* Initialize the local Variables*/
11348 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11349 v_VOID_t *pNvBuffer=NULL;
11350 v_SIZE_t bufferSize = 0;
11351 WDI_Status status = WDI_STATUS_E_FAILURE;
11352 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011353 tWDA_ReqParams *pWdaParams ;
11354
Jeff Johnson295189b2012-06-20 16:38:30 -070011355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011356 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011357 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 {
11359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011360 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011361 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 return VOS_STATUS_E_FAILURE;
11363 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011364
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011366 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11367
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11369 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 if(NULL == wdiNvDownloadReqParam)
11371 {
11372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 VOS_ASSERT(0);
11375 return VOS_STATUS_E_NOMEM;
11376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011377 /* Copy Params to wdiNvDownloadReqParam*/
11378 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11379 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011380
11381 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11382 if(NULL == pWdaParams)
11383 {
11384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011385 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011386 VOS_ASSERT(0);
11387 vos_mem_free(wdiNvDownloadReqParam);
11388 return VOS_STATUS_E_NOMEM;
11389 }
11390
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11393 pWdaParams->wdaMsgParam = NULL;
11394 pWdaParams->pWdaContext = pWDA;
11395
11396
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011398
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011400 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11401
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 if(IS_WDI_STATUS_FAILURE(status))
11403 {
11404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11405 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11407 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011409 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011410}
11411/*
11412 * FUNCTION: WDA_FlushAcReqCallback
11413 * send Flush AC RSP back to TL
11414 */
11415void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11416{
11417 vos_msg_t wdaMsg = {0} ;
11418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11419 tFlushACReq *pFlushACReqParams;
11420 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011422 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 if(NULL == pWdaParams)
11424 {
11425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011426 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 VOS_ASSERT(0) ;
11428 return ;
11429 }
11430
11431 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11432 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11433 if(NULL == pFlushACRspParams)
11434 {
11435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011437 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011438 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 return ;
11440 }
11441 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11442 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11443 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11444 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11445 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011446 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 vos_mem_free(pWdaParams->wdaMsgParam) ;
11448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11449 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011450 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11451 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11452 // POST message to TL
11453 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11454
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 return ;
11456}
Jeff Johnson295189b2012-06-20 16:38:30 -070011457/*
11458 * FUNCTION: WDA_ProcessFlushAcReq
11459 * Request to WDI to Update the DELBA REQ params.
11460 */
11461VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11462 tFlushACReq *pFlushAcReqParams)
11463{
11464 WDI_Status status = WDI_STATUS_SUCCESS ;
11465 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11466 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11467 sizeof(WDI_FlushAcReqParamsType)) ;
11468 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 if(NULL == wdiFlushAcReqParam)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 VOS_ASSERT(0);
11474 return VOS_STATUS_E_NOMEM;
11475 }
11476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11477 if(NULL == pWdaParams)
11478 {
11479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 VOS_ASSERT(0);
11482 vos_mem_free(wdiFlushAcReqParam);
11483 return VOS_STATUS_E_NOMEM;
11484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11488 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11489 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11490 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 /* Store Flush AC pointer, as this will be used for response */
11492 /* store Params pass it to WDI */
11493 pWdaParams->pWdaContext = pWDA;
11494 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11495 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11497 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 if(IS_WDI_STATUS_FAILURE(status))
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11502 vos_mem_free(pWdaParams->wdaMsgParam) ;
11503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11504 vos_mem_free(pWdaParams) ;
11505 //TODO: respond to TL with failure
11506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011508}
Jeff Johnson295189b2012-06-20 16:38:30 -070011509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011510 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 *
11512 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011513void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011514{
11515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011516 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011517 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011518
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 if(NULL == pWdaParams)
11522 {
11523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011524 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 VOS_ASSERT(0) ;
11526 return ;
11527 }
11528 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011529 if (NULL == pWDA)
11530 {
11531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11532 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011533 vos_mem_free(pWdaParams->wdaMsgParam) ;
11534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11535 vos_mem_free(pWdaParams) ;
11536
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011537 VOS_ASSERT(0);
11538 return ;
11539 }
11540
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11542 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11543 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11544 {
11545 pWDA->wdaAmpSessionOn = VOS_FALSE;
11546 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011547 vos_mem_free(pWdaParams->wdaMsgParam) ;
11548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11549 vos_mem_free(pWdaParams) ;
11550 /*
11551 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11552 * param here
11553 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 return ;
11555}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011556/*
11557 * FUNCTION: WDA_BtAmpEventReqCallback
11558 * Free memory.
11559 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11560 */
11561void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11562{
11563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011564 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011565 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011566
Yue Ma7f44bbe2013-04-12 11:47:39 -070011567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11568 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11569
11570 if(NULL == pWdaParams)
11571 {
11572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11573 "%s: pWdaParams received NULL", __func__);
11574 VOS_ASSERT(0);
11575 return;
11576 }
11577
11578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011579 if (NULL == pWDA)
11580 {
11581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11582 "%s:pWDA is NULL", __func__);
11583 VOS_ASSERT(0);
11584 return ;
11585 }
11586
Yue Ma7f44bbe2013-04-12 11:47:39 -070011587 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11588
11589 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11590 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11591 {
11592 pWDA->wdaAmpSessionOn = VOS_FALSE;
11593 }
11594
11595 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11596 {
11597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11598 vos_mem_free(pWdaParams->wdaMsgParam);
11599 vos_mem_free(pWdaParams);
11600 }
11601
11602 return;
11603}
Jeff Johnson295189b2012-06-20 16:38:30 -070011604/*
11605 * FUNCTION: WDA_ProcessBtAmpEventReq
11606 * Request to WDI to Update with BT AMP events.
11607 */
11608VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11609 tSmeBtAmpEvent *pBtAmpEventParams)
11610{
11611 WDI_Status status = WDI_STATUS_SUCCESS ;
11612 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11613 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11614 sizeof(WDI_BtAmpEventParamsType)) ;
11615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011618 if(NULL == wdiBtAmpEventParam)
11619 {
11620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 VOS_ASSERT(0);
11623 return VOS_STATUS_E_NOMEM;
11624 }
11625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11626 if(NULL == pWdaParams)
11627 {
11628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 VOS_ASSERT(0);
11631 vos_mem_free(wdiBtAmpEventParam);
11632 return VOS_STATUS_E_NOMEM;
11633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11635 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011636 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11637 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 /* Store BT AMP event pointer, as this will be used for response */
11639 /* store Params pass it to WDI */
11640 pWdaParams->pWdaContext = pWDA;
11641 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11642 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011643 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011644 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 if(IS_WDI_STATUS_FAILURE(status))
11646 {
11647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11648 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11649 vos_mem_free(pWdaParams->wdaMsgParam) ;
11650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11651 vos_mem_free(pWdaParams) ;
11652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011653 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11654 {
11655 pWDA->wdaAmpSessionOn = VOS_TRUE;
11656 }
11657 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658}
11659
Jeff Johnson295189b2012-06-20 16:38:30 -070011660/*
11661 * FUNCTION: WDA_FTMCommandReqCallback
11662 * Handle FTM CMD response came from HAL
11663 * Route responce to HDD FTM
11664 */
11665void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11666 void *usrData)
11667{
11668 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11670 {
11671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011672 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 return;
11674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 /* Release Current FTM Command Request */
11676 vos_mem_free(pWDA->wdaFTMCmdReq);
11677 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 /* Post FTM Responce to HDD FTM */
11679 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 return;
11681}
Jeff Johnson295189b2012-06-20 16:38:30 -070011682/*
11683 * FUNCTION: WDA_ProcessFTMCommand
11684 * Send FTM command to WDI
11685 */
11686VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11687 tPttMsgbuffer *pPTTFtmCmd)
11688{
11689 WDI_Status status = WDI_STATUS_SUCCESS;
11690 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 ftmCMDReq = (WDI_FTMCommandReqType *)
11692 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11693 if(NULL == ftmCMDReq)
11694 {
11695 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11696 "WDA FTM Command buffer alloc fail");
11697 return VOS_STATUS_E_NOMEM;
11698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11700 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 /* Send command to WDI */
11703 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 return status;
11705}
Jeff Johnsone7245742012-09-05 17:12:55 -070011706#ifdef FEATURE_OEM_DATA_SUPPORT
11707/*
11708 * FUNCTION: WDA_StartOemDataReqCallback
11709 *
11710 */
11711void WDA_StartOemDataReqCallback(
11712 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11713 void* pUserData)
11714{
11715 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011717 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011718 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719
Jeff Johnsone7245742012-09-05 17:12:55 -070011720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011721 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011722
11723 if(NULL == pWdaParams)
11724 {
11725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011726 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011727 VOS_ASSERT(0) ;
11728 return ;
11729 }
11730 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11731
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011732 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011733 {
11734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011735 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011736 VOS_ASSERT(0);
11737 return ;
11738 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011739
Jeff Johnsone7245742012-09-05 17:12:55 -070011740 /*
11741 * Allocate memory for response params sent to PE
11742 */
11743 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11744
11745 // Check if memory is allocated for OemdataMeasRsp Params.
11746 if(NULL == pOemDataRspParams)
11747 {
11748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11749 "OEM DATA WDA callback alloc fail");
11750 VOS_ASSERT(0) ;
11751 return;
11752 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011753
Jeff Johnsone7245742012-09-05 17:12:55 -070011754 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11756 vos_mem_free(pWdaParams->wdaMsgParam);
11757 vos_mem_free(pWdaParams) ;
11758
Jeff Johnsone7245742012-09-05 17:12:55 -070011759 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011760 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011761 * Also, here success always means that we have atleast one BSSID.
11762 */
11763 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11764
11765 //enable Tx
11766 status = WDA_ResumeDataTx(pWDA);
11767 if(status != VOS_STATUS_SUCCESS)
11768 {
11769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11770 }
11771 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11772 return ;
11773}
11774/*
11775 * FUNCTION: WDA_ProcessStartOemDataReq
11776 * Send Start Oem Data Req to WDI
11777 */
11778VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11779 tStartOemDataReq *pOemDataReqParams)
11780{
11781 WDI_Status status = WDI_STATUS_SUCCESS;
11782 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011783 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011784
11785 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11786
11787 if(NULL == wdiOemDataReqParams)
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011791 VOS_ASSERT(0);
11792 return VOS_STATUS_E_NOMEM;
11793 }
11794
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011795 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11796 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11797 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11798 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011799
11800 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11801
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11803 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011804 {
11805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011807 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011808 vos_mem_free(pOemDataReqParams);
11809 VOS_ASSERT(0);
11810 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011811 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011812
Bernald44a1ae2013-01-09 08:30:39 -080011813 pWdaParams->pWdaContext = (void*)pWDA;
11814 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11815 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011816
11817 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11818 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011819
11820 if(IS_WDI_STATUS_FAILURE(status))
11821 {
11822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11823 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11825 vos_mem_free(pWdaParams->wdaMsgParam);
11826 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011827 }
11828 return CONVERT_WDI2VOS_STATUS(status) ;
11829}
11830#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011832 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 *
11834 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011835void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011836{
11837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 if(NULL == pWdaParams)
11841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 VOS_ASSERT(0) ;
11845 return ;
11846 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011847
11848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11849 vos_mem_free(pWdaParams->wdaMsgParam);
11850 vos_mem_free(pWdaParams);
11851
11852 return ;
11853}
11854/*
11855 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11856 * Free memory.
11857 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11858 */
11859void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11860{
11861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11862
11863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11864 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11865
11866 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11869 "%s: pWdaParams received NULL", __func__);
11870 VOS_ASSERT(0);
11871 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011873
11874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 {
11876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011877 vos_mem_free(pWdaParams->wdaMsgParam);
11878 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011880
11881 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011882}
Jeff Johnson295189b2012-06-20 16:38:30 -070011883#ifdef WLAN_FEATURE_GTK_OFFLOAD
11884/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011885 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011886 *
11887 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011888void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011889 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011890{
11891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11892
11893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011894 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011895 if(NULL == pWdaParams)
11896 {
11897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11898 "%s: pWdaParams received NULL", __func__);
11899 VOS_ASSERT(0);
11900 return;
11901 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011902
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 vos_mem_free(pWdaParams->wdaMsgParam) ;
11904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11905 vos_mem_free(pWdaParams) ;
11906
11907 //print a msg, nothing else to do
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011909 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011910
11911 return ;
11912}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011913/*
11914 * FUNCTION: WDA_GTKOffloadReqCallback
11915 * Free memory.
11916 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11917 */
11918void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11919{
11920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011921
Yue Ma7f44bbe2013-04-12 11:47:39 -070011922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11923 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11924
11925 if(NULL == pWdaParams)
11926 {
11927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11928 "%s: pWdaParams received NULL", __func__);
11929 VOS_ASSERT(0);
11930 return;
11931 }
11932
11933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11934 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011935 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11936 sizeof(WDI_GtkOffloadReqMsg));
11937 vos_mem_zero(pWdaParams->wdaMsgParam,
11938 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11940 vos_mem_free(pWdaParams->wdaMsgParam);
11941 vos_mem_free(pWdaParams);
11942 }
11943
11944 return;
11945}
Jeff Johnson295189b2012-06-20 16:38:30 -070011946/*
11947 * FUNCTION: WDA_ProcessGTKOffloadReq
11948 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11949 * to broadcast traffic (sta mode).
11950 */
11951VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11952 tpSirGtkOffloadParams pGtkOffloadParams)
11953{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011954 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11956 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11957 sizeof(WDI_GtkOffloadReqMsg)) ;
11958 tWDA_ReqParams *pWdaParams ;
11959
11960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011961 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011962
11963 if(NULL == wdiGtkOffloadReqMsg)
11964 {
11965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011967 VOS_ASSERT(0);
11968 return VOS_STATUS_E_NOMEM;
11969 }
11970
11971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11972 if(NULL == pWdaParams)
11973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 VOS_ASSERT(0);
11977 vos_mem_free(wdiGtkOffloadReqMsg);
11978 return VOS_STATUS_E_NOMEM;
11979 }
11980
11981 //
11982 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11983 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011984
11985 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011986 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011987
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11989 // Copy KCK
11990 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11991 // Copy KEK
11992 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11993 // Copy KeyReplayCounter
11994 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11995 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11996
Yue Ma7f44bbe2013-04-12 11:47:39 -070011997 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11998 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011999
Jeff Johnson295189b2012-06-20 16:38:30 -070012000
12001 /* Store Params pass it to WDI */
12002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12003 pWdaParams->pWdaContext = pWDA;
12004 /* Store param pointer as passed in by caller */
12005 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12006
Yue Ma7f44bbe2013-04-12 11:47:39 -070012007 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012008
12009 if(IS_WDI_STATUS_FAILURE(status))
12010 {
12011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12012 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012013 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12014 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12016 vos_mem_free(pWdaParams->wdaMsgParam);
12017 vos_mem_free(pWdaParams);
12018 }
12019
12020 return CONVERT_WDI2VOS_STATUS(status) ;
12021}
12022
12023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012024 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012025 *
12026 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012027void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012028 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012029{
12030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12031 tWDA_CbContext *pWDA;
12032 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053012033 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 vos_msg_t vosMsg;
12035
12036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012037 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053012038
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012039 if(NULL == pWdaParams)
12040 {
12041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12042 "%s: pWdaParams received NULL", __func__);
12043 VOS_ASSERT(0);
12044 return;
12045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012046
Nirav Shah374de6e2014-02-13 16:40:01 +053012047 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
12048 if(NULL == pGtkOffloadGetInfoRsp)
12049 {
12050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12051 "%s: vos_mem_malloc failed ", __func__);
12052 VOS_ASSERT(0);
12053 return;
12054 }
12055
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
12057 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
12058
12059 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
12060 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
12061
12062 /* Message Header */
12063 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070012064 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012065
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012066 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
12067 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
12068 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
12069 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
12070 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070012071
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012072 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
12073 pwdiGtkOffloadGetInfoRsparams->bssId,
12074 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 /* VOS message wrapper */
12076 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12077 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
12078 vosMsg.bodyval = 0;
12079
12080 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12081 {
12082 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012083 vos_mem_zero(pGtkOffloadGetInfoRsp,
12084 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
12086 }
12087
12088 vos_mem_free(pWdaParams->wdaMsgParam) ;
12089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12090 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012091
12092 return;
12093}
12094/*
12095 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
12096 * Free memory and send RSP back to SME.
12097 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
12098 */
12099void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
12100{
12101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12102 vos_msg_t vosMsg;
12103
12104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12105 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12106
12107 if(NULL == pWdaParams)
12108 {
12109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12110 "%s: pWdaParams received NULL", __func__);
12111 VOS_ASSERT(0);
12112 return;
12113 }
12114
12115 /* VOS message wrapper */
12116 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12117 vosMsg.bodyptr = NULL;
12118 vosMsg.bodyval = 0;
12119
12120 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12121 {
12122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12123 vos_mem_free(pWdaParams->wdaMsgParam);
12124 vos_mem_free(pWdaParams);
12125 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12126 }
12127
12128 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012129}
12130#endif
12131
12132/*
12133 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12134 * Request to WDI to set Tx Per Tracking configurations
12135 */
12136VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12137{
12138 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012139 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12141 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12142 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012146 if(NULL == pwdiSetTxPerTrackingReqParams)
12147 {
12148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012150 vos_mem_free(pTxPerTrackingParams);
12151 VOS_ASSERT(0);
12152 return VOS_STATUS_E_NOMEM;
12153 }
12154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12155 if(NULL == pWdaParams)
12156 {
12157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12160 vos_mem_free(pTxPerTrackingParams);
12161 VOS_ASSERT(0);
12162 return VOS_STATUS_E_NOMEM;
12163 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12165 pTxPerTrackingParams->ucTxPerTrackingEnable;
12166 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12167 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12168 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12169 pTxPerTrackingParams->ucTxPerTrackingRatio;
12170 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12171 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012172 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12173 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 /* Store param pointer as passed in by caller */
12175 /* store Params pass it to WDI
12176 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12177 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12178 pWdaParams->pWdaContext = pWDA;
12179 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012180 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012181 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012182 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012183 {
12184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12185 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012186 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 vos_mem_free(pWdaParams->wdaMsgParam) ;
12188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12189 vos_mem_free(pWdaParams) ;
12190 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012191 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012192
12193}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012194/*
12195 * FUNCTION: WDA_HALDumpCmdCallback
12196 * Send the VOS complete .
12197 */
12198void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12199 void* pUserData)
12200{
12201 tANI_U8 *buffer = NULL;
12202 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012203 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 if(NULL == pWdaParams)
12205 {
12206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012207 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012208 VOS_ASSERT(0) ;
12209 return ;
12210 }
12211
12212 pWDA = pWdaParams->pWdaContext;
12213 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012214 if(wdiRspParams->usBufferLen > 0)
12215 {
12216 /*Copy the Resp data to UMAC supplied buffer*/
12217 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12218 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012219
12220 if (!pWdaParams->wdaHALDumpAsync)
12221 {/* Indicate VOSS about the start complete */
12222 vos_WDAComplete_cback(pWDA->pVosContext);
12223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12225 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012226 return ;
12227}
12228
Jeff Johnson295189b2012-06-20 16:38:30 -070012229/*
12230 * FUNCTION: WDA_ProcessHALDumpCmdReq
12231 * Send Dump command to WDI
12232 */
12233VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12234 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012235 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012236{
12237 WDI_Status status = WDI_STATUS_SUCCESS;
12238 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12239 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012240 tWDA_HalDumpReqParams *pWdaParams ;
12241
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 pVosContextType pVosContext = NULL;
12243 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12245 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012246 if(pVosContext)
12247 {
12248 if (pVosContext->isLogpInProgress)
12249 {
12250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12251 "%s:LOGP in Progress. Ignore!!!", __func__);
12252 return VOS_STATUS_E_BUSY;
12253 }
12254 }
12255 else
12256 {
12257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12258 "%s: VOS Context Null", __func__);
12259 return VOS_STATUS_E_RESOURCES;
12260 }
12261
Siddharth Bhal68115602015-01-18 20:44:55 +053012262 if (NULL == pVosContext->pWDAContext)
12263 {
12264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12265 "%s: WDA Context Null", __func__);
12266 return VOS_STATUS_E_RESOURCES;
12267 }
12268 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 if(NULL == pWdaParams)
12270 {
12271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 return VOS_STATUS_E_NOMEM;
12274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012275 /* Allocate memory WDI request structure*/
12276 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12277 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12278 if(NULL == wdiHALDumpCmdReqParam)
12279 {
12280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12281 "WDA HAL DUMP Command buffer alloc fail");
12282 vos_mem_free(pWdaParams);
12283 return WDI_STATUS_E_FAILURE;
12284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012286 /* Extract the arguments */
12287 wdiHalDumpCmdInfo->command = cmd;
12288 wdiHalDumpCmdInfo->argument1 = arg1;
12289 wdiHalDumpCmdInfo->argument2 = arg2;
12290 wdiHalDumpCmdInfo->argument3 = arg3;
12291 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012294 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012295
12296 /* Response message will be passed through the buffer */
12297 pWdaParams->wdaMsgParam = (void *)pBuffer;
12298
12299 /* store Params pass it to WDI */
12300 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012302 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12303 pWdaParams);
12304 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12305 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012306 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012307 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12308 WDA_DUMPCMD_WAIT_TIMEOUT );
12309 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012311 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12312 {
12313 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12314 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12315 }
12316 else
12317 {
12318 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12319 "%s: WDA_HALDUMP reporting other error",__func__);
12320 }
12321 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 }
12324 return status;
12325}
Jeff Johnson295189b2012-06-20 16:38:30 -070012326#ifdef WLAN_FEATURE_GTK_OFFLOAD
12327/*
12328 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12329 * Request to WDI to get GTK Offload Information
12330 */
12331VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12332 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12333{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012334 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12336 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12337 tWDA_ReqParams *pWdaParams ;
12338
12339 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12340 {
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012343 VOS_ASSERT(0);
12344 return VOS_STATUS_E_NOMEM;
12345 }
12346
12347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12348 if(NULL == pWdaParams)
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 VOS_ASSERT(0);
12353 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12354 return VOS_STATUS_E_NOMEM;
12355 }
12356
Yue Ma7f44bbe2013-04-12 11:47:39 -070012357 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12358 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012359
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 /* Store Params pass it to WDI */
12361 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12362 pWdaParams->pWdaContext = pWDA;
12363 /* Store param pointer as passed in by caller */
12364 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12365
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012366 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012367 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012368
Yue Ma7f44bbe2013-04-12 11:47:39 -070012369 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012370
12371 if(IS_WDI_STATUS_FAILURE(status))
12372 {
12373 /* failure returned by WDI API */
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12375 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12377 vos_mem_free(pWdaParams) ;
12378 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12379 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12380 }
12381
12382 return CONVERT_WDI2VOS_STATUS(status) ;
12383}
12384#endif // WLAN_FEATURE_GTK_OFFLOAD
12385
12386/*
Yue Mab9c86f42013-08-14 15:59:08 -070012387 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12388 *
12389 */
12390VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12391 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12392{
12393 WDI_Status wdiStatus;
12394 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12395
12396 addPeriodicTxPtrnParams =
12397 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12398
12399 if (NULL == addPeriodicTxPtrnParams)
12400 {
12401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12402 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12403 __func__);
12404
12405 return VOS_STATUS_E_NOMEM;
12406 }
12407
12408 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12409 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12410
12411 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12412 addPeriodicTxPtrnParams->pUserData = pWDA;
12413
12414 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12415
12416 if (WDI_STATUS_PENDING == wdiStatus)
12417 {
12418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12419 "Pending received for %s:%d", __func__, __LINE__ );
12420 }
12421 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12422 {
12423 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12424 "Failure in %s:%d", __func__, __LINE__ );
12425 }
12426
12427 vos_mem_free(addPeriodicTxPtrnParams);
12428
12429 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12430}
12431
12432/*
12433 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12434 *
12435 */
12436VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12437 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12438{
12439 WDI_Status wdiStatus;
12440 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12441
12442 delPeriodicTxPtrnParams =
12443 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12444
12445 if (NULL == delPeriodicTxPtrnParams)
12446 {
12447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12448 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12449 __func__);
12450
12451 return VOS_STATUS_E_NOMEM;
12452 }
12453
12454 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12455 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12456
12457 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12458 delPeriodicTxPtrnParams->pUserData = pWDA;
12459
12460 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12461
12462 if (WDI_STATUS_PENDING == wdiStatus)
12463 {
12464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12465 "Pending received for %s:%d", __func__, __LINE__ );
12466 }
12467 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12468 {
12469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12470 "Failure in %s:%d", __func__, __LINE__ );
12471 }
12472
12473 vos_mem_free(delPeriodicTxPtrnParams);
12474
12475 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12476}
12477
Rajeev79dbe4c2013-10-05 11:03:42 +053012478#ifdef FEATURE_WLAN_BATCH_SCAN
12479/*
12480 * FUNCTION: WDA_ProcessStopBatchScanInd
12481 *
12482 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12483 *
12484 * PARAM:
12485 * pWDA: pointer to WDA context
12486 * pReq: pointer to stop batch scan request
12487 */
12488VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12489 tSirStopBatchScanInd *pReq)
12490{
12491 WDI_Status wdiStatus;
12492 WDI_StopBatchScanIndType wdiReq;
12493
12494 wdiReq.param = pReq->param;
12495
12496 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12497
12498 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12499 {
12500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12501 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12502 }
12503
12504 vos_mem_free(pReq);
12505
12506 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12507}
12508/*==========================================================================
12509 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12510
12511 DESCRIPTION
12512 API to pull batch scan result from FW
12513
12514 PARAMETERS
12515 pWDA: Pointer to WDA context
12516 pGetBatchScanReq: Pointer to get batch scan result indication
12517
12518 RETURN VALUE
12519 NONE
12520
12521===========================================================================*/
12522VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12523 tSirTriggerBatchScanResultInd *pReq)
12524{
12525 WDI_Status wdiStatus;
12526 WDI_TriggerBatchScanResultIndType wdiReq;
12527
12528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12529 "------> %s " ,__func__);
12530
12531 wdiReq.param = pReq->param;
12532
12533 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12534
12535 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12536 {
12537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12538 "Trigger batch scan result ind failed %s:%d",
12539 __func__, wdiStatus);
12540 }
12541
12542 vos_mem_free(pReq);
12543
12544 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12545}
12546
12547/*==========================================================================
12548 FUNCTION WDA_SetBatchScanRespCallback
12549
12550 DESCRIPTION
12551 API to process set batch scan response from FW
12552
12553 PARAMETERS
12554 pRsp: Pointer to set batch scan response
12555 pUserData: Pointer to user data
12556
12557 RETURN VALUE
12558 NONE
12559
12560===========================================================================*/
12561void WDA_SetBatchScanRespCallback
12562(
12563 WDI_SetBatchScanRspType *pRsp,
12564 void* pUserData
12565)
12566{
12567 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12568 tpAniSirGlobal pMac;
12569 void *pCallbackContext;
12570 tWDA_CbContext *pWDA = NULL ;
12571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12572
12573
12574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12575 "<------ %s " ,__func__);
12576 if (NULL == pWdaParams)
12577 {
12578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12579 "%s: pWdaParams received NULL", __func__);
12580 VOS_ASSERT(0) ;
12581 return ;
12582 }
12583
12584 /*extract WDA context*/
12585 pWDA = pWdaParams->pWdaContext;
12586 if (NULL == pWDA)
12587 {
12588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12589 "%s:pWDA is NULL can't invole HDD callback",
12590 __func__);
12591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12592 vos_mem_free(pWdaParams->wdaMsgParam);
12593 vos_mem_free(pWdaParams);
12594 VOS_ASSERT(0);
12595 return;
12596 }
12597
12598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12599 vos_mem_free(pWdaParams->wdaMsgParam);
12600 vos_mem_free(pWdaParams);
12601
12602 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12603 if (NULL == pMac)
12604 {
12605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12606 "%s:pMac is NULL", __func__);
12607 VOS_ASSERT(0);
12608 return;
12609 }
12610
12611 pHddSetBatchScanRsp =
12612 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12613 if (NULL == pHddSetBatchScanRsp)
12614 {
12615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12616 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12617 VOS_ASSERT(0);
12618 return;
12619 }
12620
12621 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12622
12623 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12624 /*call hdd callback with set batch scan response data*/
12625 if(pMac->pmc.setBatchScanReqCallback)
12626 {
12627 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12628 }
12629 else
12630 {
12631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12632 "%s:HDD callback is null", __func__);
12633 VOS_ASSERT(0);
12634 }
12635
12636 vos_mem_free(pHddSetBatchScanRsp);
12637 return ;
12638}
12639
12640/*==========================================================================
12641 FUNCTION WDA_ProcessSetBatchScanReq
12642
12643 DESCRIPTION
12644 API to send set batch scan request to WDI
12645
12646 PARAMETERS
12647 pWDA: Pointer to WDA context
12648 pSetBatchScanReq: Pointer to set batch scan req
12649
12650 RETURN VALUE
12651 NONE
12652
12653===========================================================================*/
12654VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12655 tSirSetBatchScanReq *pSetBatchScanReq)
12656{
12657 WDI_Status status;
12658 tWDA_ReqParams *pWdaParams ;
12659 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12660
12661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12662 "------> %s " ,__func__);
12663
12664 pWdiSetBatchScanReq =
12665 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12666 if (NULL == pWdiSetBatchScanReq)
12667 {
12668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12669 "%s: VOS MEM Alloc Failure", __func__);
12670 vos_mem_free(pSetBatchScanReq);
12671 VOS_ASSERT(0);
12672 return VOS_STATUS_E_NOMEM;
12673 }
12674
12675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12676 if (NULL == pWdaParams)
12677 {
12678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12679 "%s: VOS MEM Alloc Failure", __func__);
12680 VOS_ASSERT(0);
12681 vos_mem_free(pSetBatchScanReq);
12682 vos_mem_free(pWdiSetBatchScanReq);
12683 return VOS_STATUS_E_NOMEM;
12684 }
12685
12686 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12687 pWdiSetBatchScanReq->numberOfScansToBatch =
12688 pSetBatchScanReq->numberOfScansToBatch;
12689 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12690 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12691 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12692
12693 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12694 pWdaParams->pWdaContext = pWDA;
12695 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12696
12697 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12698 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12699 if (IS_WDI_STATUS_FAILURE(status))
12700 {
12701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12702 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12704 vos_mem_free(pWdaParams->wdaMsgParam);
12705 vos_mem_free(pWdaParams);
12706 }
12707 return CONVERT_WDI2VOS_STATUS(status);
12708}
12709
12710#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012711/*
12712 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12713 *
12714 * DESCRIPTION: This function sends start/update OBSS scan
12715 * inidcation message to WDI
12716 *
12717 * PARAM:
12718 * pWDA: pointer to WDA context
12719 * pReq: pointer to start OBSS scan request
12720 */
12721VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12722 tSirHT40OBSSScanInd *pReq)
12723{
12724 WDI_Status status;
12725 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12726 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012727
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12729 "------> %s " ,__func__);
12730 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12731 wdiOBSSScanParams.pUserData = pWDA;
12732
12733 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12734 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12735 pWdiOBSSScanInd->scanType = pReq->scanType;
12736 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12737 pReq->OBSSScanActiveDwellTime;
12738 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12739 pReq->OBSSScanPassiveDwellTime;
12740 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12741 pReq->BSSChannelWidthTriggerScanInterval;
12742 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12743 pReq->BSSWidthChannelTransitionDelayFactor;
12744 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12745 pReq->OBSSScanActiveTotalPerChannel;
12746 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12747 pReq->OBSSScanPassiveTotalPerChannel;
12748 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12749 pReq->OBSSScanActivityThreshold;
12750 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12751 vos_mem_copy(pWdiOBSSScanInd->channels,
12752 pReq->channels,
12753 pReq->channelCount);
12754 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12755 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12756 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12757 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12758 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12759
12760 vos_mem_copy(pWdiOBSSScanInd->ieField,
12761 pReq->ieField,
12762 pReq->ieFieldLen);
12763
12764 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12765 if (WDI_STATUS_PENDING == status)
12766 {
12767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12768 "Pending received for %s:%d ",__func__,__LINE__ );
12769 }
12770 else if (WDI_STATUS_SUCCESS_SYNC != status)
12771 {
12772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12773 "Failure in %s:%d ",__func__,__LINE__ );
12774 }
12775 return CONVERT_WDI2VOS_STATUS(status) ;
12776}
12777/*
12778 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12779 *
12780 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12781 *
12782 * PARAM:
12783 * pWDA: pointer to WDA context
12784 * pReq: pointer to stop batch scan request
12785 */
12786VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12787 tANI_U8 *bssIdx)
12788{
12789 WDI_Status status;
12790
12791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12792 "------> %s " ,__func__);
12793
12794 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12795 if (WDI_STATUS_PENDING == status)
12796 {
12797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12798 "Pending received for %s:%d ",__func__,__LINE__ );
12799 }
12800 else if (WDI_STATUS_SUCCESS_SYNC != status)
12801 {
12802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12803 "Failure in %s:%d ",__func__,__LINE__ );
12804 }
12805 return CONVERT_WDI2VOS_STATUS(status) ;
12806}
Yue Mab9c86f42013-08-14 15:59:08 -070012807/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012808 * FUNCTION: WDA_ProcessRateUpdateInd
12809 *
12810 */
12811VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12812 tSirRateUpdateInd *pRateUpdateParams)
12813{
12814 WDI_Status wdiStatus;
12815 WDI_RateUpdateIndParams rateUpdateParams;
12816
12817 vos_mem_copy(rateUpdateParams.bssid,
12818 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12819
12820 rateUpdateParams.ucastDataRateTxFlag =
12821 pRateUpdateParams->ucastDataRateTxFlag;
12822 rateUpdateParams.reliableMcastDataRateTxFlag =
12823 pRateUpdateParams->reliableMcastDataRateTxFlag;
12824 rateUpdateParams.mcastDataRate24GHzTxFlag =
12825 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12826 rateUpdateParams.mcastDataRate5GHzTxFlag =
12827 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12828
12829 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12830 rateUpdateParams.reliableMcastDataRate =
12831 pRateUpdateParams->reliableMcastDataRate;
12832 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12833 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12834
12835 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12836 rateUpdateParams.pUserData = pWDA;
12837
12838 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12839
12840 if (WDI_STATUS_PENDING == wdiStatus)
12841 {
12842 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12843 "Pending received for %s:%d", __func__, __LINE__ );
12844 }
12845 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12846 {
12847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12848 "Failure in %s:%d", __func__, __LINE__ );
12849 }
12850
12851 vos_mem_free(pRateUpdateParams);
12852
12853 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12854}
12855
12856/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012857 * -------------------------------------------------------------------------
12858 * DATA interface with WDI for Mgmt Frames
12859 * -------------------------------------------------------------------------
12860 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012861/*
12862 * FUNCTION: WDA_TxComplete
12863 * Callback function for the WDA_TxPacket
12864 */
12865VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12866 VOS_STATUS status )
12867{
12868
12869 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12870 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012871 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012872
Mihir Shete63341222015-03-24 15:39:18 +053012873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12874
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 if(NULL == wdaContext)
12876 {
12877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12878 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012879 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012880 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012881 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012882 return VOS_STATUS_E_FAILURE;
12883 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012884
12885 /*Check if frame was timed out or not*/
12886 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12887 (v_PVOID_t)&uUserData);
12888
12889 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12890 {
12891 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12893 "%s: MGMT Frame Tx timed out",
12894 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012895 vos_pkt_return_packet(pData);
12896 return VOS_STATUS_SUCCESS;
12897 }
12898
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12900 if( NULL!=wdaContext->pTxCbFunc)
12901 {
12902 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012903 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012904 {
12905 wdaContext->pTxCbFunc(pMac, pData);
12906 }
12907 else
12908 {
12909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012910 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012911 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012912 //Return from here since we reaching here because the packet already timeout
12913 return status;
12914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012915 }
12916
12917 /*
12918 * Trigger the event to bring the HAL TL Tx complete function to come
12919 * out of wait
12920 * Let the coe above to complete the packet first. When this event is set,
12921 * the thread waiting for the event may run and set Vospacket_freed causing the original
12922 * packet not being freed.
12923 */
12924 status = vos_event_set(&wdaContext->txFrameEvent);
12925 if(!VOS_IS_STATUS_SUCCESS(status))
12926 {
12927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012928 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 return status;
12931}
Jeff Johnson295189b2012-06-20 16:38:30 -070012932/*
12933 * FUNCTION: WDA_TxPacket
12934 * Forward TX management frame to WDI
12935 */
12936VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12937 void *pFrmBuf,
12938 tANI_U16 frmLen,
12939 eFrameType frmType,
12940 eFrameTxDir txDir,
12941 tANI_U8 tid,
12942 pWDATxRxCompFunc pCompFunc,
12943 void *pData,
12944 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012945 tANI_U32 txFlag,
12946 tANI_U32 txBdToken
12947 )
Jeff Johnson295189b2012-06-20 16:38:30 -070012948{
12949 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12950 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12951 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12952 tANI_U8 eventIdx = 0;
12953 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12954 tpAniSirGlobal pMac;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012955
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 if((NULL == pWDA)||(NULL == pFrmBuf))
12957 {
12958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012959 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012960 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 VOS_ASSERT(0);
12962 return VOS_STATUS_E_FAILURE;
12963 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012964
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053012966 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
12967 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070012968 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12969 if(NULL == pMac)
12970 {
12971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012972 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 VOS_ASSERT(0);
12974 return VOS_STATUS_E_FAILURE;
12975 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012976
Jeff Johnson295189b2012-06-20 16:38:30 -070012977 /* store the call back function in WDA context */
12978 pWDA->pTxCbFunc = pCompFunc;
12979 /* store the call back for the function of ackTxComplete */
12980 if( pAckTxComp )
12981 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012982 if( NULL != pWDA->pAckTxCbFunc )
12983 {
12984 /* Already TxComp is active no need to active again */
12985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012986 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012987 pWDA->pAckTxCbFunc( pMac, 0);
12988 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012989
Jeff Johnsone7245742012-09-05 17:12:55 -070012990 if( VOS_STATUS_SUCCESS !=
12991 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12992 {
12993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12994 "Tx Complete timeout Timer Stop Failed ");
12995 }
12996 else
12997 {
12998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012999 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013000 }
13001 }
13002
13003 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13004 pWDA->pAckTxCbFunc = pAckTxComp;
13005 if( VOS_STATUS_SUCCESS !=
13006 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13007 {
13008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13009 "Tx Complete Timer Start Failed ");
13010 pWDA->pAckTxCbFunc = NULL;
13011 return eHAL_STATUS_FAILURE;
13012 }
13013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013014 /* Reset the event to be not signalled */
13015 status = vos_event_reset(&pWDA->txFrameEvent);
13016 if(!VOS_IS_STATUS_SUCCESS(status))
13017 {
13018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013019 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013020 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13021 if( pAckTxComp )
13022 {
13023 pWDA->pAckTxCbFunc = NULL;
13024 if( VOS_STATUS_SUCCESS !=
13025 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13026 {
13027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13028 "Tx Complete timeout Timer Stop Failed ");
13029 }
13030 }
13031 return VOS_STATUS_E_FAILURE;
13032 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013033
13034 /* If Peer Sta mask is set don't overwrite to self sta */
13035 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070013036 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013037 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070013038 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013039 else
13040 {
Ganesh K08bce952012-12-13 15:04:41 -080013041 /* Get system role, use the self station if in unknown role or STA role */
13042 systemRole = wdaGetGlobalSystemRole(pMac);
13043 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
13044 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013045#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080013046 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080013047#endif
Ganesh K08bce952012-12-13 15:04:41 -080013048 ))
13049 {
13050 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
13051 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080013052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013053
Jeff Johnsone7245742012-09-05 17:12:55 -070013054 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
13055 disassoc frame reaches the HW, HAL has already deleted the peer station */
13056 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080013058 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070013059 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 /*Send Probe request frames on self sta idx*/
13062 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070013063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013064 /* Since we donot want probe responses to be retried, send probe responses
13065 through the NO_ACK queues */
13066 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
13067 {
13068 //probe response is sent out using self station and no retries options.
13069 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
13070 }
13071 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
13072 {
13073 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
13074 }
13075 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013076 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013077
13078 /*Set frame tag to 0
13079 We will use the WDA user data in order to tag a frame as expired*/
13080 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13081 (v_PVOID_t)0);
13082
13083
13084 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013085 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
13086 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070013087 {
13088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013089 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013091 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 -070013092 if( pAckTxComp )
13093 {
13094 pWDA->pAckTxCbFunc = NULL;
13095 if( VOS_STATUS_SUCCESS !=
13096 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13097 {
13098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13099 "Tx Complete timeout Timer Stop Failed ");
13100 }
13101 }
13102 return VOS_STATUS_E_FAILURE;
13103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 /*
13105 * Wait for the event to be set by the TL, to get the response of TX
13106 * complete, this event should be set by the Callback function called by TL
13107 */
13108 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
13109 &eventIdx);
13110 if(!VOS_IS_STATUS_SUCCESS(status))
13111 {
13112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13113 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013114 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013115
13116 /*Tag Frame as timed out for later deletion*/
13117 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
13118 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13120 after the packet gets completed(packet freed once)*/
13121
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013122 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013123 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013124
Jeff Johnson295189b2012-06-20 16:38:30 -070013125 /* check whether the packet was freed already,so need not free again when
13126 * TL calls the WDA_Txcomplete routine
13127 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013128 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13129 /*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 -070013130 {
13131 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013132 } */
13133
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 if( pAckTxComp )
13135 {
13136 pWDA->pAckTxCbFunc = NULL;
13137 if( VOS_STATUS_SUCCESS !=
13138 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13139 {
13140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13141 "Tx Complete timeout Timer Stop Failed ");
13142 }
13143 }
13144 status = VOS_STATUS_E_FAILURE;
13145 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013146#ifdef WLAN_DUMP_MGMTFRAMES
13147 if (VOS_IS_STATUS_SUCCESS(status))
13148 {
13149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13150 "%s() TX packet : SubType %d", __func__,pFc->subType);
13151 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13152 pData, frmLen);
13153 }
13154#endif
13155
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013156 if (VOS_IS_STATUS_SUCCESS(status))
13157 {
13158 if (pMac->fEnableDebugLog & 0x1)
13159 {
13160 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13161 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13162 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13163 {
13164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13165 pFc->type, pFc->subType);
13166 }
13167 }
13168 }
13169
13170
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 return status;
13172}
Jeff Johnson295189b2012-06-20 16:38:30 -070013173/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013174 * FUNCTION: WDA_ProcessDHCPStartInd
13175 * Forward DHCP Start to WDI
13176 */
13177static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13178 tAniDHCPInd *dhcpStartInd)
13179{
13180 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013181 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013182
c_hpothu0b0cab72014-02-13 21:52:40 +053013183 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13184 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013185 sizeof(tSirMacAddr));
13186
c_hpothu0b0cab72014-02-13 21:52:40 +053013187 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013188
c_hpothu0b0cab72014-02-13 21:52:40 +053013189 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013190 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13192 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013193 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013194 else if (WDI_STATUS_SUCCESS_SYNC != status)
13195 {
13196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13197 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13198 }
13199
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013200 vos_mem_free(dhcpStartInd);
13201 return CONVERT_WDI2VOS_STATUS(status) ;
13202}
13203
13204 /*
13205 * FUNCTION: WDA_ProcessDHCPStopInd
13206 * Forward DHCP Stop to WDI
13207 */
13208 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13209 tAniDHCPInd *dhcpStopInd)
13210 {
13211 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013212 WDI_DHCPInd wdiDHCPInd;
13213
13214 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13215 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13216
13217 status = WDI_dhcpStopInd(&wdiDHCPInd);
13218
13219 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013220 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13222 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013223 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013224 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013225 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13227 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013228 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013229
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013230 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013231
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013232 return CONVERT_WDI2VOS_STATUS(status) ;
13233 }
13234
13235/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013236 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13237 *
13238 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13239 *
13240 * PARAM:
13241 * pWDA: pointer to WDA context
13242 * pReq: pointer to stop batch scan request
13243 */
13244VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13245 tpSpoofMacAddrReqParams pReq)
13246{
13247 WDI_Status wdiStatus;
13248 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13249 tWDA_ReqParams *pWdaParams;
13250
13251 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13252 sizeof(WDI_SpoofMacAddrInfoType));
13253 if(NULL == WDI_SpoofMacAddrInfoParams) {
13254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13255 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13256 VOS_ASSERT(0);
13257 return VOS_STATUS_E_NOMEM;
13258 }
13259 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13260 if(NULL == pWdaParams) {
13261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13262 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013263 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013264 VOS_ASSERT(0);
13265 return VOS_STATUS_E_NOMEM;
13266 }
13267
13268 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13269 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13270
13271 pWdaParams->pWdaContext = pWDA;
13272 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013273 pWdaParams->wdaMsgParam = (void *)pReq;
13274
13275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13276 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13277
Siddharth Bhal171788a2014-09-29 21:02:40 +053013278 /* store Params pass it to WDI */
13279 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13280
13281 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013282 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13283 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013284
13285 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13286 {
13287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13288 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13290 vos_mem_free(pWdaParams->wdaMsgParam);
13291 vos_mem_free(pWdaParams);
13292 }
13293
13294 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13295}
13296
13297/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013298 * FUNCTION: WDA_McProcessMsg
13299 * Trigger DAL-AL to start CFG download
13300 */
13301VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13302{
13303 VOS_STATUS status = VOS_STATUS_SUCCESS;
13304 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013305 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 {
13307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013308 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013309 VOS_ASSERT(0);
13310 return VOS_STATUS_E_FAILURE;
13311 }
13312
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013314 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013315
13316 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13317 if(NULL == pWDA )
13318 {
13319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013320 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013322 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 return VOS_STATUS_E_FAILURE;
13324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 /* Process all the WDA messages.. */
13326 switch( pMsg->type )
13327 {
13328 case WNI_CFG_DNLD_REQ:
13329 {
13330 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 /* call WDA complete event if config download success */
13332 if( VOS_IS_STATUS_SUCCESS(status) )
13333 {
13334 vos_WDAComplete_cback(pVosContext);
13335 }
13336 else
13337 {
13338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13339 "WDA Config Download failure" );
13340 }
13341 break ;
13342 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 /*
13344 * Init SCAN request from PE, convert it into DAL format
13345 * and send it to DAL
13346 */
13347 case WDA_INIT_SCAN_REQ:
13348 {
13349 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13350 break ;
13351 }
13352 /* start SCAN request from PE */
13353 case WDA_START_SCAN_REQ:
13354 {
13355 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13356 break ;
13357 }
13358 /* end SCAN request from PE */
13359 case WDA_END_SCAN_REQ:
13360 {
13361 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13362 break ;
13363 }
13364 /* end SCAN request from PE */
13365 case WDA_FINISH_SCAN_REQ:
13366 {
13367 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13368 break ;
13369 }
13370 /* join request from PE */
13371 case WDA_CHNL_SWITCH_REQ:
13372 {
13373 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13374 {
13375 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13376 }
13377 else
13378 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013379 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13380 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13381 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13382 {
13383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13384 "call ProcessChannelSwitchReq_V1" );
13385 WDA_ProcessChannelSwitchReq_V1(pWDA,
13386 (tSwitchChannelParams*)pMsg->bodyptr) ;
13387 }
13388 else
13389 {
13390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13391 "call ProcessChannelSwitchReq" );
13392 WDA_ProcessChannelSwitchReq(pWDA,
13393 (tSwitchChannelParams*)pMsg->bodyptr) ;
13394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 }
13396 break ;
13397 }
13398 /* ADD BSS request from PE */
13399 case WDA_ADD_BSS_REQ:
13400 {
13401 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13402 break ;
13403 }
13404 case WDA_ADD_STA_REQ:
13405 {
13406 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13407 break ;
13408 }
13409 case WDA_DELETE_BSS_REQ:
13410 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013411 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13412 break ;
13413 }
13414 case WDA_DELETE_STA_REQ:
13415 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013416 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13417 break ;
13418 }
13419 case WDA_CONFIG_PARAM_UPDATE_REQ:
13420 {
13421 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13422 break ;
13423 }
13424 case WDA_SET_BSSKEY_REQ:
13425 {
13426 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13427 break ;
13428 }
13429 case WDA_SET_STAKEY_REQ:
13430 {
13431 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13432 break ;
13433 }
13434 case WDA_SET_STA_BCASTKEY_REQ:
13435 {
13436 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13437 break ;
13438 }
13439 case WDA_REMOVE_BSSKEY_REQ:
13440 {
13441 WDA_ProcessRemoveBssKeyReq(pWDA,
13442 (tRemoveBssKeyParams *)pMsg->bodyptr);
13443 break ;
13444 }
13445 case WDA_REMOVE_STAKEY_REQ:
13446 {
13447 WDA_ProcessRemoveStaKeyReq(pWDA,
13448 (tRemoveStaKeyParams *)pMsg->bodyptr);
13449 break ;
13450 }
13451 case WDA_REMOVE_STA_BCASTKEY_REQ:
13452 {
13453 /* TODO: currently UMAC is not sending this request, Add the code for
13454 handling this request when UMAC supports */
13455 break;
13456 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013457#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013458 case WDA_TSM_STATS_REQ:
13459 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013460 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 break;
13462 }
13463#endif
13464 case WDA_UPDATE_EDCA_PROFILE_IND:
13465 {
13466 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13467 break;
13468 }
13469 case WDA_ADD_TS_REQ:
13470 {
13471 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13472 break;
13473 }
13474 case WDA_DEL_TS_REQ:
13475 {
13476 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13477 break;
13478 }
13479 case WDA_ADDBA_REQ:
13480 {
13481 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13482 break;
13483 }
13484 case WDA_DELBA_IND:
13485 {
13486 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13487 break;
13488 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013489 case WDA_UPDATE_CHAN_LIST_REQ:
13490 {
13491 WDA_ProcessUpdateChannelList(pWDA,
13492 (tSirUpdateChanList *)pMsg->bodyptr);
13493 break;
13494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 case WDA_SET_LINK_STATE:
13496 {
13497 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13498 break;
13499 }
13500 case WDA_GET_STATISTICS_REQ:
13501 {
13502 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13503 break;
13504 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013505#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013506 case WDA_GET_ROAM_RSSI_REQ:
13507 {
13508 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13509 break;
13510 }
13511#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013512 case WDA_PWR_SAVE_CFG:
13513 {
13514 if(pWDA->wdaState == WDA_READY_STATE)
13515 {
13516 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13517 }
13518 else
13519 {
13520 if(NULL != pMsg->bodyptr)
13521 {
13522 vos_mem_free(pMsg->bodyptr);
13523 }
13524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13525 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13526 }
13527 break;
13528 }
13529 case WDA_ENTER_IMPS_REQ:
13530 {
13531 if(pWDA->wdaState == WDA_READY_STATE)
13532 {
13533 WDA_ProcessEnterImpsReq(pWDA);
13534 }
13535 else
13536 {
13537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13538 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13539 }
13540 break;
13541 }
13542 case WDA_EXIT_IMPS_REQ:
13543 {
13544 if(pWDA->wdaState == WDA_READY_STATE)
13545 {
13546 WDA_ProcessExitImpsReq(pWDA);
13547 }
13548 else
13549 {
13550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13551 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13552 }
13553 break;
13554 }
13555 case WDA_ENTER_BMPS_REQ:
13556 {
13557 if(pWDA->wdaState == WDA_READY_STATE)
13558 {
13559 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13560 }
13561 else
13562 {
13563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13564 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13565 }
13566 break;
13567 }
13568 case WDA_EXIT_BMPS_REQ:
13569 {
13570 if(pWDA->wdaState == WDA_READY_STATE)
13571 {
13572 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13573 }
13574 else
13575 {
13576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13577 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13578 }
13579 break;
13580 }
13581 case WDA_ENTER_UAPSD_REQ:
13582 {
13583 if(pWDA->wdaState == WDA_READY_STATE)
13584 {
13585 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13586 }
13587 else
13588 {
13589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13590 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13591 }
13592 break;
13593 }
13594 case WDA_EXIT_UAPSD_REQ:
13595 {
13596 if(pWDA->wdaState == WDA_READY_STATE)
13597 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013598 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 }
13600 else
13601 {
13602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13603 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13604 }
13605 break;
13606 }
13607 case WDA_UPDATE_UAPSD_IND:
13608 {
13609 if(pWDA->wdaState == WDA_READY_STATE)
13610 {
13611 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13612 }
13613 else
13614 {
13615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13616 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13617 }
13618 break;
13619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013620 case WDA_REGISTER_PE_CALLBACK :
13621 {
13622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13623 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13624 /*TODO: store the PE callback */
13625 /* Do Nothing? MSG Body should be freed at here */
13626 if(NULL != pMsg->bodyptr)
13627 {
13628 vos_mem_free(pMsg->bodyptr);
13629 }
13630 break;
13631 }
13632 case WDA_SYS_READY_IND :
13633 {
13634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13635 "Handling msg type WDA_SYS_READY_IND " );
13636 pWDA->wdaState = WDA_READY_STATE;
13637 if(NULL != pMsg->bodyptr)
13638 {
13639 vos_mem_free(pMsg->bodyptr);
13640 }
13641 break;
13642 }
13643 case WDA_BEACON_FILTER_IND :
13644 {
13645 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13646 break;
13647 }
13648 case WDA_BTC_SET_CFG:
13649 {
13650 /*TODO: handle this while dealing with BTC */
13651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13652 "Handling msg type WDA_BTC_SET_CFG " );
13653 /* Do Nothing? MSG Body should be freed at here */
13654 if(NULL != pMsg->bodyptr)
13655 {
13656 vos_mem_free(pMsg->bodyptr);
13657 }
13658 break;
13659 }
13660 case WDA_SIGNAL_BT_EVENT:
13661 {
13662 /*TODO: handle this while dealing with BTC */
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13664 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13665 /* Do Nothing? MSG Body should be freed at here */
13666 if(NULL != pMsg->bodyptr)
13667 {
13668 vos_mem_free(pMsg->bodyptr);
13669 }
13670 break;
13671 }
13672 case WDA_CFG_RXP_FILTER_REQ:
13673 {
13674 WDA_ProcessConfigureRxpFilterReq(pWDA,
13675 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13676 break;
13677 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013678 case WDA_MGMT_LOGGING_INIT_REQ:
13679 {
13680 WDA_ProcessMgmtLoggingInitReq(pWDA,
13681 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
13682 break;
13683 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013684 case WDA_GET_FRAME_LOG_REQ:
13685 {
13686 WDA_ProcessGetFrameLogReq(pWDA,
13687 (tAniGetFrameLogReq *)pMsg->bodyptr);
13688 break;
13689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013690 case WDA_SET_HOST_OFFLOAD:
13691 {
13692 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13693 break;
13694 }
13695 case WDA_SET_KEEP_ALIVE:
13696 {
13697 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13698 break;
13699 }
13700#ifdef WLAN_NS_OFFLOAD
13701 case WDA_SET_NS_OFFLOAD:
13702 {
13703 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13704 break;
13705 }
13706#endif //WLAN_NS_OFFLOAD
13707 case WDA_ADD_STA_SELF_REQ:
13708 {
13709 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13710 break;
13711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 case WDA_DEL_STA_SELF_REQ:
13713 {
13714 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13715 break;
13716 }
13717 case WDA_WOWL_ADD_BCAST_PTRN:
13718 {
13719 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13720 break;
13721 }
13722 case WDA_WOWL_DEL_BCAST_PTRN:
13723 {
13724 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13725 break;
13726 }
13727 case WDA_WOWL_ENTER_REQ:
13728 {
13729 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13730 break;
13731 }
13732 case WDA_WOWL_EXIT_REQ:
13733 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013734 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 break;
13736 }
13737 case WDA_TL_FLUSH_AC_REQ:
13738 {
13739 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13740 break;
13741 }
13742 case WDA_SIGNAL_BTAMP_EVENT:
13743 {
13744 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13745 break;
13746 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013747 case WDA_FW_STATS_GET_REQ:
13748 {
13749 WDA_ProcessFWStatsGetReq(pWDA,
13750 (tSirFWStatsGetReq *)pMsg->bodyptr);
13751 break;
13752 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013753#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13754 case WDA_LINK_LAYER_STATS_SET_REQ:
13755 {
13756 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13757 break;
13758 }
13759 case WDA_LINK_LAYER_STATS_GET_REQ:
13760 {
13761 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13762 break;
13763 }
13764 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13765 {
13766 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13767 break;
13768 }
13769#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013770#ifdef WLAN_FEATURE_EXTSCAN
13771 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13772 {
13773 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13774 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13775 break;
13776 }
13777 case WDA_EXTSCAN_START_REQ:
13778 {
13779 WDA_ProcessEXTScanStartReq(pWDA,
13780 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13781 break;
13782 }
13783 case WDA_EXTSCAN_STOP_REQ:
13784 {
13785 WDA_ProcessEXTScanStopReq(pWDA,
13786 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13787 break;
13788 }
13789 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13790 {
13791 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13792 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13793 break;
13794 }
13795 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13796 {
13797 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13798 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13799 break;
13800 }
13801 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13802 {
13803 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13804 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13805 break;
13806 }
13807 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13808 {
13809 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13810 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13811 break;
13812 }
13813 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13814 {
13815 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13816 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13817 break;
13818 }
13819#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013820#ifdef WDA_UT
13821 case WDA_WDI_EVENT_MSG:
13822 {
13823 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13824 break ;
13825 }
13826#endif
13827 case WDA_UPDATE_BEACON_IND:
13828 {
13829 WDA_ProcessUpdateBeaconParams(pWDA,
13830 (tUpdateBeaconParams *)pMsg->bodyptr);
13831 break;
13832 }
13833 case WDA_SEND_BEACON_REQ:
13834 {
13835 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13836 break;
13837 }
13838 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13839 {
13840 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13841 (tSendProbeRespParams *)pMsg->bodyptr);
13842 break;
13843 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013844#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013845 case WDA_SET_MAX_TX_POWER_REQ:
13846 {
13847 WDA_ProcessSetMaxTxPowerReq(pWDA,
13848 (tMaxTxPowerParams *)pMsg->bodyptr);
13849 break;
13850 }
13851#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013852 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13853 {
13854 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13855 pMsg->bodyptr);
13856 break;
13857 }
schang86c22c42013-03-13 18:41:24 -070013858 case WDA_SET_TX_POWER_REQ:
13859 {
13860 WDA_ProcessSetTxPowerReq(pWDA,
13861 (tSirSetTxPowerReq *)pMsg->bodyptr);
13862 break;
13863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 case WDA_SET_P2P_GO_NOA_REQ:
13865 {
13866 WDA_ProcessSetP2PGONOAReq(pWDA,
13867 (tP2pPsParams *)pMsg->bodyptr);
13868 break;
13869 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013870 /* timer related messages */
13871 case WDA_TIMER_BA_ACTIVITY_REQ:
13872 {
13873 WDA_BaCheckActivity(pWDA) ;
13874 break ;
13875 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013876
13877 /* timer related messages */
13878 case WDA_TIMER_TRAFFIC_STATS_IND:
13879 {
13880 WDA_TimerTrafficStatsInd(pWDA);
13881 break;
13882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013883#ifdef WLAN_FEATURE_VOWIFI_11R
13884 case WDA_AGGR_QOS_REQ:
13885 {
13886 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13887 break;
13888 }
13889#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013890 case WDA_FTM_CMD_REQ:
13891 {
13892 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13893 break ;
13894 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013895#ifdef FEATURE_OEM_DATA_SUPPORT
13896 case WDA_START_OEM_DATA_REQ:
13897 {
13898 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13899 break;
13900 }
13901#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013902 /* Tx Complete Time out Indication */
13903 case WDA_TX_COMPLETE_TIMEOUT_IND:
13904 {
13905 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13906 break;
13907 }
13908 case WDA_WLAN_SUSPEND_IND:
13909 {
13910 WDA_ProcessWlanSuspendInd(pWDA,
13911 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13912 break;
13913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013914 case WDA_WLAN_RESUME_REQ:
13915 {
13916 WDA_ProcessWlanResumeReq(pWDA,
13917 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13918 break;
13919 }
13920
13921 case WDA_UPDATE_CF_IND:
13922 {
13923 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13924 pMsg->bodyptr = NULL;
13925 break;
13926 }
13927#ifdef FEATURE_WLAN_SCAN_PNO
13928 case WDA_SET_PNO_REQ:
13929 {
13930 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13931 break;
13932 }
13933 case WDA_UPDATE_SCAN_PARAMS_REQ:
13934 {
13935 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13936 break;
13937 }
13938 case WDA_SET_RSSI_FILTER_REQ:
13939 {
13940 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13941 break;
13942 }
13943#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013944#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013945 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013946 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013947 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013948 break;
13949 }
13950#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013951 case WDA_SET_TX_PER_TRACKING_REQ:
13952 {
13953 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13954 break;
13955 }
13956
13957#ifdef WLAN_FEATURE_PACKET_FILTERING
13958 case WDA_8023_MULTICAST_LIST_REQ:
13959 {
13960 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13961 break;
13962 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13964 {
13965 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13966 break;
13967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013968 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13969 {
13970 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13971 break;
13972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013973 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13974 {
13975 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13976 break;
13977 }
13978#endif // WLAN_FEATURE_PACKET_FILTERING
13979
13980
13981 case WDA_TRANSMISSION_CONTROL_IND:
13982 {
13983 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13984 break;
13985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 case WDA_SET_POWER_PARAMS_REQ:
13987 {
13988 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13989 break;
13990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013991#ifdef WLAN_FEATURE_GTK_OFFLOAD
13992 case WDA_GTK_OFFLOAD_REQ:
13993 {
13994 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13995 break;
13996 }
13997
13998 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13999 {
14000 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
14001 break;
14002 }
14003#endif //WLAN_FEATURE_GTK_OFFLOAD
14004
14005 case WDA_SET_TM_LEVEL_REQ:
14006 {
14007 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
14008 break;
14009 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053014010
Mohit Khanna4a70d262012-09-11 16:30:12 -070014011 case WDA_UPDATE_OP_MODE:
14012 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053014013 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
14014 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
14015 {
14016 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14017 }
14018 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070014019 {
14020 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
14021 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
14022 else
14023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014024 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014025 }
14026 else
14027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014028 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070014029 break;
14030 }
Chet Lanctot186b5732013-03-18 10:26:30 -070014031#ifdef WLAN_FEATURE_11W
14032 case WDA_EXCLUDE_UNENCRYPTED_IND:
14033 {
14034 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
14035 break;
14036 }
14037#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014038#ifdef FEATURE_WLAN_TDLS
14039 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
14040 {
14041 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
14042 break;
14043 }
14044#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014045 case WDA_DHCP_START_IND:
14046 {
14047 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14048 break;
14049 }
14050 case WDA_DHCP_STOP_IND:
14051 {
14052 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
14053 break;
14054 }
Leo Chang9056f462013-08-01 19:21:11 -070014055#ifdef FEATURE_WLAN_LPHB
14056 case WDA_LPHB_CONF_REQ:
14057 {
14058 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
14059 break;
14060 }
14061#endif
Yue Mab9c86f42013-08-14 15:59:08 -070014062 case WDA_ADD_PERIODIC_TX_PTRN_IND:
14063 {
14064 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
14065 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
14066 break;
14067 }
14068 case WDA_DEL_PERIODIC_TX_PTRN_IND:
14069 {
14070 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
14071 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
14072 break;
14073 }
14074
Rajeev79dbe4c2013-10-05 11:03:42 +053014075#ifdef FEATURE_WLAN_BATCH_SCAN
14076 case WDA_SET_BATCH_SCAN_REQ:
14077 {
14078 WDA_ProcessSetBatchScanReq(pWDA,
14079 (tSirSetBatchScanReq *)pMsg->bodyptr);
14080 break;
14081 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070014082 case WDA_RATE_UPDATE_IND:
14083 {
14084 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
14085 break;
14086 }
Rajeev79dbe4c2013-10-05 11:03:42 +053014087 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
14088 {
14089 WDA_ProcessTriggerBatchScanResultInd(pWDA,
14090 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
14091 break;
14092 }
14093 case WDA_STOP_BATCH_SCAN_IND:
14094 {
14095 WDA_ProcessStopBatchScanInd(pWDA,
14096 (tSirStopBatchScanInd *)pMsg->bodyptr);
14097 break;
14098 }
c_hpothu92367912014-05-01 15:18:17 +053014099 case WDA_GET_BCN_MISS_RATE_REQ:
14100 WDA_ProcessGetBcnMissRateReq(pWDA,
14101 (tSirBcnMissRateReq *)pMsg->bodyptr);
14102 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053014103#endif
14104
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014105 case WDA_HT40_OBSS_SCAN_IND:
14106 {
14107 WDA_ProcessHT40OBSSScanInd(pWDA,
14108 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
14109 break;
14110 }
14111 case WDA_HT40_OBSS_STOP_SCAN_IND:
14112 {
14113 WDA_ProcessHT40OBSSStopScanInd(pWDA,
14114 (tANI_U8*)pMsg->bodyptr);
14115 break;
14116 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053014117// tdlsoffchan
14118#ifdef FEATURE_WLAN_TDLS
14119 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14120 {
14121 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14122 break;
14123 }
14124#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014125 case WDA_SPOOF_MAC_ADDR_REQ:
14126 {
14127 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14128 break;
14129 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014130 case WDA_ENCRYPT_MSG_REQ:
14131 {
14132 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14133 break;
14134 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014135
14136 case WDA_NAN_REQUEST:
14137 {
14138 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
14139 break;
14140 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053014141 case WDA_SET_RTS_CTS_HTVHT:
14142 {
14143 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
14144 break;
14145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 default:
14147 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 "No Handling for msg type %x in WDA "
14150 ,pMsg->type);
14151 /* Do Nothing? MSG Body should be freed at here */
14152 if(NULL != pMsg->bodyptr)
14153 {
14154 vos_mem_free(pMsg->bodyptr);
14155 }
14156 //WDA_VOS_ASSERT(0) ;
14157 }
14158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014159 return status ;
14160}
14161
Jeff Johnson295189b2012-06-20 16:38:30 -070014162/*
14163 * FUNCTION: WDA_LowLevelIndCallback
14164 * IND API callback from WDI, send Ind to PE
14165 */
14166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14167 void* pUserData )
14168{
14169 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14170#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14171 tSirRSSINotification rssiNotification;
14172#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014173 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 {
14175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014176 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014177 VOS_ASSERT(0);
14178 return ;
14179 }
14180
14181 switch(wdiLowLevelInd->wdiIndicationType)
14182 {
14183 case WDI_RSSI_NOTIFICATION_IND:
14184 {
14185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14186 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014187#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14188 rssiNotification.bReserved =
14189 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14190 rssiNotification.bRssiThres1NegCross =
14191 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14192 rssiNotification.bRssiThres1PosCross =
14193 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14194 rssiNotification.bRssiThres2NegCross =
14195 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14196 rssiNotification.bRssiThres2PosCross =
14197 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14198 rssiNotification.bRssiThres3NegCross =
14199 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14200 rssiNotification.bRssiThres3PosCross =
14201 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014202 rssiNotification.avgRssi = (v_S7_t)
14203 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 WLANTL_BMPSRSSIRegionChangedNotification(
14205 pWDA->pVosContext,
14206 &rssiNotification);
14207#endif
14208 break ;
14209 }
14210 case WDI_MISSED_BEACON_IND:
14211 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014212 tpSirSmeMissedBeaconInd pMissBeacInd =
14213 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14215 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014216 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014217 if(NULL == pMissBeacInd)
14218 {
14219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14220 "%s: VOS MEM Alloc Failure", __func__);
14221 break;
14222 }
14223 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14224 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14225 pMissBeacInd->bssIdx =
14226 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14227 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014228 break ;
14229 }
14230 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14231 {
14232 /* TODO: Decode Ind and send Ind to PE */
14233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14234 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14235 break ;
14236 }
14237
14238 case WDI_MIC_FAILURE_IND:
14239 {
14240 tpSirSmeMicFailureInd pMicInd =
14241 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14242
14243 if(NULL == pMicInd)
14244 {
14245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014247 break;
14248 }
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14250 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014251 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14252 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14253 vos_mem_copy(pMicInd->bssId,
14254 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14255 sizeof(tSirMacAddr));
14256 vos_mem_copy(pMicInd->info.srcMacAddr,
14257 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14258 sizeof(tSirMacAddr));
14259 vos_mem_copy(pMicInd->info.taMacAddr,
14260 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14261 sizeof(tSirMacAddr));
14262 vos_mem_copy(pMicInd->info.dstMacAddr,
14263 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14264 sizeof(tSirMacAddr));
14265 vos_mem_copy(pMicInd->info.rxMacAddr,
14266 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14267 sizeof(tSirMacAddr));
14268 pMicInd->info.multicast =
14269 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14270 pMicInd->info.keyId=
14271 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14272 pMicInd->info.IV1=
14273 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14274 vos_mem_copy(pMicInd->info.TSC,
14275 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14277 (void *)pMicInd , 0) ;
14278 break ;
14279 }
14280 case WDI_FATAL_ERROR_IND:
14281 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014282 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014283 /* TODO: Decode Ind and send Ind to PE */
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14285 "Received WDI_FATAL_ERROR_IND from WDI ");
14286 break ;
14287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014288 case WDI_DEL_STA_IND:
14289 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014290 tpDeleteStaContext pDelSTACtx =
14291 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14292
14293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14294 "Received WDI_DEL_STA_IND from WDI ");
14295 if(NULL == pDelSTACtx)
14296 {
14297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 break;
14300 }
14301 vos_mem_copy(pDelSTACtx->addr2,
14302 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14303 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014304 vos_mem_copy(pDelSTACtx->bssId,
14305 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14306 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014307 pDelSTACtx->assocId =
14308 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14309 pDelSTACtx->reasonCode =
14310 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14311 pDelSTACtx->staId =
14312 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014313 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14314 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 break ;
14316 }
14317 case WDI_COEX_IND:
14318 {
14319 tANI_U32 index;
14320 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014321 tSirSmeCoexInd *pSmeCoexInd;
14322
14323 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14324 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14325 {
14326 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14327 {
14328 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14329 FL("Coex state: 0x%x coex feature: 0x%x"),
14330 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14331 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14332
14333 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14334 {
14335 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14336 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14337 }
14338 }
14339 break;
14340 }
14341
14342 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014343 if(NULL == pSmeCoexInd)
14344 {
14345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014346 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 break;
14348 }
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14350 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 /* Message Header */
14352 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14353 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014354 /* Info from WDI Indication */
14355 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14356 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14357 {
14358 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014360 /* VOS message wrapper */
14361 vosMsg.type = eWNI_SME_COEX_IND;
14362 vosMsg.bodyptr = (void *)pSmeCoexInd;
14363 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014364 /* Send message to SME */
14365 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14366 {
14367 /* free the mem and return */
14368 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14369 }
14370 else
14371 {
14372 /* DEBUG */
14373 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14374 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14375 pSmeCoexInd->coexIndType,
14376 pSmeCoexInd->coexIndData[0],
14377 pSmeCoexInd->coexIndData[1],
14378 pSmeCoexInd->coexIndData[2],
14379 pSmeCoexInd->coexIndData[3]);
14380 }
14381 break;
14382 }
14383 case WDI_TX_COMPLETE_IND:
14384 {
14385 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14386 /* Calling TxCompleteAck Indication from wda context*/
14387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14388 "Complete Indication received from HAL");
14389 if( pWDA->pAckTxCbFunc )
14390 {
14391 if( VOS_STATUS_SUCCESS !=
14392 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14393 {
14394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14395 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053014396 }
14397 if (IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
14398 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
14399 else
14400 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014401 pWDA->pAckTxCbFunc = NULL;
14402 }
14403 else
14404 {
14405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14406 "Tx Complete Indication is received after timeout ");
14407 }
14408 break;
14409 }
Viral Modid86bde22012-12-10 13:09:21 -080014410 case WDI_P2P_NOA_START_IND :
14411 {
14412 tSirP2PNoaStart *pP2pNoaStart =
14413 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14414
14415 if (NULL == pP2pNoaStart)
14416 {
14417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14418 "Memory allocation failure, "
14419 "WDI_P2P_NOA_START_IND not forwarded");
14420 break;
14421 }
14422 pP2pNoaStart->status =
14423 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14424 pP2pNoaStart->bssIdx =
14425 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14426 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14427 (void *)pP2pNoaStart , 0) ;
14428 break;
14429 }
14430
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014431#ifdef FEATURE_WLAN_TDLS
14432 case WDI_TDLS_IND :
14433 {
14434 tSirTdlsInd *pTdlsInd =
14435 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14436
14437 if (NULL == pTdlsInd)
14438 {
14439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14440 "Memory allocation failure, "
14441 "WDI_TDLS_IND not forwarded");
14442 break;
14443 }
14444 pTdlsInd->status =
14445 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14446 pTdlsInd->assocId =
14447 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14448 pTdlsInd->staIdx =
14449 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14450 pTdlsInd->reasonCode =
14451 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14452 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14453 (void *)pTdlsInd , 0) ;
14454 break;
14455 }
14456#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014457 case WDI_P2P_NOA_ATTR_IND :
14458 {
14459 tSirP2PNoaAttr *pP2pNoaAttr =
14460 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14462 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014463 if (NULL == pP2pNoaAttr)
14464 {
14465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14466 "Memory allocation failure, "
14467 "WDI_P2P_NOA_ATTR_IND not forwarded");
14468 break;
14469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014470 pP2pNoaAttr->index =
14471 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14472 pP2pNoaAttr->oppPsFlag =
14473 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14474 pP2pNoaAttr->ctWin =
14475 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14476
14477 pP2pNoaAttr->uNoa1IntervalCnt =
14478 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14479 pP2pNoaAttr->uNoa1Duration =
14480 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14481 pP2pNoaAttr->uNoa1Interval =
14482 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14483 pP2pNoaAttr->uNoa1StartTime =
14484 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014485 pP2pNoaAttr->uNoa2IntervalCnt =
14486 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14487 pP2pNoaAttr->uNoa2Duration =
14488 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14489 pP2pNoaAttr->uNoa2Interval =
14490 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14491 pP2pNoaAttr->uNoa2StartTime =
14492 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14494 (void *)pP2pNoaAttr , 0) ;
14495 break;
14496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014497#ifdef FEATURE_WLAN_SCAN_PNO
14498 case WDI_PREF_NETWORK_FOUND_IND:
14499 {
14500 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014501 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14502 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14503 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14504 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14505
Jeff Johnson295189b2012-06-20 16:38:30 -070014506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14507 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 if (NULL == pPrefNetworkFoundInd)
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14511 "Memory allocation failure, "
14512 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014513 if (NULL !=
14514 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14515 {
14516 wpalMemoryFree(
14517 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14518 );
14519 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 break;
14522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 /* Message Header */
14524 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014525 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014526
14527 /* Info from WDI Indication */
14528 pPrefNetworkFoundInd->ssId.length =
14529 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14532 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14533 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014534 if (NULL !=
14535 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14536 {
14537 pPrefNetworkFoundInd->frameLength =
14538 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14539 vos_mem_copy( pPrefNetworkFoundInd->data,
14540 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14541 pPrefNetworkFoundInd->frameLength);
14542 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14543 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14544 }
14545 else
14546 {
14547 pPrefNetworkFoundInd->frameLength = 0;
14548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014550 /* VOS message wrapper */
14551 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14552 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14553 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 /* Send message to SME */
14555 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14556 {
14557 /* free the mem and return */
14558 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014560 break;
14561 }
14562#endif // FEATURE_WLAN_SCAN_PNO
14563
14564#ifdef WLAN_WAKEUP_EVENTS
14565 case WDI_WAKE_REASON_IND:
14566 {
14567 vos_msg_t vosMsg;
14568 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14569 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14570 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14571
14572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014573 "[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 -070014574 wdiLowLevelInd->wdiIndicationType,
14575 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14576 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14577 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14578
14579 if (NULL == pWakeReasonInd)
14580 {
14581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14582 "Memory allocation failure, "
14583 "WDI_WAKE_REASON_IND not forwarded");
14584 break;
14585 }
14586
14587 vos_mem_zero(pWakeReasonInd, allocSize);
14588
14589 /* Message Header */
14590 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14591 pWakeReasonInd->mesgLen = allocSize;
14592
14593 /* Info from WDI Indication */
14594 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14595 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14596 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14597 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14598 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14599 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14600 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14601 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14602
14603 /* VOS message wrapper */
14604 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14605 vosMsg.bodyptr = (void *) pWakeReasonInd;
14606 vosMsg.bodyval = 0;
14607
14608 /* Send message to SME */
14609 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14610 {
14611 /* free the mem and return */
14612 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14613 }
14614
14615 break;
14616 }
14617#endif // WLAN_WAKEUP_EVENTS
14618
14619 case WDI_TX_PER_HIT_IND:
14620 {
14621 vos_msg_t vosMsg;
14622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14623 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14624 /* VOS message wrapper */
14625 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14626 vosMsg.bodyptr = NULL;
14627 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 /* Send message to SME */
14629 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14630 {
14631 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14632 }
14633 break;
14634 }
14635
Leo Chang9056f462013-08-01 19:21:11 -070014636#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014637 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014638 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014639 vos_msg_t vosMsg;
14640 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014641
Leo Changd9df8aa2013-09-26 13:32:26 -070014642 lphbInd =
14643 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14644 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014645 {
14646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14647 "%s: LPHB IND buffer alloc Fail", __func__);
14648 return ;
14649 }
14650
Leo Changd9df8aa2013-09-26 13:32:26 -070014651 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014652 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014653 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014654 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014655 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014656 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14657
14658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014659 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014660 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14661
Leo Changd9df8aa2013-09-26 13:32:26 -070014662 vosMsg.type = eWNI_SME_LPHB_IND;
14663 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014664 vosMsg.bodyval = 0;
14665 /* Send message to SME */
14666 if (VOS_STATUS_SUCCESS !=
14667 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14668 {
14669 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14670 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014671 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014672 }
14673 break;
14674 }
14675#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014676 case WDI_PERIODIC_TX_PTRN_FW_IND:
14677 {
14678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14679 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14680 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14681 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14682 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14683 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14684 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14685
14686 break;
14687 }
Leo Chang9056f462013-08-01 19:21:11 -070014688
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014689 case WDI_IBSS_PEER_INACTIVITY_IND:
14690 {
14691 tSirIbssPeerInactivityInd *pIbssInd =
14692 (tSirIbssPeerInactivityInd *)
14693 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14694
14695 if (NULL == pIbssInd)
14696 {
14697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14698 "Memory allocation failure, "
14699 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14700 break;
14701 }
14702
14703 pIbssInd->bssIdx =
14704 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14705 pIbssInd->staIdx =
14706 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14707 vos_mem_copy(pIbssInd->peerAddr,
14708 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14709 sizeof(tSirMacAddr));
14710 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14711 break;
14712 }
14713
Rajeev79dbe4c2013-10-05 11:03:42 +053014714#ifdef FEATURE_WLAN_BATCH_SCAN
14715 case WDI_BATCH_SCAN_RESULT_IND:
14716 {
14717 void *pBatchScanResult;
14718 void *pCallbackContext;
14719 tpAniSirGlobal pMac;
14720
14721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14722 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14723
14724 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014725 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014726 {
14727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14728 "%s:pWDA is NULL", __func__);
14729 VOS_ASSERT(0);
14730 return;
14731 }
14732
14733 pBatchScanResult =
14734 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14735 if (NULL == pBatchScanResult)
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "%s:Batch scan result from FW is null can't invoke HDD callback",
14739 __func__);
14740 VOS_ASSERT(0);
14741 return;
14742 }
14743
14744 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14745 if (NULL == pMac)
14746 {
14747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14748 "%s:pMac is NULL", __func__);
14749 VOS_ASSERT(0);
14750 return;
14751 }
14752
14753 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14754 /*call hdd callback with set batch scan response data*/
14755 if(pMac->pmc.batchScanResultCallback)
14756 {
14757 pMac->pmc.batchScanResultCallback(pCallbackContext,
14758 pBatchScanResult);
14759 }
14760 else
14761 {
14762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14763 "%s:HDD callback is null", __func__);
14764 VOS_ASSERT(0);
14765 }
14766 break;
14767 }
14768#endif
14769
Leo Chang0b0e45a2013-12-15 15:18:55 -080014770#ifdef FEATURE_WLAN_CH_AVOID
14771 case WDI_CH_AVOID_IND:
14772 {
14773 vos_msg_t vosMsg;
14774 tSirChAvoidIndType *chAvoidInd;
14775
14776 chAvoidInd =
14777 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14778 if (NULL == chAvoidInd)
14779 {
14780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14781 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14782 return ;
14783 }
14784
14785 chAvoidInd->avoidRangeCount =
14786 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14787 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14788 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14789 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14790
14791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14792 "%s : WDA CH avoid notification", __func__);
14793
14794 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14795 vosMsg.bodyptr = chAvoidInd;
14796 vosMsg.bodyval = 0;
14797 /* Send message to SME */
14798 if (VOS_STATUS_SUCCESS !=
14799 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14800 {
14801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14802 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14803 vos_mem_free(chAvoidInd);
14804 }
14805 break;
14806 }
14807#endif /* FEATURE_WLAN_CH_AVOID */
14808
Sunil Duttbd736ed2014-05-26 21:19:41 +053014809#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14810 case WDI_LL_STATS_RESULTS_IND:
14811 {
14812 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014813 tpAniSirGlobal pMac;
14814
14815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14816 "Received WDI_LL_STATS_RESULTS_IND from FW");
14817
14818 /*sanity check*/
14819 if (NULL == pWDA)
14820 {
14821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14822 "%s:pWDA is NULL", __func__);
14823 VOS_ASSERT(0);
14824 return;
14825 }
14826
14827 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014828 (void *)wdiLowLevelInd->
14829 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014830 if (NULL == pLinkLayerStatsInd)
14831 {
14832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14833 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14834 __func__);
14835 VOS_ASSERT(0);
14836 return;
14837 }
14838
14839 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14840 if (NULL == pMac)
14841 {
14842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14843 "%s:pMac is NULL", __func__);
14844 VOS_ASSERT(0);
14845 return;
14846 }
14847
Dino Mycled3d50022014-07-07 12:58:25 +053014848 /* call hdd callback with Link Layer Statistics.
14849 * vdev_id/ifacId in link_stats_results will be
14850 * used to retrieve the correct HDD context
14851 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014852 if (pMac->sme.pLinkLayerStatsIndCallback)
14853 {
Dino Mycled3d50022014-07-07 12:58:25 +053014854 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014855 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014856 pLinkLayerStatsInd,
14857 wdiLowLevelInd->
14858 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014859 }
14860 else
14861 {
14862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14863 "%s:HDD callback is null", __func__);
14864 }
14865 break;
14866 }
14867#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14868
Dino Mycle41bdc942014-06-10 11:30:24 +053014869#ifdef WLAN_FEATURE_EXTSCAN
14870 case WDI_EXTSCAN_PROGRESS_IND:
14871 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14872 case WDI_EXTSCAN_SCAN_RESULT_IND:
14873 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14874 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14875 {
14876 void *pEXTScanData;
14877 void *pCallbackContext;
14878 tpAniSirGlobal pMac;
14879 tANI_U16 indType;
14880
14881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14882 "Received WDI_EXTSCAN Indications from FW");
14883 /*sanity check*/
14884 if (NULL == pWDA)
14885 {
14886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14887 "%s:pWDA is NULL", __func__);
14888 VOS_ASSERT(0);
14889 return;
14890 }
14891 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14892 {
14893 indType = WDA_EXTSCAN_PROGRESS_IND;
14894
14895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14896 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14897 }
14898 if (wdiLowLevelInd->wdiIndicationType ==
14899 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14900 {
14901 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14902
14903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14904 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14905 }
14906 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14907 {
14908 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14909
14910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14911 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14912 }
14913 if (wdiLowLevelInd->wdiIndicationType ==
14914 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14915 {
14916 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14917
14918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14919 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14920 }
14921 if (wdiLowLevelInd->wdiIndicationType ==
14922 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14923 {
14924 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14925
14926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14927 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14928 }
14929
14930 pEXTScanData =
14931 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14932 if (NULL == pEXTScanData)
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14935 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14936 __func__);
14937 VOS_ASSERT(0);
14938 return;
14939 }
14940
14941 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14942 if (NULL == pMac)
14943 {
14944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14945 "%s:pMac is NULL", __func__);
14946 VOS_ASSERT(0);
14947 return;
14948 }
14949
14950 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14951
14952 if(pMac->sme.pEXTScanIndCb)
14953 {
14954 pMac->sme.pEXTScanIndCb(pCallbackContext,
14955 indType,
14956 pEXTScanData);
14957 }
14958 else
14959 {
14960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14961 "%s:HDD callback is null", __func__);
14962 }
14963 break;
14964 }
14965#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014966 case WDI_DEL_BA_IND:
14967 {
14968 tpBADeleteParams pDelBAInd =
14969 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14970
14971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14972 "Received WDI_DEL_BA_IND from WDI ");
14973 if(NULL == pDelBAInd)
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "%s: VOS MEM Alloc Failure", __func__);
14977 break;
14978 }
14979 vos_mem_copy(pDelBAInd->peerMacAddr,
14980 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14981 sizeof(tSirMacAddr));
14982 vos_mem_copy(pDelBAInd->bssId,
14983 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14984 sizeof(tSirMacAddr));
14985 pDelBAInd->staIdx =
14986 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14987 pDelBAInd->baTID =
14988 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14989 pDelBAInd->baDirection =
14990 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14991 pDelBAInd->reasonCode =
14992 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14993
14994 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14995 (void *)pDelBAInd , 0) ;
14996 break;
14997 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053014998 case WDI_NAN_EVENT_IND:
14999 {
15000 vos_msg_t vosMsg;
15001 tpSirNanEvent pSirNanEvent = NULL;
15002
15003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15004 "Received WDI_NAN_EVENT");
15005
15006 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
15007 - sizeof( pSirNanEvent->event_data)
15008 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15009
15010 if (NULL == pSirNanEvent)
15011 {
15012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15013 "%s: VOS MEM Alloc Failure", __func__);
15014 VOS_ASSERT(0) ;
15015 break;
15016 }
15017
15018 pSirNanEvent->event_data_len =
15019 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
15020
15021 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
15022 {
15023 vos_mem_copy( pSirNanEvent->event_data,
15024 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
15025 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
15026 }
15027
15028 /* VOS message wrapper */
15029 vosMsg.type = eWNI_SME_NAN_EVENT;
15030 vosMsg.bodyptr = pSirNanEvent;
15031 vosMsg.bodyval = 0;
15032
15033 /* Send message to SME */
15034 if (VOS_STATUS_SUCCESS
15035 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15036 {
15037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15038 "post eWNI_SME_NAN_EVENT to SME Failed");
15039 vos_mem_free(pSirNanEvent);
15040 }
15041 break;
15042 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015043
Jeff Johnson295189b2012-06-20 16:38:30 -070015044 default:
15045 {
15046 /* TODO error */
15047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15048 "Received UNKNOWN Indication from WDI ");
15049 }
15050 }
15051 return ;
15052}
15053
Jeff Johnson295189b2012-06-20 16:38:30 -070015054/*
15055 * BA related processing in WDA.
15056 */
Jeff Johnson295189b2012-06-20 16:38:30 -070015057void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
15058 void* pUserData)
15059{
15060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15061 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 if(NULL == pWdaParams)
15063 {
15064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015065 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015066 VOS_ASSERT(0) ;
15067 return ;
15068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015069 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070015070 vos_mem_free(pWdaParams->wdaMsgParam) ;
15071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15072 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
15076 {
15077 tANI_U8 i = 0 ;
15078 tBaActivityInd *baActivityInd = NULL ;
15079 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
15080 tANI_U8 allocSize = sizeof(tBaActivityInd)
15081 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
15082 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
15083 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015084 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 if(NULL == baActivityInd)
15086 {
15087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 VOS_ASSERT(0) ;
15090 return;
15091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015092 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
15093 sizeof(tSirMacAddr)) ;
15094 baActivityInd->baCandidateCnt = baCandidateCount ;
15095
15096 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
15097 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
15098
15099 for(i = 0 ; i < baCandidateCount ; i++)
15100 {
15101 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
15103 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015104 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
15105 {
15106 baCandidate->baInfo[tid].fBaEnable =
15107 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
15108 baCandidate->baInfo[tid].startingSeqNum =
15109 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
15110 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015111 wdiBaCandidate++ ;
15112 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
15115 }
15116 else
15117 {
15118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15119 "BA Trigger RSP with Failure received ");
15120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015121 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015122}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015123
15124
15125/*
15126 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
15127 * during MCC
15128 */
15129void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
15130{
15131 wpt_uint32 enabled;
15132 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
15133 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
15134 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
15135
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015136 if (NULL == pMac )
15137 {
15138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15139 "%s: Invoked with invalid MAC context ", __func__ );
15140 VOS_ASSERT(0);
15141 return;
15142 }
15143
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015144 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15145 != eSIR_SUCCESS)
15146 {
15147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15148 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15149 return;
15150 }
15151
15152 if(!enabled)
15153 {
15154 return;
15155 }
15156
15157 if(NULL == pWDA)
15158 {
15159 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15160 "%s:WDA context is NULL", __func__);
15161 VOS_ASSERT(0);
15162 return;
15163 }
15164
15165 if(activate)
15166 {
15167 if( VOS_STATUS_SUCCESS !=
15168 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15169 {
15170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15171 "Traffic Stats Timer Start Failed ");
15172 return;
15173 }
15174 WDI_DS_ActivateTrafficStats();
15175 }
15176 else
15177 {
15178 WDI_DS_DeactivateTrafficStats();
15179 WDI_DS_ClearTrafficStats();
15180
15181 if( VOS_STATUS_SUCCESS !=
15182 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15183 {
15184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15185 "Traffic Stats Timer Stop Failed ");
15186 return;
15187 }
15188 }
15189}
15190
15191/*
15192 * Traffic Stats Timer handler
15193 */
15194void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15195{
15196 WDI_Status wdiStatus;
15197 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15198 WDI_TrafficStatsIndType trafficStatsIndParams;
15199 wpt_uint32 length, enabled;
15200 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15201
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015202 if (NULL == pMac )
15203 {
15204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15205 "%s: Invoked with invalid MAC context ", __func__ );
15206 VOS_ASSERT(0);
15207 return;
15208 }
15209
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015210 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15211 != eSIR_SUCCESS)
15212 {
15213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15214 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15215 return;
15216 }
15217
15218 if(!enabled)
15219 {
15220 WDI_DS_DeactivateTrafficStats();
15221 return;
15222 }
15223
15224 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15225
15226 if(pWdiTrafficStats != NULL)
15227 {
15228 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15229 trafficStatsIndParams.length = length;
15230 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015231 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015232 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15233 trafficStatsIndParams.pUserData = pWDA;
15234
15235 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15236
15237 if(WDI_STATUS_PENDING == wdiStatus)
15238 {
15239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15240 "Pending received for %s:%d ",__func__,__LINE__ );
15241 }
15242 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15243 {
15244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15245 "Failure in %s:%d ",__func__,__LINE__ );
15246 }
15247
15248 WDI_DS_ClearTrafficStats();
15249 }
15250 else
15251 {
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15253 "pWdiTrafficStats is Null");
15254 }
15255
15256 if( VOS_STATUS_SUCCESS !=
15257 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15258 {
15259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15260 "Traffic Stats Timer Start Failed ");
15261 return;
15262 }
15263}
15264
Jeff Johnson295189b2012-06-20 16:38:30 -070015265/*
15266 * BA Activity check timer handler
15267 */
15268void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15269{
15270 tANI_U8 curSta = 0 ;
15271 tANI_U8 tid = 0 ;
15272 tANI_U8 size = 0 ;
15273 tANI_U8 baCandidateCount = 0 ;
15274 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015275 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015277 tpAniSirGlobal pMac;
15278
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015279 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015280 {
15281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015282 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015283 VOS_ASSERT(0);
15284 return ;
15285 }
15286 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15287 {
15288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15289 "Inconsistent STA entries in WDA");
15290 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015291 }
15292 if(NULL == pWDA->pVosContext)
15293 {
15294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15295 "%s: pVosContext is NULL",__func__);
15296 VOS_ASSERT(0);
15297 return ;
15298 }
15299 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015300 if(NULL == pMac)
15301 {
15302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15303 "%s: pMac is NULL",__func__);
15304 VOS_ASSERT(0);
15305 return ;
15306 }
15307
Abhishek Singh0644e482014-10-06 18:38:23 +053015308 if (wlan_cfgGetInt(pMac,
15309 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15310 eSIR_SUCCESS)
15311 {
15312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15313 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15314 val = 0;
15315 }
15316
Jeff Johnson295189b2012-06-20 16:38:30 -070015317 /* walk through all STA entries and find out TX packet count */
15318 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15319 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015320 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015321#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015322 // We can only do BA on "hard" STAs.
15323 if (!(IS_HWSTA_IDX(curSta)))
15324 {
15325 continue;
15326 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015327#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015328 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15329 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015330 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 tANI_U32 txPktCount = 0 ;
15332 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015334 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15335 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015336 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15337 curSta, tid, &txPktCount)))
15338 {
15339#if 0
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15341 "************* %d:%d, %d ",curSta, txPktCount,
15342 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15343#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015344 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15345 (currentOperChan <= SIR_11B_CHANNEL_END)))
15346 {
15347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15348 "%s: BTC disabled aggregation - dont start "
15349 "TX ADDBA req",__func__);
15350 }
15351 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015352 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015353 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15354 pWDA->wdaGlobalSystemRole) && txPktCount )
15355 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15356 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015357 {
15358 /* get prepare for sending message to HAL */
15359 //baCandidate[baCandidateCount].staIdx = curSta ;
15360 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15361 newBaCandidate = WDA_ENABLE_BA ;
15362 }
15363 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15364 }
15365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015366 /* fill the entry for all the sta with given TID's */
15367 if(WDA_ENABLE_BA == newBaCandidate)
15368 {
15369 /* move to next BA candidate */
15370 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15371 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15372 baCandidateCount++ ;
15373 newBaCandidate = WDA_DISABLE_BA ;
15374 }
15375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015376 /* prepare and send message to hal */
15377 if( 0 < baCandidateCount)
15378 {
15379 WDI_Status status = WDI_STATUS_SUCCESS ;
15380 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15381 tWDA_ReqParams *pWdaParams =
15382 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015383 if(NULL == pWdaParams)
15384 {
15385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015387 VOS_ASSERT(0) ;
15388 return;
15389 }
15390 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15391 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15392 if(NULL == wdiTriggerBaReq)
15393 {
15394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015396 VOS_ASSERT(0) ;
15397 vos_mem_free(pWdaParams);
15398 return;
15399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015400 do
15401 {
15402 WDI_TriggerBAReqinfoType *triggerBaInfo =
15403 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15404 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15405 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15406 * for each request */
15407 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15408 triggerBaInfo->ucBASessionID = 0;
15409 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15410 } while(0) ;
15411 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015413 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015414 pWdaParams->pWdaContext = pWDA;
15415 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15416 pWdaParams->wdaMsgParam = NULL;
15417 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15418 WDA_TriggerBaReqCallback, pWdaParams) ;
15419 if(IS_WDI_STATUS_FAILURE(status))
15420 {
15421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15422 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15423 vos_mem_free(pWdaParams->wdaMsgParam) ;
15424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15425 vos_mem_free(pWdaParams) ;
15426 }
15427 }
15428 else
15429 {
15430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15431 "There is no TID for initiating BA");
15432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015433 if( VOS_STATUS_SUCCESS !=
15434 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15435 {
15436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15437 "BA Activity Timer Stop Failed ");
15438 return ;
15439 }
15440 if( VOS_STATUS_SUCCESS !=
15441 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15442 {
15443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15444 "BA Activity Timer Start Failed ");
15445 return;
15446 }
15447 return ;
15448}
Jeff Johnson295189b2012-06-20 16:38:30 -070015449/*
15450 * WDA common routine to create timer used by WDA.
15451 */
15452static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15453{
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15455 tANI_U32 val = 0 ;
15456 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15457
15458 if(NULL == pMac)
15459 {
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015461 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015462 VOS_ASSERT(0);
15463 return VOS_STATUS_E_FAILURE;
15464 }
15465 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15466 != eSIR_SUCCESS)
15467 {
15468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15469 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15470 return VOS_STATUS_E_FAILURE;
15471 }
15472 val = SYS_MS_TO_TICKS(val) ;
15473
15474 /* BA activity check timer */
15475 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15476 "BA Activity Check timer", WDA_TimerHandler,
15477 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15478 if(status != TX_SUCCESS)
15479 {
15480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15481 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015482 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015484 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 /* Tx Complete Timeout timer */
15486 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15487 "Tx Complete Check timer", WDA_TimerHandler,
15488 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015489 if(status != TX_SUCCESS)
15490 {
15491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15492 "Unable to create Tx Complete Timeout timer");
15493 /* Destroy timer of BA activity check timer */
15494 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15495 if(status != TX_SUCCESS)
15496 {
15497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15498 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015499 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015501 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015503
15504 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15505
15506 /* Traffic Stats timer */
15507 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15508 "Traffic Stats timer", WDA_TimerHandler,
15509 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15510 if(status != TX_SUCCESS)
15511 {
15512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15513 "Unable to create traffic stats timer");
15514 /* Destroy timer of BA activity check timer */
15515 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15516 if(status != TX_SUCCESS)
15517 {
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15519 "Unable to Destroy BA activity timer");
15520 }
15521 /* Destroy timer of tx complete timer */
15522 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15523 if(status != TX_SUCCESS)
15524 {
15525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15526 "Unable to Tx complete timer");
15527 }
15528 return VOS_STATUS_E_FAILURE ;
15529 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015530 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015531}
Jeff Johnson295189b2012-06-20 16:38:30 -070015532/*
15533 * WDA common routine to destroy timer used by WDA.
15534 */
15535static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15536{
15537 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15539 if(status != TX_SUCCESS)
15540 {
15541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15542 "Unable to Destroy Tx Complete Timeout timer");
15543 return eSIR_FAILURE ;
15544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15546 if(status != TX_SUCCESS)
15547 {
15548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15549 "Unable to Destroy BA activity timer");
15550 return eSIR_FAILURE ;
15551 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015552 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15553 if(status != TX_SUCCESS)
15554 {
15555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15556 "Unable to Destroy traffic stats timer");
15557 return eSIR_FAILURE ;
15558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 return eSIR_SUCCESS ;
15560}
Jeff Johnson295189b2012-06-20 16:38:30 -070015561/*
15562 * WDA timer handler.
15563 */
15564void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15565{
15566 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15567 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015568 /*
15569 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15570 */
15571 wdaMsg.type = timerInfo ;
15572 wdaMsg.bodyptr = NULL;
15573 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015574 /* post the message.. */
15575 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15576 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15577 {
15578 vosStatus = VOS_STATUS_E_BADMSG;
15579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015580}
Jeff Johnson295189b2012-06-20 16:38:30 -070015581/*
15582 * WDA Tx Complete timeout Indication.
15583 */
15584void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15585{
15586 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015587 if( pWDA->pAckTxCbFunc )
15588 {
15589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015590 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 pWDA->pAckTxCbFunc( pMac, 0);
15592 pWDA->pAckTxCbFunc = NULL;
15593 }
15594 else
15595 {
15596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015597 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015599}
Jeff Johnson295189b2012-06-20 16:38:30 -070015600/*
15601 * WDA Set REG Domain to VOS NV
15602 */
Abhishek Singha306a442013-11-07 18:39:01 +053015603eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15604 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015605{
Abhishek Singha306a442013-11-07 18:39:01 +053015606 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 {
15608 return eHAL_STATUS_INVALID_PARAMETER;
15609 }
15610 return eHAL_STATUS_SUCCESS;
15611}
Jeff Johnson295189b2012-06-20 16:38:30 -070015612
Jeff Johnson295189b2012-06-20 16:38:30 -070015613#ifdef FEATURE_WLAN_SCAN_PNO
15614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015615 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 *
15617 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015618void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015619{
15620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015621 tSirPNOScanReq *pPNOScanReqParams;
15622
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015624 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015625 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015626 {
15627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015628 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015629 VOS_ASSERT(0) ;
15630 return ;
15631 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015632
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015633 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15634 if(pPNOScanReqParams->statusCallback)
15635 {
15636 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15637 (status == WDI_STATUS_SUCCESS) ?
15638 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15639 }
15640
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015641 if (pPNOScanReqParams->enable == 1)
15642 {
15643 if (pPNOScanReqParams->aNetworks)
15644 vos_mem_free(pPNOScanReqParams->aNetworks);
15645 if (pPNOScanReqParams->p24GProbeTemplate)
15646 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15647 if (pPNOScanReqParams->p5GProbeTemplate)
15648 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15649 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15651 vos_mem_free(pWdaParams->wdaMsgParam);
15652 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015653
15654 return ;
15655}
Jeff Johnson295189b2012-06-20 16:38:30 -070015656/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015657 * FUNCTION: WDA_PNOScanReqCallback
15658 * Free memory.
15659 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15660 */
15661void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015662{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015664 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015665
15666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15667 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15668
15669 if(NULL == pWdaParams)
15670 {
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15672 "%s: pWdaParams received NULL", __func__);
15673 VOS_ASSERT(0);
15674 return;
15675 }
15676
15677 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15678 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015679 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15680 if(pPNOScanReqParams->statusCallback)
15681 {
15682 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15683 VOS_STATUS_E_FAILURE);
15684 }
15685
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015686 if (pPNOScanReqParams->enable == 1)
15687 {
15688 if (pPNOScanReqParams->aNetworks)
15689 vos_mem_free(pPNOScanReqParams->aNetworks);
15690 if (pPNOScanReqParams->p24GProbeTemplate)
15691 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15692 if (pPNOScanReqParams->p5GProbeTemplate)
15693 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15694 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15696 vos_mem_free(pWdaParams->wdaMsgParam);
15697 vos_mem_free(pWdaParams);
15698 }
15699
15700 return;
15701}
15702/*
15703 * FUNCTION: WDA_UpdateScanParamsRespCallback
15704 *
15705 */
15706void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15707{
15708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015710 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015711 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015712 {
15713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015714 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015715 VOS_ASSERT(0) ;
15716 return ;
15717 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015718
15719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15720 vos_mem_free(pWdaParams->wdaMsgParam);
15721 vos_mem_free(pWdaParams);
15722
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 return ;
15724}
Jeff Johnson295189b2012-06-20 16:38:30 -070015725/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015726 * FUNCTION: WDA_UpdateScanParamsReqCallback
15727 * Free memory.
15728 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15729 */
15730void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15731{
15732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15733
15734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15735 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15736
15737 if(NULL == pWdaParams)
15738 {
15739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15740 "%s: pWdaParams received NULL", __func__);
15741 VOS_ASSERT(0);
15742 return;
15743 }
15744
15745 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15746 {
15747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15748 vos_mem_free(pWdaParams->wdaMsgParam);
15749 vos_mem_free(pWdaParams);
15750 }
15751
15752 return;
15753}
15754/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015755 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15756 * Request to WDI to set Preferred Network List.Offload
15757 */
15758VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15759 tSirPNOScanReq *pPNOScanReqParams)
15760{
Jeff Johnson43971f52012-07-17 12:26:56 -070015761 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015762 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15763 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15764 tWDA_ReqParams *pWdaParams ;
15765 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015768 if(NULL == pwdiPNOScanReqInfo)
15769 {
15770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015772 VOS_ASSERT(0);
15773 return VOS_STATUS_E_NOMEM;
15774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15776 if(NULL == pWdaParams)
15777 {
15778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015780 VOS_ASSERT(0);
15781 vos_mem_free(pwdiPNOScanReqInfo);
15782 return VOS_STATUS_E_NOMEM;
15783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015784 //
15785 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15786 //
15787 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15788 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015789 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15790 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15791 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15793 {
15794 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15795 &pPNOScanReqParams->aNetworks[i],
15796 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 /*Scan timer intervals*/
15799 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15800 &pPNOScanReqParams->scanTimers,
15801 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015802 /*Probe template for 2.4GHz band*/
15803 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15804 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15805 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015806 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15807 pPNOScanReqParams->p24GProbeTemplate,
15808 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015809 /*Probe template for 5GHz band*/
15810 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15811 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15812 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015813 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15814 pPNOScanReqParams->p5GProbeTemplate,
15815 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015816 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15817 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015818
Jeff Johnson295189b2012-06-20 16:38:30 -070015819 /* Store Params pass it to WDI */
15820 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15821 pWdaParams->pWdaContext = pWDA;
15822 /* Store param pointer as passed in by caller */
15823 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015824 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015825 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015826 if(IS_WDI_STATUS_FAILURE(status))
15827 {
15828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15829 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015830 if(pPNOScanReqParams->statusCallback)
15831 {
15832 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15833 VOS_STATUS_E_FAILURE);
15834 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015835 if (pPNOScanReqParams->enable == 1)
15836 {
15837 if (pPNOScanReqParams->aNetworks)
15838 vos_mem_free(pPNOScanReqParams->aNetworks);
15839 if (pPNOScanReqParams->p24GProbeTemplate)
15840 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15841 if (pPNOScanReqParams->p5GProbeTemplate)
15842 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15845 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015846
Jeff Johnson295189b2012-06-20 16:38:30 -070015847 pWdaParams->wdaWdiApiMsgParam = NULL;
15848 pWdaParams->wdaMsgParam = NULL;
15849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015850 return CONVERT_WDI2VOS_STATUS(status) ;
15851}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015852
15853#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15854
15855void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15856{
15857 /*Convert the CSR Auth types to WDI Auth types */
15858 switch (csrAuthType)
15859 {
15860 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15861 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15862 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015863#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015864 case eCSR_AUTH_TYPE_CCKM_WPA:
15865 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15866 break;
15867#endif
15868 case eCSR_AUTH_TYPE_WPA:
15869 *AuthType = eWDA_AUTH_TYPE_WPA;
15870 break;
15871 case eCSR_AUTH_TYPE_WPA_PSK:
15872 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15873 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015874#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015875 case eCSR_AUTH_TYPE_CCKM_RSN:
15876 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15877 break;
15878#endif
15879 case eCSR_AUTH_TYPE_RSN:
15880 *AuthType = eWDA_AUTH_TYPE_RSN;
15881 break;
15882 case eCSR_AUTH_TYPE_RSN_PSK:
15883 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15884 break;
15885#if defined WLAN_FEATURE_VOWIFI_11R
15886 case eCSR_AUTH_TYPE_FT_RSN:
15887 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15888 break;
15889 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15890 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15891 break;
15892#endif
15893#ifdef FEATURE_WLAN_WAPI
15894 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15895 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15896 break;
15897 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15898 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15899 break;
15900#endif /* FEATURE_WLAN_WAPI */
15901 case eCSR_AUTH_TYPE_SHARED_KEY:
15902 case eCSR_AUTH_TYPE_AUTOSWITCH:
15903 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15904 break;
15905#if 0
15906 case eCSR_AUTH_TYPE_SHARED_KEY:
15907 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15908 break;
15909 case eCSR_AUTH_TYPE_AUTOSWITCH:
15910 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15911#endif
15912 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015914 "%s: Unknown Auth Type", __func__);
15915 break;
15916 }
15917}
15918void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15919{
15920 switch (csrEncrType)
15921 {
15922 case eCSR_ENCRYPT_TYPE_NONE:
15923 *EncrType = WDI_ED_NONE;
15924 break;
15925 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15926 case eCSR_ENCRYPT_TYPE_WEP40:
15927 *EncrType = WDI_ED_WEP40;
15928 break;
15929 case eCSR_ENCRYPT_TYPE_WEP104:
15930 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15931 *EncrType = WDI_ED_WEP104;
15932 break;
15933 case eCSR_ENCRYPT_TYPE_TKIP:
15934 *EncrType = WDI_ED_TKIP;
15935 break;
15936 case eCSR_ENCRYPT_TYPE_AES:
15937 *EncrType = WDI_ED_CCMP;
15938 break;
15939#ifdef WLAN_FEATURE_11W
15940 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15941 *EncrType = WDI_ED_AES_128_CMAC;
15942 break;
15943#endif
15944#ifdef FEATURE_WLAN_WAPI
15945 case eCSR_ENCRYPT_TYPE_WPI:
15946 *EncrType = WDI_ED_WPI;
15947 break;
15948#endif
15949 case eCSR_ENCRYPT_TYPE_ANY:
15950 *EncrType = WDI_ED_ANY;
15951 break;
15952
15953 default:
15954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15955 "%s: Unknown Encryption Type", __func__);
15956 break;
15957 }
15958}
15959
15960/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015961 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015962 * Request to WDI to set Roam Offload Scan
15963 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015964VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015965 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15966{
15967 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015968 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15969 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015970 tWDA_ReqParams *pWdaParams ;
15971 v_U8_t csrAuthType;
15972 WDI_RoamNetworkType *pwdiRoamNetworkType;
15973 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15975 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015976 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015977 {
15978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15979 "%s: VOS MEM Alloc Failure", __func__);
15980 VOS_ASSERT(0);
15981 return VOS_STATUS_E_NOMEM;
15982 }
15983 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15984 if (NULL == pWdaParams)
15985 {
15986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15987 "%s: VOS MEM Alloc Failure", __func__);
15988 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015989 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015990 return VOS_STATUS_E_NOMEM;
15991 }
15992
15993 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015994 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015995 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015996 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15997 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015998 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15999 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
16000 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
16001 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
16002 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
16003 sizeof(pwdiRoamNetworkType->currAPbssid));
16004 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
16005 csrAuthType);
16006 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
16007 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
16008 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
16009 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
16010 pwdiRoamOffloadScanInfo->LookupThreshold =
16011 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080016012 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
16013 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016014 pwdiRoamOffloadScanInfo->RoamRssiDiff =
16015 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080016016 pwdiRoamOffloadScanInfo->MAWCEnabled =
16017 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016018 pwdiRoamOffloadScanInfo->Command =
16019 pRoamOffloadScanReqParams->Command ;
16020 pwdiRoamOffloadScanInfo->StartScanReason =
16021 pRoamOffloadScanReqParams->StartScanReason ;
16022 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
16023 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
16024 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
16025 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
16026 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
16027 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
16028 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
16029 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
16030 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
16031 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016032 pwdiRoamOffloadScanInfo->IsESEEnabled =
16033 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016034 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
16035 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
16036 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
16037 pwdiRoamNetworkType->ssId.ucLength =
16038 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
16039 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
16040 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
16041 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
16042 pwdiRoamNetworkType->ChannelCount =
16043 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
16044 pwdiRoamOffloadScanInfo->ChannelCacheType =
16045 pRoamOffloadScanReqParams->ChannelCacheType;
16046 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
16047 pRoamOffloadScanReqParams->ValidChannelList,
16048 pRoamOffloadScanReqParams->ValidChannelCount);
16049 pwdiRoamOffloadScanInfo->ValidChannelCount =
16050 pRoamOffloadScanReqParams->ValidChannelCount;
16051 pwdiRoamOffloadScanInfo->us24GProbeSize =
16052 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16053 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16054 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
16055 pRoamOffloadScanReqParams->p24GProbeTemplate,
16056 pwdiRoamOffloadScanInfo->us24GProbeSize);
16057 pwdiRoamOffloadScanInfo->us5GProbeSize =
16058 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
16059 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
16060 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
16061 pRoamOffloadScanReqParams->p5GProbeTemplate,
16062 pwdiRoamOffloadScanInfo->us5GProbeSize);
16063 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
16064 pRoamOffloadScanReqParams->MDID.mdiePresent;
16065 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
16066 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016067 pwdiRoamOffloadScanInfo->nProbes =
16068 pRoamOffloadScanReqParams->nProbes;
16069 pwdiRoamOffloadScanInfo->HomeAwayTime =
16070 pRoamOffloadScanReqParams->HomeAwayTime;
16071 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016072 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016073 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016074 pWdaParams->pWdaContext = pWDA;
16075 /* Store param pointer as passed in by caller */
16076 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016077 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016078 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
16079 if(IS_WDI_STATUS_FAILURE(status))
16080 {
16081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16082 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
16083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16084 vos_mem_free(pWdaParams->wdaMsgParam);
16085 pWdaParams->wdaWdiApiMsgParam = NULL;
16086 pWdaParams->wdaMsgParam = NULL;
16087 }
16088 return CONVERT_WDI2VOS_STATUS(status) ;
16089}
16090#endif
16091
Jeff Johnson295189b2012-06-20 16:38:30 -070016092/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016093 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016094 *
16095 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016096void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016097{
16098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16099
16100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016101 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016102
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016103 if(NULL == pWdaParams)
16104 {
16105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016106 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016107 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016108 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016109 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016110
Jeff Johnson295189b2012-06-20 16:38:30 -070016111 vos_mem_free(pWdaParams->wdaMsgParam) ;
16112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16113 vos_mem_free(pWdaParams) ;
16114
16115 return ;
16116}
16117/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016118 * FUNCTION: WDA_RssiFilterReqCallback
16119 * Free memory.
16120 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
16121 */
16122void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16123{
16124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16125
16126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16127 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16128
16129 if(NULL == pWdaParams)
16130 {
16131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16132 "%s: pWdaParams received NULL", __func__);
16133 VOS_ASSERT(0);
16134 return;
16135 }
16136
16137 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16138 {
16139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16140 vos_mem_free(pWdaParams->wdaMsgParam);
16141 vos_mem_free(pWdaParams);
16142 }
16143
16144 return;
16145}
16146/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053016147 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070016148 * Request to WDI to set Preferred Network List.Offload
16149 */
16150VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
16151 tSirSetRSSIFilterReq* pRssiFilterParams)
16152{
Jeff Johnson43971f52012-07-17 12:26:56 -070016153 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016154 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
16155 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
16156 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016159 if(NULL == pwdiSetRssiFilterReqInfo)
16160 {
16161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016163 VOS_ASSERT(0);
16164 return VOS_STATUS_E_NOMEM;
16165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16167 if(NULL == pWdaParams)
16168 {
16169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016171 VOS_ASSERT(0);
16172 vos_mem_free(pwdiSetRssiFilterReqInfo);
16173 return VOS_STATUS_E_NOMEM;
16174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016176 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
16177 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016178
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 /* Store Params pass it to WDI */
16180 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16181 pWdaParams->pWdaContext = pWDA;
16182 /* Store param pointer as passed in by caller */
16183 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016184 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016185 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 if(IS_WDI_STATUS_FAILURE(status))
16188 {
16189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16190 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16192 vos_mem_free(pWdaParams->wdaMsgParam);
16193 pWdaParams->wdaWdiApiMsgParam = NULL;
16194 pWdaParams->wdaMsgParam = NULL;
16195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016196 return CONVERT_WDI2VOS_STATUS(status) ;
16197}
16198
Jeff Johnson295189b2012-06-20 16:38:30 -070016199/*
16200 * FUNCTION: WDA_ProcessUpdateScanParams
16201 * Request to WDI to update Scan Parameters
16202 */
16203VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16204 tSirUpdateScanParams *pUpdateScanParams)
16205{
Jeff Johnson43971f52012-07-17 12:26:56 -070016206 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16208 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16209 sizeof(WDI_UpdateScanParamsInfoType)) ;
16210 tWDA_ReqParams *pWdaParams ;
16211 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016214 if(NULL == wdiUpdateScanParamsInfoType)
16215 {
16216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016218 VOS_ASSERT(0);
16219 return VOS_STATUS_E_NOMEM;
16220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16222 if ( NULL == pWdaParams )
16223 {
16224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016226 VOS_ASSERT(0);
16227 vos_mem_free(wdiUpdateScanParamsInfoType);
16228 return VOS_STATUS_E_NOMEM;
16229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016230 //
16231 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16232 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16234 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16235 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16236 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016237 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016238 pUpdateScanParams->b11dEnabled,
16239 pUpdateScanParams->b11dResolved,
16240 pUpdateScanParams->ucChannelCount,
16241 pUpdateScanParams->usPassiveMinChTime,
16242 pUpdateScanParams->usPassiveMaxChTime,
16243 pUpdateScanParams->usActiveMinChTime,
16244 pUpdateScanParams->usActiveMaxChTime,
16245 sizeof(tSirUpdateScanParams),
16246 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16247
Jeff Johnson295189b2012-06-20 16:38:30 -070016248 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16249 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016250 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16251 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016252 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16253 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16255 pUpdateScanParams->usActiveMaxChTime;
16256 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16257 pUpdateScanParams->usActiveMinChTime;
16258 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16259 pUpdateScanParams->usPassiveMaxChTime;
16260 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16261 pUpdateScanParams->usPassiveMinChTime;
16262
Jeff Johnson295189b2012-06-20 16:38:30 -070016263 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016264 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16265 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016266
Jeff Johnson295189b2012-06-20 16:38:30 -070016267 for ( i = 0; i <
16268 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16269 i++)
16270 {
16271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16272 "Update Scan Parameters channel: %d",
16273 pUpdateScanParams->aChannels[i]);
16274
16275 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16276 pUpdateScanParams->aChannels[i];
16277 }
16278
Yue Ma7f44bbe2013-04-12 11:47:39 -070016279 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16280 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016281
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 /* Store Params pass it to WDI */
16283 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16284 pWdaParams->pWdaContext = pWDA;
16285 /* Store param pointer as passed in by caller */
16286 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016287
Jeff Johnson295189b2012-06-20 16:38:30 -070016288
16289
16290 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016291 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016292 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016293 if(IS_WDI_STATUS_FAILURE(status))
16294 {
16295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16296 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16298 vos_mem_free(pWdaParams->wdaMsgParam);
16299 vos_mem_free(pWdaParams);
16300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 return CONVERT_WDI2VOS_STATUS(status) ;
16302}
16303#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016304
16305#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16306/*
16307 * FUNCTION: WDA_RoamOffloadScanReqCallback
16308 *
16309 */
16310void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16311{
16312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016313 vos_msg_t vosMsg;
16314 wpt_uint8 reason = 0;
16315
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016317 "<------ %s " ,__func__);
16318 if (NULL == pWdaParams)
16319 {
16320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16321 "%s: pWdaParams received NULL", __func__);
16322 VOS_ASSERT(0) ;
16323 return ;
16324 }
16325 if ( pWdaParams != NULL )
16326 {
16327 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16328 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016329 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16331 }
16332 if ( pWdaParams->wdaMsgParam != NULL)
16333 {
16334 vos_mem_free(pWdaParams->wdaMsgParam);
16335 }
16336
16337 vos_mem_free(pWdaParams) ;
16338 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016339 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16340 vosMsg.bodyptr = NULL;
16341 if (WDI_STATUS_SUCCESS != status)
16342 {
16343 reason = 0;
16344 }
16345 vosMsg.bodyval = reason;
16346 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16347 {
16348 /* free the mem and return */
16349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016350 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016351 }
16352
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016353 return ;
16354}
16355#endif
16356
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016357/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016358 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016359 *
16360 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016361void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016362{
16363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16364
16365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16366 "<------ %s " ,__func__);
16367
16368 if(NULL == pWdaParams)
16369 {
16370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16371 "%s: pWdaParams received NULL", __func__);
16372 VOS_ASSERT(0);
16373 return;
16374 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016375
16376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16377 vos_mem_free(pWdaParams->wdaMsgParam);
16378 vos_mem_free(pWdaParams);
16379
16380 return;
16381}
16382/*
16383 * FUNCTION: WDA_SetPowerParamsReqCallback
16384 * Free memory.
16385 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16386 */
16387void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16388{
16389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16390
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16392 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16393
16394 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016395 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16397 "%s: pWdaParams received NULL", __func__);
16398 VOS_ASSERT(0);
16399 return;
16400 }
16401
16402 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16403 {
16404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16405 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016406 vos_mem_free(pWdaParams);
16407 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016408
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016409 return;
16410}
16411
Jeff Johnson295189b2012-06-20 16:38:30 -070016412#ifdef WLAN_FEATURE_PACKET_FILTERING
16413/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016414 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016415 *
16416 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016417void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016418 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16419 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016420{
16421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016423 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016424 if(NULL == pWdaParams)
16425 {
16426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016427 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016428 VOS_ASSERT(0) ;
16429 return ;
16430 }
16431
16432 vos_mem_free(pWdaParams->wdaMsgParam) ;
16433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16434 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016435 //print a msg, nothing else to do
16436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016437 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016438 return ;
16439}
Jeff Johnson295189b2012-06-20 16:38:30 -070016440/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016441 * FUNCTION: WDA_8023MulticastListReqCallback
16442 * Free memory.
16443 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16444 */
16445void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16446{
16447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16448
16449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16450 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16451
16452 if(NULL == pWdaParams)
16453 {
16454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16455 "%s: pWdaParams received NULL", __func__);
16456 VOS_ASSERT(0);
16457 return;
16458 }
16459
16460 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16461 {
16462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16463 vos_mem_free(pWdaParams->wdaMsgParam);
16464 vos_mem_free(pWdaParams);
16465 }
16466
16467 return;
16468}
16469/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016470 * FUNCTION: WDA_Process8023MulticastListReq
16471 * Request to WDI to add 8023 Multicast List
16472 */
16473VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16474 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16475{
Jeff Johnson43971f52012-07-17 12:26:56 -070016476 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016477 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16478 tWDA_ReqParams *pWdaParams ;
16479 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 pwdiFltPktSetMcListReqParamsType =
16483 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16484 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16485 ) ;
16486 if(NULL == pwdiFltPktSetMcListReqParamsType)
16487 {
16488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 return VOS_STATUS_E_NOMEM;
16491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16493 if(NULL == pWdaParams)
16494 {
16495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016496 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016497 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16498 return VOS_STATUS_E_NOMEM;
16499 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016500
Jeff Johnson295189b2012-06-20 16:38:30 -070016501 //
16502 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16503 //
16504 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016505 pRcvFltMcAddrList->ulMulticastAddrCnt;
16506
16507 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16508 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16509 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16510 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16511
Jeff Johnson295189b2012-06-20 16:38:30 -070016512 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16513 {
16514 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16515 &(pRcvFltMcAddrList->multicastAddr[i]),
16516 sizeof(tSirMacAddr));
16517 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016518 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16519 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016520
Jeff Johnson295189b2012-06-20 16:38:30 -070016521 /* Store Params pass it to WDI */
16522 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16523 pWdaParams->pWdaContext = pWDA;
16524 /* Store param pointer as passed in by caller */
16525 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016526 status = WDI_8023MulticastListReq(
16527 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016528 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016529 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016530 if(IS_WDI_STATUS_FAILURE(status))
16531 {
16532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16533 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16535 vos_mem_free(pWdaParams->wdaMsgParam);
16536 vos_mem_free(pWdaParams);
16537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016538 return CONVERT_WDI2VOS_STATUS(status) ;
16539}
Jeff Johnson295189b2012-06-20 16:38:30 -070016540/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016541 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 *
16543 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016544void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016545 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16546 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016547{
16548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016550 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016551 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016552 if(NULL == pWdaParams)
16553 {
16554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016556 VOS_ASSERT(0) ;
16557 return ;
16558 }
16559
16560 vos_mem_free(pWdaParams->wdaMsgParam) ;
16561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16562 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016563 //print a msg, nothing else to do
16564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016565 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016566 return ;
16567}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016568
16569/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016570 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16571 * Free memory.
16572 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016573 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016574void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016575 void* pUserData)
16576{
16577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16578
16579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16580 "<------ %s, wdiStatus: %d",
16581 __func__, wdiStatus);
16582
16583 if (NULL == pWdaParams)
16584 {
16585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16586 "%s: Invalid pWdaParams pointer", __func__);
16587 VOS_ASSERT(0);
16588 return;
16589 }
16590
16591 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16592 {
16593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16594 vos_mem_free(pWdaParams->wdaMsgParam);
16595 vos_mem_free(pWdaParams);
16596 }
16597
16598 return;
16599}
16600
Jeff Johnson295189b2012-06-20 16:38:30 -070016601/*
16602 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16603 * Request to WDI to set Receive Filters
16604 */
16605VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16606 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16607{
Jeff Johnson43971f52012-07-17 12:26:56 -070016608 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016609 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16610 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16611 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16612 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16613 tWDA_ReqParams *pWdaParams ;
16614 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16618 {
16619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016621 VOS_ASSERT(0);
16622 return VOS_STATUS_E_NOMEM;
16623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16625 if(NULL == pWdaParams)
16626 {
16627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016629 VOS_ASSERT(0);
16630 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16631 return VOS_STATUS_E_NOMEM;
16632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16634 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16635 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16636 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016637 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16638 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16639
16640 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16641 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016642
16643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16644 "FID %d FT %d NParams %d CT %d",
16645 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16646 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16647 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16648 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016649 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16650 {
16651 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16652 &pRcvPktFilterCfg->paramsData[i],
16653 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016655 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016656 pwdiSetRcvPktFilterReqParamsType->
16657 wdiPktFilterCfg.paramsData[i].protocolLayer,
16658 pwdiSetRcvPktFilterReqParamsType->
16659 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016661 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016662 pwdiSetRcvPktFilterReqParamsType->
16663 wdiPktFilterCfg.paramsData[i].dataOffset,
16664 pwdiSetRcvPktFilterReqParamsType->
16665 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016667 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016668 pwdiSetRcvPktFilterReqParamsType->
16669 wdiPktFilterCfg.paramsData[i].compareData[0],
16670 pwdiSetRcvPktFilterReqParamsType->
16671 wdiPktFilterCfg.paramsData[i].compareData[1],
16672 pwdiSetRcvPktFilterReqParamsType->
16673 wdiPktFilterCfg.paramsData[i].compareData[2],
16674 pwdiSetRcvPktFilterReqParamsType->
16675 wdiPktFilterCfg.paramsData[i].compareData[3],
16676 pwdiSetRcvPktFilterReqParamsType->
16677 wdiPktFilterCfg.paramsData[i].compareData[4],
16678 pwdiSetRcvPktFilterReqParamsType->
16679 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016681 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016682 pwdiSetRcvPktFilterReqParamsType->
16683 wdiPktFilterCfg.paramsData[i].dataMask[0],
16684 pwdiSetRcvPktFilterReqParamsType->
16685 wdiPktFilterCfg.paramsData[i].dataMask[1],
16686 pwdiSetRcvPktFilterReqParamsType->
16687 wdiPktFilterCfg.paramsData[i].dataMask[2],
16688 pwdiSetRcvPktFilterReqParamsType->
16689 wdiPktFilterCfg.paramsData[i].dataMask[3],
16690 pwdiSetRcvPktFilterReqParamsType->
16691 wdiPktFilterCfg.paramsData[i].dataMask[4],
16692 pwdiSetRcvPktFilterReqParamsType->
16693 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016694 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016695 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016696 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 /* Store Params pass it to WDI */
16698 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16699 pWdaParams->pWdaContext = pWDA;
16700 /* Store param pointer as passed in by caller */
16701 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016702 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016703 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016704 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016705 if(IS_WDI_STATUS_FAILURE(status))
16706 {
16707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16708 "Failure in SetFilter(),free all the memory,status %d ",status);
16709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16710 vos_mem_free(pWdaParams->wdaMsgParam);
16711 vos_mem_free(pWdaParams);
16712 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016713 return CONVERT_WDI2VOS_STATUS(status) ;
16714}
Jeff Johnson295189b2012-06-20 16:38:30 -070016715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016716 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016717 *
16718 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016719void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016720 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16721 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016722{
16723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16724 tWDA_CbContext *pWDA;
16725 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16726 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16727 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16728 tANI_U8 i;
16729 vos_msg_t vosMsg;
16730
16731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016733 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16734
Jeff Johnsone7245742012-09-05 17:12:55 -070016735 if(NULL == pRcvFltPktMatchCntRsp)
16736 {
16737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016738 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016739 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016740 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016741 return ;
16742 }
16743
Jeff Johnson295189b2012-06-20 16:38:30 -070016744 if(NULL == pWdaParams)
16745 {
16746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016748 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016749 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016750 return ;
16751 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016752 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16753 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016754 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16755 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16756
16757 /* Message Header */
16758 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16759 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16760
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016761 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016762
16763 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16764 {
16765 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16766 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016768 /* VOS message wrapper */
16769 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16770 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16771 vosMsg.bodyval = 0;
16772 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16773 {
16774 /* free the mem and return */
16775 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16776 }
16777
16778 vos_mem_free(pWdaParams->wdaMsgParam) ;
16779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16780 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016781
16782 return;
16783}
16784/*
16785 * FUNCTION: WDA_FilterMatchCountReqCallback
16786 * Free memory and send RSP back to SME.
16787 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16788 */
16789void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16790{
16791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16792 vos_msg_t vosMsg;
16793
16794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16795 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16796
16797 if(NULL == pWdaParams)
16798 {
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16800 "%s: pWdaParams received NULL", __func__);
16801 VOS_ASSERT(0);
16802 return;
16803 }
16804
16805 /* VOS message wrapper */
16806 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16807 vosMsg.bodyptr = NULL;
16808 vosMsg.bodyval = 0;
16809
16810 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16811 {
16812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16813 vos_mem_free(pWdaParams->wdaMsgParam);
16814 vos_mem_free(pWdaParams);
16815 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16816 }
16817
16818 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016819}
Jeff Johnson295189b2012-06-20 16:38:30 -070016820/*
16821 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16822 * Request to WDI to get PC Filter Match Count
16823 */
16824VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16825{
Jeff Johnson43971f52012-07-17 12:26:56 -070016826 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016827 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16828 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16829 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016832 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16833 {
16834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016836 VOS_ASSERT(0);
16837 return VOS_STATUS_E_NOMEM;
16838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16840 if(NULL == pWdaParams)
16841 {
16842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016844 VOS_ASSERT(0);
16845 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16846 return VOS_STATUS_E_NOMEM;
16847 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016848
Yue Ma7f44bbe2013-04-12 11:47:39 -070016849 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16850 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016851
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016852 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16853 pRcvFltPktMatchRsp->bssId,
16854 sizeof(wpt_macAddr));
16855
Jeff Johnson295189b2012-06-20 16:38:30 -070016856 /* Store Params pass it to WDI */
16857 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16858 pWdaParams->pWdaContext = pWDA;
16859 /* Store param pointer as passed in by caller */
16860 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016861 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016862 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016863 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016864 if(IS_WDI_STATUS_FAILURE(status))
16865 {
16866 /* failure returned by WDI API */
16867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16868 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16870 vos_mem_free(pWdaParams) ;
16871 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16872 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016874 return CONVERT_WDI2VOS_STATUS(status) ;
16875}
Jeff Johnson295189b2012-06-20 16:38:30 -070016876/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016877 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016878 *
16879 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016880void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016881 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16882 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016883{
16884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016886 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016887/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16888 if(NULL == pWdaParams)
16889 {
16890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016891 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016892 VOS_ASSERT(0) ;
16893 return ;
16894 }
16895
16896 vos_mem_free(pWdaParams->wdaMsgParam) ;
16897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16898 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016899 //print a msg, nothing else to do
16900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016901 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016902 return ;
16903}
Jeff Johnson295189b2012-06-20 16:38:30 -070016904/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016905 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16906 * Free memory.
16907 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16908 */
16909void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16910{
16911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16912
16913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16914 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16915
16916 if(NULL == pWdaParams)
16917 {
16918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16919 "%s: Invalid pWdaParams pointer", __func__);
16920 VOS_ASSERT(0);
16921 return;
16922 }
16923
16924 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16925 {
16926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16927 vos_mem_free(pWdaParams->wdaMsgParam);
16928 vos_mem_free(pWdaParams);
16929 }
16930
16931 return;
16932}
16933/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016934 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16935 * Request to WDI to clear Receive Filters
16936 */
16937VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16938 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16939{
Jeff Johnson43971f52012-07-17 12:26:56 -070016940 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016941 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16942 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16943 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016945 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016946 if(NULL == pwdiRcvFltPktClearReqParamsType)
16947 {
16948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016950 VOS_ASSERT(0);
16951 return VOS_STATUS_E_NOMEM;
16952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016953 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16954 if(NULL == pWdaParams)
16955 {
16956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016958 VOS_ASSERT(0);
16959 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16960 return VOS_STATUS_E_NOMEM;
16961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016962 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16963 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016964 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16965 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16966 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16967 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016968
Yue Ma7f44bbe2013-04-12 11:47:39 -070016969 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016970 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016971 /* Store Params pass it to WDI */
16972 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16973 pWdaParams->pWdaContext = pWDA;
16974 /* Store param pointer as passed in by caller */
16975 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016976 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016977 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016978 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 if(IS_WDI_STATUS_FAILURE(status))
16980 {
16981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16982 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016984 vos_mem_free(pWdaParams->wdaMsgParam);
16985 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016987 return CONVERT_WDI2VOS_STATUS(status) ;
16988}
16989#endif // WLAN_FEATURE_PACKET_FILTERING
16990
Jeff Johnson295189b2012-06-20 16:38:30 -070016991/*
16992 * FUNCTION: WDA_ProcessSetPowerParamsReq
16993 * Request to WDI to set power params
16994 */
16995VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16996 tSirSetPowerParamsReq *pPowerParams)
16997{
Jeff Johnson43971f52012-07-17 12:26:56 -070016998 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
17000 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017001 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017003 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017004 if(NULL == pwdiSetPowerParamsReqInfo)
17005 {
17006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017008 VOS_ASSERT(0);
17009 return VOS_STATUS_E_NOMEM;
17010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017011 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17012 if(NULL == pWdaParams)
17013 {
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017016 VOS_ASSERT(0);
17017 vos_mem_free(pwdiSetPowerParamsReqInfo);
17018 return VOS_STATUS_E_NOMEM;
17019 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017020
Jeff Johnson295189b2012-06-20 16:38:30 -070017021
17022 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
17023 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070017024 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
17025 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070017026 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
17027 pPowerParams->uListenInterval;
17028 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
17029 pPowerParams->uBcastMcastFilter;
17030 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
17031 pPowerParams->uEnableBET;
17032 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
17033 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070017034 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
17035 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017036 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
17037 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017038
Jeff Johnson295189b2012-06-20 16:38:30 -070017039 /* Store Params pass it to WDI */
17040 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
17041 pWdaParams->pWdaContext = pWDA;
17042 /* Store param pointer as passed in by caller */
17043 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017044 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017045 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017046 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017047 if(IS_WDI_STATUS_FAILURE(status))
17048 {
17049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17050 "Failure in Set power params REQ WDI API, free all the memory " );
17051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17052 vos_mem_free(pWdaParams->wdaMsgParam);
17053 pWdaParams->wdaWdiApiMsgParam = NULL;
17054 pWdaParams->wdaMsgParam = NULL;
17055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017056 return CONVERT_WDI2VOS_STATUS(status) ;
17057}
17058
17059/*
17060 * FUNCTION: WDA_SetTmLevelRspCallback
17061 * Set TM Level response
17062 */
17063void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
17064{
17065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17066
17067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017069
17070 if(NULL == pWdaParams)
17071 {
17072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017074 VOS_ASSERT(0) ;
17075 return ;
17076 }
17077
17078 /* Dose not need to send notification to upper layer
17079 * Just free allocated resources */
17080 if( pWdaParams != NULL )
17081 {
17082 if( pWdaParams->wdaWdiApiMsgParam != NULL )
17083 {
17084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17085 }
17086 vos_mem_free(pWdaParams->wdaMsgParam) ;
17087 vos_mem_free(pWdaParams) ;
17088 }
17089}
17090
17091/*
17092 * FUNCTION: WDA_ProcessSetTmLevelReq
17093 * Set TM Level request
17094 */
17095VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
17096 tAniSetTmLevelReq *setTmLevelReq)
17097{
17098 WDI_Status status = WDI_STATUS_SUCCESS ;
17099 tWDA_ReqParams *pWdaParams ;
17100 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
17101 (WDI_SetTmLevelReqType *)vos_mem_malloc(
17102 sizeof(WDI_SetTmLevelReqType)) ;
17103 if(NULL == wdiSetTmLevelReq)
17104 {
17105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017107 VOS_ASSERT(0);
17108 return VOS_STATUS_E_NOMEM;
17109 }
17110
17111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17112 if(NULL == pWdaParams)
17113 {
17114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017116 VOS_ASSERT(0);
17117 vos_mem_free(wdiSetTmLevelReq);
17118 return VOS_STATUS_E_NOMEM;
17119 }
17120
17121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017122 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017123
17124 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
17125 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
17126
17127 pWdaParams->pWdaContext = pWDA;
17128 pWdaParams->wdaMsgParam = setTmLevelReq;
17129 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
17130
17131 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
17132 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
17133
17134 if(IS_WDI_STATUS_FAILURE(status))
17135 {
17136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080017137 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070017138 vos_mem_free(pWdaParams->wdaMsgParam) ;
17139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17140 vos_mem_free(pWdaParams) ;
17141 }
17142
17143 return CONVERT_WDI2VOS_STATUS(status) ;
17144}
17145
17146VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
17147 tpTxControlParams pTxCtrlParam)
17148{
17149 VOS_STATUS wdaStatus;
17150
17151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017153 if( pTxCtrlParam == NULL )
17154 {
17155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017156 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017157 return VOS_STATUS_E_FAILURE;
17158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017159 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
17160 {
17161 wdaStatus = WDA_SuspendDataTx(pWDA);
17162 }
17163 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
17164 {
17165 wdaStatus = WDA_ResumeDataTx(pWDA);
17166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017167 return wdaStatus;
17168}
17169
17170 /* FUNCTION WDA_featureCapsExchange
17171 * WDA API to invoke capability exchange between host and FW.
17172 */
17173void WDA_featureCapsExchange(v_PVOID_t pVosContext)
17174{
17175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017176 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017177 WDI_featureCapsExchangeReq( NULL, pVosContext);
17178}
17179
Yathish9f22e662012-12-10 14:21:35 -080017180/* FUNCTION WDA_disableCapablityFeature
17181 * WDA API to diable Active mode offload in host.
17182 */
17183void WDA_disableCapablityFeature(tANI_U8 feature_index)
17184{
17185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17186 "%s:enter", __func__ );
17187 WDI_disableCapablityFeature(feature_index);
17188}
17189
Jeff Johnson295189b2012-06-20 16:38:30 -070017190 /* FUNCTION WDA_getHostWlanFeatCaps
17191 * Wrapper for WDI API, that will return if the feature (enum value).passed
17192 * to this API is supported or not in Host
17193 * return value
17194 * 0 - implies feature is NOT Supported
17195 * any non zero value - implies feature is SUPPORTED
17196 */
17197tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17198{
17199 return WDI_getHostWlanFeatCaps(featEnumValue);
17200}
17201
17202 /* FUNCTION WDA_getFwWlanFeatCaps
17203 * Wrapper for WDI API, that will return if the feature (enum value).passed
17204 * to this API is supported or not in FW
17205 * return value
17206 * 0 - implies feature is NOT Supported
17207 * any non zero value - implies feature is SUPPORTED
17208 */
17209tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17210{
17211 return WDI_getFwWlanFeatCaps(featEnumValue);
17212}
17213
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017214
Jeff Johnson295189b2012-06-20 16:38:30 -070017215/*
17216 * FUNCTION: WDA_shutdown
17217 * Shutdown WDA/WDI without handshaking with Riva.
17218 * Synchronous function.
17219 */
17220VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17221{
17222 WDI_Status wdiStatus;
17223 //tANI_U8 eventIdx = 0;
17224 VOS_STATUS status = VOS_STATUS_SUCCESS;
17225 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017226 if (NULL == pWDA)
17227 {
17228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017229 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017230 VOS_ASSERT(0);
17231 return VOS_STATUS_E_FAILURE;
17232 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017233 /* FTM mode stay START_STATE */
17234 if( (WDA_READY_STATE != pWDA->wdaState) &&
17235 (WDA_INIT_STATE != pWDA->wdaState) &&
17236 (WDA_START_STATE != pWDA->wdaState) )
17237 {
17238 VOS_ASSERT(0);
17239 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017240
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017241 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17242 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017243 {
17244 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017245 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017246 }
Leo Chang9d76f622013-08-23 16:34:52 -070017247 else
17248 {
17249 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17250 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017251
Jeff Johnson295189b2012-06-20 16:38:30 -070017252 /* call WDI shutdown */
17253 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017254 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17255 {
17256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17257 "error in WDA Stop" );
17258 status = VOS_STATUS_E_FAILURE;
17259 }
17260 /* WDI stop is synchrnous, shutdown is complete when it returns */
17261 pWDA->wdaState = WDA_STOP_STATE;
17262
Jeff Johnson295189b2012-06-20 16:38:30 -070017263 /* shutdown should perform the stop & close actions. */
17264 /* Destroy the event */
17265 status = vos_event_destroy(&pWDA->txFrameEvent);
17266 if(!VOS_IS_STATUS_SUCCESS(status))
17267 {
17268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017269 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017270 status = VOS_STATUS_E_FAILURE;
17271 }
17272 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17273 if(!VOS_IS_STATUS_SUCCESS(status))
17274 {
17275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017276 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017277 status = VOS_STATUS_E_FAILURE;
17278 }
17279 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17280 if(!VOS_IS_STATUS_SUCCESS(status))
17281 {
17282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017283 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017284 status = VOS_STATUS_E_FAILURE;
17285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017286 /* free WDA context */
17287 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17288 if ( !VOS_IS_STATUS_SUCCESS(status) )
17289 {
17290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17291 "error in WDA close " );
17292 status = VOS_STATUS_E_FAILURE;
17293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017294 return status;
17295}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017296
Jeff Johnsone7245742012-09-05 17:12:55 -070017297/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017298 * FUNCTION: WDA_setNeedShutdown
17299 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017300 */
17301
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017302void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017303{
17304 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017305 if(pWDA == NULL)
17306 {
17307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17308 "Could not get the WDA Context pointer" );
17309 return;
17310 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017311 pWDA->needShutdown = TRUE;
17312}
17313/*
17314 * FUNCTION: WDA_needShutdown
17315 * WDA needs a shutdown
17316 */
17317
17318v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17319{
17320 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017321 if(pWDA == NULL)
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "Could not get the WDA Context pointer" );
17325 return 0;
17326 }
17327 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017328}
17329
Mohit Khanna4a70d262012-09-11 16:30:12 -070017330#ifdef WLAN_FEATURE_11AC
17331/*
17332 * FUNCTION: WDA_SetBeaconFilterReqCallback
17333 *
17334 */
17335void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17336{
17337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017339 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017340 if(NULL == pWdaParams)
17341 {
17342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017343 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017344 VOS_ASSERT(0) ;
17345 return ;
17346 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017347
Mohit Khanna4a70d262012-09-11 16:30:12 -070017348 vos_mem_free(pWdaParams->wdaMsgParam) ;
17349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17350 vos_mem_free(pWdaParams) ;
17351 /*
17352 * No respone required for SetBeaconFilter req so just free the request
17353 * param here
17354 */
17355
17356 return ;
17357}
17358
17359VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17360 tUpdateVHTOpMode *pData)
17361{
17362 WDI_Status status = WDI_STATUS_SUCCESS ;
17363 tWDA_ReqParams *pWdaParams ;
17364 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17365 sizeof(WDI_UpdateVHTOpMode)) ;
17366 if(NULL == wdiTemp)
17367 {
17368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017369 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017370 VOS_ASSERT(0);
17371 return VOS_STATUS_E_NOMEM;
17372 }
17373 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17374 if(NULL == pWdaParams)
17375 {
17376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017377 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017378 VOS_ASSERT(0);
17379 vos_mem_free(wdiTemp);
17380 return VOS_STATUS_E_NOMEM;
17381 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17383 "------> %s Opmode = %d and staid = %d" ,
17384 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017385 wdiTemp->opMode = pData->opMode;
17386 wdiTemp->staId = pData->staId;
17387
17388 pWdaParams->pWdaContext = pWDA;
17389 /* Store Req pointer, as this will be used for response */
17390 pWdaParams->wdaMsgParam = (void *)pData;
17391 /* store Params pass it to WDI */
17392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17393
17394 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17395
17396 if(IS_WDI_STATUS_FAILURE(status))
17397 {
17398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17399 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17401 vos_mem_free(pWdaParams->wdaMsgParam);
17402 vos_mem_free(pWdaParams);
17403 }
17404 return CONVERT_WDI2VOS_STATUS(status) ;
17405}
17406#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017407
17408/*==========================================================================
17409 FUNCTION WDA_TransportChannelDebug
17410
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017411 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017412 Display Transport Channel debugging information
17413 User may request to display DXE channel snapshot
17414 Or if host driver detects any abnormal stcuk may display
17415
17416 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017417 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017418 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017419 debugFlags : Enable stall detect features
17420 defined by WPAL_DeviceDebugFlags
17421 These features may effect
17422 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017423
17424 RETURN VALUE
17425 NONE
17426
17427===========================================================================*/
17428void WDA_TransportChannelDebug
17429(
schang6295e542013-03-12 15:31:23 -070017430 tpAniSirGlobal pMac,
17431 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017432 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017433)
17434{
Mihir Shete40a55652014-03-02 14:14:47 +053017435 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017436 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017437}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017438
17439/*==========================================================================
17440 FUNCTION WDA_SetEnableSSR
17441
17442 DESCRIPTION
17443 API to enable/disable SSR on WDI timeout
17444
17445 PARAMETERS
17446 enableSSR : enable/disable SSR
17447
17448 RETURN VALUE
17449 NONE
17450
17451===========================================================================*/
17452void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17453{
17454 WDI_SetEnableSSR(enableSSR);
17455}
Leo Chang9056f462013-08-01 19:21:11 -070017456
17457#ifdef FEATURE_WLAN_LPHB
17458/*
17459 * FUNCTION: WDA_LPHBconfRspCallback
17460 *
17461 */
17462void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17463{
17464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17465
17466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17467 "<------ %s " ,__func__);
17468 if (NULL == pWdaParams)
17469 {
17470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17471 "%s: pWdaParams received NULL", __func__);
17472 VOS_ASSERT(0) ;
17473 return ;
17474 }
17475
17476 /* Do not need to send notification to upper layer
17477 * Just free allocated resources */
17478 if (pWdaParams != NULL)
17479 {
17480 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17481 {
17482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17483 }
17484 vos_mem_free(pWdaParams->wdaMsgParam) ;
17485 vos_mem_free(pWdaParams) ;
17486 }
17487
17488 return;
17489}
17490
17491/*
17492 * FUNCTION: WDA_ProcessLPHBConfReq
17493 *
17494 */
17495VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17496 tSirLPHBReq *pData)
17497{
17498 WDI_Status wdiStatus;
17499 tWDA_ReqParams *pWdaParams ;
17500
17501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17502 "------> %s " , __func__);
17503
17504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17505 if (NULL == pWdaParams)
17506 {
17507 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17508 "%s: VOS MEM Alloc Failure", __func__);
17509 VOS_ASSERT(0);
17510 vos_mem_free(pData);
17511 return VOS_STATUS_E_NOMEM;
17512 }
17513
17514 pWdaParams->pWdaContext = pWDA;
17515 pWdaParams->wdaMsgParam = (void *)pData;
17516 pWdaParams->wdaWdiApiMsgParam = NULL;
17517
17518 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17519 if (WDI_STATUS_PENDING == wdiStatus)
17520 {
17521 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17522 "Pending received for %s:%d ", __func__, __LINE__);
17523 }
17524 else if (WDI_STATUS_SUCCESS != wdiStatus)
17525 {
17526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17527 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17528 vos_mem_free(pWdaParams->wdaMsgParam);
17529 vos_mem_free(pWdaParams);
17530 }
17531
17532 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17533}
17534#endif /* FEATURE_WLAN_LPHB */
17535
c_hpothu92367912014-05-01 15:18:17 +053017536void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17537 void* pUserData)
17538{
17539 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17540
17541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17542 "<------ %s " ,__func__);
17543 if (NULL == pBcnMissRateInfo)
17544 {
17545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17546 "%s: pWdaParams received NULL", __func__);
17547 VOS_ASSERT(0) ;
17548 return ;
17549 }
17550 if (pBcnMissRateInfo->callback)
17551 {
17552 pBcnMissRateInfo->callback(status, bcnMissRate,
17553 pBcnMissRateInfo->data);
17554 }
17555 vos_mem_free(pUserData);
17556
17557 return;
17558}
17559
17560v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17561 tSirBcnMissRateReq *pData)
17562{
17563 WDI_Status wdiStatus;
17564 tSirBcnMissRateInfo *pBcnMissRateInfo;
17565
17566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17567 "------> %s " , __func__);
17568
17569 pBcnMissRateInfo =
17570 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17571 if (NULL == pBcnMissRateInfo)
17572 {
17573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17574 "%s: VOS MEM Alloc Failure", __func__);
17575 VOS_ASSERT(0);
17576 vos_mem_free(pData);
17577 return;
17578 }
17579
17580 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17581 pBcnMissRateInfo->data = pData->data;
17582
17583 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17584 WDA_GetBcnMissRateCallback,
17585 pData->bssid);
17586 if (WDI_STATUS_PENDING == wdiStatus)
17587 {
17588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17589 "Pending received for %s:%d ", __func__, __LINE__);
17590 }
17591 else if (WDI_STATUS_SUCCESS != wdiStatus)
17592 {
17593 if (pBcnMissRateInfo->callback)
17594 {
17595 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17596 -1, pBcnMissRateInfo->data);
17597 }
17598 }
17599 vos_mem_free(pData);
17600}
Dino Mycle41bdc942014-06-10 11:30:24 +053017601
17602#ifdef WLAN_FEATURE_EXTSCAN
17603
17604/*==========================================================================
17605 FUNCTION WDA_EXTScanStartRspCallback
17606
17607 DESCRIPTION
17608 API to send EXTScan Start Response to HDD
17609
17610 PARAMETERS
17611 pEventData: Response from FW
17612 pUserData:
17613===========================================================================*/
17614void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17615{
17616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17617 tWDA_CbContext *pWDA = NULL;
17618 void *pCallbackContext;
17619 tpAniSirGlobal pMac;
17620
17621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17622 "%s:", __func__);
17623 if (NULL == pWdaParams)
17624 {
17625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17626 "%s: pWdaParams received NULL", __func__);
17627 VOS_ASSERT(0);
17628 return;
17629 }
17630
17631 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17632
17633 if (NULL == pWDA)
17634 {
17635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17636 "%s: pWDA received NULL", __func__);
17637 VOS_ASSERT(0);
17638 goto error;
17639 }
17640
17641 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17642 if (NULL == pMac)
17643 {
17644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17645 "%s:pMac is NULL", __func__);
17646 VOS_ASSERT(0);
17647 goto error;
17648 }
17649
17650 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17651
17652 if (pMac->sme.pEXTScanIndCb)
17653 {
17654 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17655 pEventData);
17656 }
17657 else
17658 {
17659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17660 "%s:HDD callback is null", __func__);
17661 VOS_ASSERT(0);
17662 }
17663
17664error:
17665
17666 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17667 {
17668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17669 }
17670 if (pWdaParams->wdaMsgParam != NULL)
17671 {
17672 vos_mem_free(pWdaParams->wdaMsgParam);
17673 }
17674 vos_mem_free(pWdaParams) ;
17675
17676 return;
17677}
17678
17679/*==========================================================================
17680 FUNCTION WDA_EXTScanStopRspCallback
17681
17682 DESCRIPTION
17683 API to send EXTScan Stop Response to HDD
17684
17685 PARAMETERS
17686 pEventData: Response from FW
17687 pUserData:
17688===========================================================================*/
17689void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17690{
17691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17692 tWDA_CbContext *pWDA = NULL;
17693 void *pCallbackContext;
17694 tpAniSirGlobal pMac;
17695
17696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17697 "%s:", __func__);
17698 if (NULL == pWdaParams)
17699 {
17700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17701 "%s: pWdaParams received NULL", __func__);
17702 VOS_ASSERT(0);
17703 return;
17704 }
17705
17706 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17707
17708 if (NULL == pWDA)
17709 {
17710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17711 "%s: pWDA received NULL", __func__);
17712 VOS_ASSERT(0);
17713 goto error;
17714 }
17715
17716 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17717 if (NULL == pMac)
17718 {
17719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17720 "%s:pMac is NULL", __func__);
17721 VOS_ASSERT(0);
17722 goto error;
17723 }
17724 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17725
17726 if (pMac->sme.pEXTScanIndCb)
17727 {
17728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17729 "%s:HDD call back function called", __func__);
17730 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17731 pEventData);
17732 }
17733 else
17734 {
17735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17736 "%s:HDD callback is null", __func__);
17737 VOS_ASSERT(0);
17738 }
17739
17740error:
17741
17742 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17743 {
17744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17745 }
17746 if (pWdaParams->wdaMsgParam != NULL)
17747 {
17748 vos_mem_free(pWdaParams->wdaMsgParam);
17749 }
17750 vos_mem_free(pWdaParams) ;
17751
17752
17753 return;
17754}
17755
17756/*==========================================================================
17757 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17758
17759 DESCRIPTION
17760 API to send EXTScan Get Cached Results Response to HDD
17761
17762 PARAMETERS
17763 pEventData: Response from FW
17764 pUserData:
17765===========================================================================*/
17766void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17767{
17768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17769 tWDA_CbContext *pWDA = NULL;
17770 void *pCallbackContext;
17771 tpAniSirGlobal pMac;
17772
17773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17774 "%s: ", __func__);
17775 if (NULL == pWdaParams)
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "%s: pWdaParams received NULL", __func__);
17779 VOS_ASSERT(0);
17780 return;
17781 }
17782
17783 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17784
17785 if (NULL == pWDA)
17786 {
17787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17788 "%s: pWDA received NULL", __func__);
17789 VOS_ASSERT(0);
17790 goto error;
17791 }
17792
17793 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17794 if (NULL == pMac)
17795 {
17796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17797 "%s:pMac is NULL", __func__);
17798 VOS_ASSERT(0);
17799 goto error;
17800 }
17801
17802 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17803
17804 if (pMac->sme.pEXTScanIndCb)
17805 {
17806 pMac->sme.pEXTScanIndCb(pCallbackContext,
17807 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17808 pEventData);
17809 }
17810 else
17811 {
17812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17813 "%s:HDD callback is null", __func__);
17814 VOS_ASSERT(0);
17815 }
17816
17817
17818error:
17819
17820 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17821 {
17822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17823 }
17824 if (pWdaParams->wdaMsgParam != NULL)
17825 {
17826 vos_mem_free(pWdaParams->wdaMsgParam);
17827 }
17828 vos_mem_free(pWdaParams) ;
17829
17830 return;
17831}
17832
17833/*==========================================================================
17834 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17835
17836 DESCRIPTION
17837 API to send EXTScan Get Capabilities Response to HDD
17838
17839 PARAMETERS
17840 pEventData: Response from FW
17841 pUserData:
17842===========================================================================*/
17843void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17844{
17845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17846 tWDA_CbContext *pWDA = NULL;
17847 void *pCallbackContext;
17848 tpAniSirGlobal pMac;
17849
17850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17851 "%s:", __func__);
17852 if (NULL == pWdaParams)
17853 {
17854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17855 "%s: pWdaParams received NULL", __func__);
17856 VOS_ASSERT(0);
17857 return;
17858 }
17859
17860 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17861
17862 if (NULL == pWDA)
17863 {
17864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17865 "%s: pWDA received NULL", __func__);
17866 VOS_ASSERT(0);
17867 goto error;
17868 }
17869
17870 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17871 if (NULL == pMac)
17872 {
17873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17874 "%s:pMac is NULL", __func__);
17875 VOS_ASSERT(0);
17876 goto error;
17877 }
17878
17879 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17880
17881 if (pMac->sme.pEXTScanIndCb)
17882 {
17883 pMac->sme.pEXTScanIndCb(pCallbackContext,
17884 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17885 pEventData);
17886 }
17887 else
17888 {
17889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17890 "%s:HDD callback is null", __func__);
17891 VOS_ASSERT(0);
17892 }
17893
17894
17895error:
17896
17897 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17898 {
17899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17900 }
17901 if (pWdaParams->wdaMsgParam != NULL)
17902 {
17903 vos_mem_free(pWdaParams->wdaMsgParam);
17904 }
17905 vos_mem_free(pWdaParams) ;
17906
17907 return;
17908}
17909
17910/*==========================================================================
17911 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17912
17913 DESCRIPTION
17914 API to send EXTScan Set BSSID Hotlist Response to HDD
17915
17916 PARAMETERS
17917 pEventData: Response from FW
17918 pUserData:
17919===========================================================================*/
17920void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17921{
17922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17923 tWDA_CbContext *pWDA = NULL;
17924 void *pCallbackContext;
17925 tpAniSirGlobal pMac;
17926
17927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17928 "%s: ", __func__);
17929 if (NULL == pWdaParams)
17930 {
17931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17932 "%s: pWdaParams received NULL", __func__);
17933 VOS_ASSERT(0) ;
17934 return;
17935 }
17936
17937 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17938
17939 if (NULL == pWDA)
17940 {
17941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17942 "%s: pWDA received NULL", __func__);
17943 VOS_ASSERT(0);
17944 goto error;
17945 }
17946
17947 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17948 if (NULL == pMac)
17949 {
17950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17951 "%s:pMac is NULL", __func__);
17952 VOS_ASSERT(0);
17953 goto error;
17954 }
17955
17956 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17957
17958 if (pMac->sme.pEXTScanIndCb)
17959 {
17960 pMac->sme.pEXTScanIndCb(pCallbackContext,
17961 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17962 pEventData);
17963 }
17964 else
17965 {
17966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17967 "%s:HDD callback is null", __func__);
17968 VOS_ASSERT(0);
17969 }
17970
17971
17972error:
17973
17974 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17975 {
17976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17977 }
17978 if (pWdaParams->wdaMsgParam != NULL)
17979 {
17980 vos_mem_free(pWdaParams->wdaMsgParam);
17981 }
17982 vos_mem_free(pWdaParams) ;
17983
17984 return;
17985}
17986
17987/*==========================================================================
17988 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17989
17990 DESCRIPTION
17991 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17992
17993 PARAMETERS
17994 pEventData: Response from FW
17995 pUserData:
17996===========================================================================*/
17997void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17998{
17999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18000 tWDA_CbContext *pWDA = NULL;
18001 void *pCallbackContext;
18002 tpAniSirGlobal pMac;
18003
18004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18005 "%s:", __func__);
18006 if (NULL == pWdaParams)
18007 {
18008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18009 "%s: pWdaParams received NULL", __func__);
18010 VOS_ASSERT(0) ;
18011 return;
18012 }
18013
18014 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18015
18016 if (NULL == pWDA)
18017 {
18018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18019 "%s: pWDA received NULL", __func__);
18020 VOS_ASSERT(0);
18021 goto error;
18022 }
18023
18024 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18025 if (NULL == pMac)
18026 {
18027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18028 "%s:pMac is NULL", __func__);
18029 VOS_ASSERT(0);
18030 goto error;
18031 }
18032
18033 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18034
18035 if (pMac->sme.pEXTScanIndCb)
18036 {
18037 pMac->sme.pEXTScanIndCb(pCallbackContext,
18038 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
18039 pEventData);
18040 }
18041 else
18042 {
18043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18044 "%s:HDD callback is null", __func__);
18045 VOS_ASSERT(0);
18046 }
18047
18048
18049error:
18050
18051 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18052 {
18053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18054 }
18055 if (pWdaParams->wdaMsgParam != NULL)
18056 {
18057 vos_mem_free(pWdaParams->wdaMsgParam);
18058 }
18059 vos_mem_free(pWdaParams) ;
18060
18061 return;
18062}
18063
18064/*==========================================================================
18065 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
18066
18067 DESCRIPTION
18068 API to send EXTScan Set Significant RSSI Change RSP to HDD
18069
18070 PARAMETERS
18071 pEventData: Response from FW
18072 pUserData:
18073===========================================================================*/
18074void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
18075{
18076 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18077 tWDA_CbContext *pWDA = NULL;
18078 void *pCallbackContext;
18079 tpAniSirGlobal pMac;
18080
18081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18082 "%s:", __func__);
18083 if (NULL == pWdaParams)
18084 {
18085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18086 "%s: pWdaParams received NULL", __func__);
18087 VOS_ASSERT(0) ;
18088 return;
18089 }
18090
18091 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18092
18093 if (NULL == pWDA)
18094 {
18095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18096 "%s: pWDA received NULL", __func__);
18097 VOS_ASSERT(0);
18098 goto error;
18099 }
18100
18101 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18102 if (NULL == pMac)
18103 {
18104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18105 "%s:pMac is NULL", __func__);
18106 VOS_ASSERT(0);
18107 goto error;
18108 }
18109
18110 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18111
18112 if (pMac->sme.pEXTScanIndCb)
18113 {
18114 pMac->sme.pEXTScanIndCb(pCallbackContext,
18115 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
18116 pEventData);
18117 }
18118 else
18119 {
18120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18121 "%s:HDD callback is null", __func__);
18122 VOS_ASSERT(0);
18123 }
18124
18125
18126error:
18127
18128 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18129 {
18130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18131 }
18132 if (pWdaParams->wdaMsgParam != NULL)
18133 {
18134 vos_mem_free(pWdaParams->wdaMsgParam);
18135 }
18136 vos_mem_free(pWdaParams) ;
18137
18138 return;
18139}
18140
18141/*==========================================================================
18142 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
18143
18144 DESCRIPTION
18145 API to send EXTScan Set Significant RSSI Change RSP to HDD
18146
18147 PARAMETERS
18148 pEventData: Response from FW
18149 pUserData:
18150===========================================================================*/
18151void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
18152 void* pUserData)
18153{
18154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18155 tWDA_CbContext *pWDA = NULL;
18156 void *pCallbackContext;
18157 tpAniSirGlobal pMac;
18158
18159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18160 "%s:", __func__);
18161 if (NULL == pWdaParams)
18162 {
18163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18164 "%s: pWdaParams received NULL", __func__);
18165 VOS_ASSERT(0) ;
18166 return;
18167 }
18168
18169 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18170
18171 if (NULL == pWDA)
18172 {
18173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18174 "%s: pWDA received NULL", __func__);
18175 VOS_ASSERT(0);
18176 goto error;
18177 }
18178
18179 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18180 if (NULL == pMac)
18181 {
18182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18183 "%s:pMac is NULL", __func__);
18184 VOS_ASSERT(0);
18185 goto error;
18186 }
18187
18188 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18189
18190 if (pMac->sme.pEXTScanIndCb)
18191 {
18192 pMac->sme.pEXTScanIndCb(pCallbackContext,
18193 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18194 pEventData);
18195 }
18196 else
18197 {
18198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18199 "%s:HDD callback is null", __func__);
18200 VOS_ASSERT(0);
18201 }
18202
18203
18204error:
18205
18206 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18207 {
18208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18209 }
18210 if (pWdaParams->wdaMsgParam != NULL)
18211 {
18212 vos_mem_free(pWdaParams->wdaMsgParam);
18213 }
18214 vos_mem_free(pWdaParams) ;
18215
18216 return;
18217}
18218
18219/*==========================================================================
18220 FUNCTION WDA_ProcessEXTScanStartReq
18221
18222 DESCRIPTION
18223 API to send EXTScan Start Request to WDI
18224
18225 PARAMETERS
18226 pWDA: Pointer to WDA context
18227 wdaRequest: Pointer to EXTScan req parameters
18228===========================================================================*/
18229VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18230 tSirEXTScanStartReqParams *wdaRequest)
18231{
18232 WDI_Status status = WDI_STATUS_SUCCESS;
18233 tWDA_ReqParams *pWdaParams;
18234
18235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18236 "%s: ", __func__);
18237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18238 if (NULL == pWdaParams)
18239 {
18240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18241 "%s: VOS MEM Alloc Failure", __func__);
18242 VOS_ASSERT(0);
18243 return VOS_STATUS_E_NOMEM;
18244 }
18245 pWdaParams->pWdaContext = pWDA;
18246 pWdaParams->wdaMsgParam = wdaRequest;
18247 pWdaParams->wdaWdiApiMsgParam = NULL;
18248
18249 status = WDI_EXTScanStartReq((void *)wdaRequest,
18250 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18251 (void *)pWdaParams);
18252 if (IS_WDI_STATUS_FAILURE(status))
18253 {
18254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18255 "Failure to request. Free all the memory " );
18256 vos_mem_free(pWdaParams->wdaMsgParam);
18257 vos_mem_free(pWdaParams);
18258 }
18259 return CONVERT_WDI2VOS_STATUS(status);
18260}
18261
18262/*==========================================================================
18263 FUNCTION WDA_ProcessEXTScanStopReq
18264
18265 DESCRIPTION
18266 API to send EXTScan Start Request to WDI
18267
18268 PARAMETERS
18269 pWDA: Pointer to WDA context
18270 wdaRequest: Pointer to EXTScan req parameters
18271===========================================================================*/
18272VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18273 tSirEXTScanStopReqParams *wdaRequest)
18274{
18275 WDI_Status status = WDI_STATUS_SUCCESS;
18276 tWDA_ReqParams *pWdaParams;
18277
18278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18279 "%s:", __func__);
18280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18281 if (NULL == pWdaParams)
18282 {
18283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18284 "%s: VOS MEM Alloc Failure", __func__);
18285 VOS_ASSERT(0);
18286 return VOS_STATUS_E_NOMEM;
18287 }
18288 pWdaParams->pWdaContext = pWDA;
18289 pWdaParams->wdaMsgParam = wdaRequest;
18290 pWdaParams->wdaWdiApiMsgParam = NULL;
18291
18292 status = WDI_EXTScanStopReq((void *)wdaRequest,
18293 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18294 (void *)pWdaParams);
18295 if (IS_WDI_STATUS_FAILURE(status))
18296 {
18297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18298 "Failure to request. Free all the memory " );
18299 vos_mem_free(pWdaParams->wdaMsgParam);
18300 vos_mem_free(pWdaParams);
18301 }
18302 return CONVERT_WDI2VOS_STATUS(status);
18303}
18304
18305/*==========================================================================
18306 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18307
18308 DESCRIPTION
18309 API to send EXTScan Get Cached Results Request to WDI
18310
18311 PARAMETERS
18312 pWDA: Pointer to WDA context
18313 wdaRequest: Pointer to EXTScan req parameters
18314===========================================================================*/
18315VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18316 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18317{
18318 WDI_Status status = WDI_STATUS_SUCCESS;
18319 tWDA_ReqParams *pWdaParams;
18320
18321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18322 "%s: ", __func__);
18323 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18324 if (NULL == pWdaParams)
18325 {
18326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18327 "%s: VOS MEM Alloc Failure", __func__);
18328 VOS_ASSERT(0);
18329 return VOS_STATUS_E_NOMEM;
18330 }
18331 pWdaParams->pWdaContext = pWDA;
18332 pWdaParams->wdaMsgParam = wdaRequest;
18333 pWdaParams->wdaWdiApiMsgParam = NULL;
18334
18335 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18336 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18337 (void *)pWdaParams);
18338 if (IS_WDI_STATUS_FAILURE(status))
18339 {
18340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18341 "Failure to request. Free all the memory " );
18342 vos_mem_free(pWdaParams->wdaMsgParam);
18343 vos_mem_free(pWdaParams);
18344 }
18345 return CONVERT_WDI2VOS_STATUS(status);
18346}
18347
18348/*==========================================================================
18349 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18350
18351 DESCRIPTION
18352 API to send EXTScan Get Capabilities Request to WDI
18353
18354 PARAMETERS
18355 pWDA: Pointer to WDA context
18356 wdaRequest: Pointer to EXTScan req parameters
18357===========================================================================*/
18358VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18359 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18360{
18361 WDI_Status status = WDI_STATUS_SUCCESS;
18362 tWDA_ReqParams *pWdaParams;
18363
18364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18365 "%s:", __func__);
18366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18367 if (NULL == pWdaParams)
18368 {
18369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18370 "%s: VOS MEM Alloc Failure", __func__);
18371 VOS_ASSERT(0);
18372 return VOS_STATUS_E_NOMEM;
18373 }
18374 pWdaParams->pWdaContext = pWDA;
18375 pWdaParams->wdaMsgParam = wdaRequest;
18376 pWdaParams->wdaWdiApiMsgParam = NULL;
18377
18378 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18379 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18380 (void *)pWdaParams);
18381 if (IS_WDI_STATUS_FAILURE(status))
18382 {
18383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18384 "Failure to request. Free all the memory " );
18385 vos_mem_free(pWdaParams->wdaMsgParam);
18386 vos_mem_free(pWdaParams);
18387 }
18388 return CONVERT_WDI2VOS_STATUS(status);
18389}
18390
18391/*==========================================================================
18392 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18393
18394 DESCRIPTION
18395 API to send Set BSSID Hotlist Request to WDI
18396
18397 PARAMETERS
18398 pWDA: Pointer to WDA context
18399 wdaRequest: Pointer to EXTScan req parameters
18400===========================================================================*/
18401VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18402 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18403{
18404 WDI_Status status = WDI_STATUS_SUCCESS;
18405 tWDA_ReqParams *pWdaParams;
18406
18407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18408 "%s: ", __func__);
18409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18410 if (NULL == pWdaParams)
18411 {
18412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18413 "%s: VOS MEM Alloc Failure", __func__);
18414 VOS_ASSERT(0);
18415 return VOS_STATUS_E_NOMEM;
18416 }
18417 pWdaParams->pWdaContext = pWDA;
18418 pWdaParams->wdaMsgParam = wdaRequest;
18419 pWdaParams->wdaWdiApiMsgParam = NULL;
18420
18421 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18422 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18423 (void *)pWdaParams);
18424 if (IS_WDI_STATUS_FAILURE(status))
18425 {
18426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18427 "Failure to request. Free all the memory " );
18428 vos_mem_free(pWdaParams->wdaMsgParam);
18429 vos_mem_free(pWdaParams);
18430 }
18431 return CONVERT_WDI2VOS_STATUS(status);
18432}
18433
18434/*==========================================================================
18435 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18436
18437 DESCRIPTION
18438 API to send Reset BSSID Hotlist Request to WDI
18439
18440 PARAMETERS
18441 pWDA: Pointer to WDA context
18442 wdaRequest: Pointer to EXTScan req parameters
18443===========================================================================*/
18444VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18445 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18446{
18447 WDI_Status status = WDI_STATUS_SUCCESS;
18448 tWDA_ReqParams *pWdaParams;
18449
18450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18451 "%s:", __func__);
18452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18453 if (NULL == pWdaParams)
18454 {
18455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18456 "%s: VOS MEM Alloc Failure", __func__);
18457 VOS_ASSERT(0);
18458 return VOS_STATUS_E_NOMEM;
18459 }
18460 pWdaParams->pWdaContext = pWDA;
18461 pWdaParams->wdaMsgParam = wdaRequest;
18462 pWdaParams->wdaWdiApiMsgParam = NULL;
18463
18464 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18465 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18466 (void *)pWdaParams);
18467 if (IS_WDI_STATUS_FAILURE(status))
18468 {
18469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18470 "Failure to request. Free all the memory " );
18471 vos_mem_free(pWdaParams->wdaMsgParam);
18472 vos_mem_free(pWdaParams);
18473 }
18474 return CONVERT_WDI2VOS_STATUS(status);
18475}
18476
18477/*==========================================================================
18478 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18479
18480 DESCRIPTION
18481 API to send Set Significant RSSI Change Request to WDI
18482
18483 PARAMETERS
18484 pWDA: Pointer to WDA context
18485 wdaRequest: Pointer to EXTScan req parameters
18486===========================================================================*/
18487VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18488 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18489{
18490 WDI_Status status = WDI_STATUS_SUCCESS;
18491 tWDA_ReqParams *pWdaParams;
18492
18493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18494 "%s: ", __func__);
18495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18496 if (NULL == pWdaParams)
18497 {
18498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18499 "%s: VOS MEM Alloc Failure", __func__);
18500 VOS_ASSERT(0);
18501 return VOS_STATUS_E_NOMEM;
18502 }
18503 pWdaParams->pWdaContext = pWDA;
18504 pWdaParams->wdaMsgParam = wdaRequest;
18505 pWdaParams->wdaWdiApiMsgParam = NULL;
18506
18507 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18508 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18509 (void *)pWdaParams);
18510 if (IS_WDI_STATUS_FAILURE(status))
18511 {
18512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18513 "Failure to request. Free all the memory " );
18514 vos_mem_free(pWdaParams->wdaMsgParam);
18515 vos_mem_free(pWdaParams);
18516 }
18517 return CONVERT_WDI2VOS_STATUS(status);
18518}
18519
18520/*==========================================================================
18521 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18522
18523 DESCRIPTION
18524 API to send Reset Significant RSSI Change Request to WDI
18525
18526 PARAMETERS
18527 pWDA: Pointer to WDA context
18528 wdaRequest: Pointer to EXTScan req parameters
18529===========================================================================*/
18530VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18531 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18532{
18533 WDI_Status status = WDI_STATUS_SUCCESS;
18534 tWDA_ReqParams *pWdaParams;
18535
18536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18537 "%s:", __func__);
18538 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18539 if (NULL == pWdaParams)
18540 {
18541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18542 "%s: VOS MEM Alloc Failure", __func__);
18543 VOS_ASSERT(0);
18544 return VOS_STATUS_E_NOMEM;
18545 }
18546 pWdaParams->pWdaContext = pWDA;
18547 pWdaParams->wdaMsgParam = wdaRequest;
18548 pWdaParams->wdaWdiApiMsgParam = NULL;
18549
18550 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18551 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18552 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18553 (void *)pWdaParams);
18554 if (IS_WDI_STATUS_FAILURE(status))
18555 {
18556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18557 "Failure to request. Free all the memory " );
18558 vos_mem_free(pWdaParams->wdaMsgParam);
18559 vos_mem_free(pWdaParams);
18560 }
18561 return CONVERT_WDI2VOS_STATUS(status);
18562}
18563#endif /* WLAN_FEATURE_EXTSCAN */
18564
Sunil Duttbd736ed2014-05-26 21:19:41 +053018565#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18566
18567/*==========================================================================
18568 FUNCTION WDA_LLStatsSetRspCallback
18569
18570 DESCRIPTION
18571 API to process set link layer statistics response from FW
18572
18573 PARAMETERS
18574 pRsp: Pointer to set link layer statistics response
18575 pUserData: Pointer to user data
18576
18577 RETURN VALUE
18578 NONE
18579
18580===========================================================================*/
18581void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18582{
18583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18584
18585
18586 if (NULL == pWdaParams)
18587 {
18588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18589 "%s: pWdaParams received NULL", __func__);
18590 VOS_ASSERT(0) ;
18591 return ;
18592 }
18593
18594 /* Do not need to send notification to upper layer
18595 * Just free allocated resources */
18596 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18597 {
18598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18599 }
18600 if (pWdaParams->wdaMsgParam != NULL)
18601 {
18602 vos_mem_free(pWdaParams->wdaMsgParam);
18603 }
18604 vos_mem_free(pWdaParams) ;
18605
18606 return;
18607}
18608
18609/*==========================================================================
18610 FUNCTION WDA_ProcessLLStatsSetReq
18611
18612 DESCRIPTION
18613 API to send Set Link Layer Stats request to WDI
18614
18615 PARAMETERS
18616 pWDA: Pointer to WDA context
18617 wdaRequest: Pointer to set Link Layer Stats req parameters
18618===========================================================================*/
18619VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18620 tSirLLStatsSetReq *wdaRequest)
18621{
18622 WDI_Status status = WDI_STATUS_SUCCESS;
18623 tWDA_ReqParams *pWdaParams;
18624
18625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18626 if (NULL == pWdaParams)
18627 {
18628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18629 "%s: VOS MEM Alloc Failure", __func__);
18630 VOS_ASSERT(0);
18631 return VOS_STATUS_E_NOMEM;
18632 }
18633 pWdaParams->pWdaContext = pWDA;
18634 pWdaParams->wdaMsgParam = wdaRequest;
18635 pWdaParams->wdaWdiApiMsgParam = NULL;
18636
18637 status = WDI_LLStatsSetReq((void *)wdaRequest,
18638 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18639 (void *)pWdaParams);
18640 if (IS_WDI_STATUS_FAILURE(status))
18641 {
18642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18643 "Failure to request. Free all the memory " );
18644 vos_mem_free(pWdaParams->wdaMsgParam);
18645 vos_mem_free(pWdaParams);
18646 }
18647 return CONVERT_WDI2VOS_STATUS(status);
18648}
18649
18650/*==========================================================================
18651 FUNCTION WDA_LLStatsGetRspCallback
18652
18653 DESCRIPTION
18654 API to process get link layer statistics response from FW
18655
18656 PARAMETERS
18657 pRsp: Pointer to get link layer statistics response
18658 pUserData: Pointer to user data
18659
18660 RETURN VALUE
18661 NONE
18662
18663===========================================================================*/
18664void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18665{
18666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18667
18668 if (NULL == pWdaParams)
18669 {
18670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18671 "%s: pWdaParams received NULL", __func__);
18672 VOS_ASSERT(0) ;
18673 return ;
18674 }
18675
18676 /* Do not need to send notification to upper layer
18677 * Just free allocated resources */
18678 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18679 {
18680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18681 }
18682 if (pWdaParams->wdaMsgParam != NULL)
18683 {
18684 vos_mem_free(pWdaParams->wdaMsgParam);
18685 }
18686 vos_mem_free(pWdaParams) ;
18687
18688 return;
18689}
18690
18691/*==========================================================================
18692 FUNCTION WDA_ProcessLLStatsGetReq
18693
18694 DESCRIPTION
18695 API to send Get Link Layer Stats request to WDI
18696
18697 PARAMETERS
18698 pWDA: Pointer to WDA context
18699 wdaRequest: Pointer to get Link Layer Stats req parameters
18700===========================================================================*/
18701VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18702 tSirLLStatsGetReq *wdaRequest)
18703{
18704 WDI_Status status = WDI_STATUS_SUCCESS;
18705 tWDA_ReqParams *pWdaParams;
18706
18707 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18708 if (NULL == pWdaParams)
18709 {
18710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18711 "%s: VOS MEM Alloc Failure", __func__);
18712 VOS_ASSERT(0);
18713 return VOS_STATUS_E_NOMEM;
18714 }
18715 pWdaParams->pWdaContext = pWDA;
18716 pWdaParams->wdaMsgParam = wdaRequest;
18717 pWdaParams->wdaWdiApiMsgParam = NULL;
18718
18719 status = WDI_LLStatsGetReq((void *) wdaRequest,
18720 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18721 (void *)pWdaParams);
18722 if (IS_WDI_STATUS_FAILURE(status))
18723 {
18724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18725 "Failure to request. Free all the memory " );
18726 vos_mem_free(pWdaParams->wdaMsgParam);
18727 vos_mem_free(pWdaParams);
18728 }
18729 return CONVERT_WDI2VOS_STATUS(status);
18730}
18731
18732/*==========================================================================
18733 FUNCTION WDA_LLStatsClearRspCallback
18734
18735 DESCRIPTION
18736 API to process clear link layer statistics response from FW
18737
18738 PARAMETERS
18739 pRsp: Pointer to clear link layer statistics response
18740 pUserData: Pointer to user data
18741
18742 RETURN VALUE
18743 NONE
18744
18745===========================================================================*/
18746void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18747{
18748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18749
18750
18751 if (NULL == pWdaParams)
18752 {
18753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18754 "%s: pWdaParams received NULL", __func__);
18755 VOS_ASSERT(0) ;
18756 return ;
18757 }
18758 /* Do not need to send notification to upper layer
18759 * Just free allocated resources */
18760 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18761 {
18762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18763 }
18764 if (pWdaParams->wdaMsgParam != NULL)
18765 {
18766 vos_mem_free(pWdaParams->wdaMsgParam);
18767 }
18768 vos_mem_free(pWdaParams) ;
18769 return;
18770}
18771
18772/*==========================================================================
18773 FUNCTION WDA_ProcessLLStatsClearReq
18774
18775 DESCRIPTION
18776 API to send Clear Link Layer Stats request to WDI
18777
18778 PARAMETERS
18779 pWDA: Pointer to WDA context
18780 wdaRequest: Pointer to earLink Layer Stats req
18781===========================================================================*/
18782VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18783 tSirLLStatsClearReq *wdaRequest)
18784{
18785 WDI_Status status = WDI_STATUS_SUCCESS;
18786 tWDA_ReqParams *pWdaParams;
18787
18788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18789 if (NULL == pWdaParams)
18790 {
18791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18792 "%s: VOS MEM Alloc Failure", __func__);
18793 VOS_ASSERT(0);
18794 return VOS_STATUS_E_NOMEM;
18795 }
18796 pWdaParams->pWdaContext = pWDA;
18797 pWdaParams->wdaMsgParam = wdaRequest;
18798 pWdaParams->wdaWdiApiMsgParam = NULL;
18799
18800 status = WDI_LLStatsClearReq((void *) wdaRequest,
18801 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18802 (void *)pWdaParams);
18803 if (IS_WDI_STATUS_FAILURE(status))
18804 {
18805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18806 "Failure to request. Free all the memory " );
18807 vos_mem_free(pWdaParams->wdaMsgParam);
18808 vos_mem_free(pWdaParams);
18809 }
18810 return CONVERT_WDI2VOS_STATUS(status);
18811}
18812
18813#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018814
Abhishek Singh85b74712014-10-08 11:38:19 +053018815void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18816{
18817 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18818
18819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18820 "<------ %s " ,__func__);
18821 if (NULL == fwStatsinfo)
18822 {
18823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18824 "%s: pWdaParams received NULL", __func__);
18825 VOS_ASSERT(0);
18826 return;
18827 }
18828
18829 if(fwStatsinfo->callback)
18830 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18831
18832 vos_mem_free(pUserData);
18833 return;
18834}
18835
18836
18837v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18838 tSirFWStatsGetReq *pData)
18839{
18840
18841 WDI_Status wdiStatus;
18842 tSirFWStatsInfo *fwStatsinfo;
18843
18844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18845 "------> %s" , __func__);
18846
18847 fwStatsinfo =
18848 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18849 if (NULL == fwStatsinfo)
18850 {
18851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18852 "%s: VOS MEM Alloc Failure", __func__);
18853 VOS_ASSERT(0);
18854 vos_mem_free(pData);
18855 return;
18856 }
18857
18858 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18859 fwStatsinfo->data = pData->data;
18860
18861 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18862 WDA_FWStatsGetRspCallback,
18863 pData->stats);
18864 if (WDI_STATUS_PENDING == wdiStatus)
18865 {
18866 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18867 "Pending received for %s:%d ", __func__, __LINE__);
18868 }
18869 else if (WDI_STATUS_SUCCESS != wdiStatus)
18870 {
18871 if (fwStatsinfo->callback)
18872 {
18873 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18874 }
18875 vos_mem_free(fwStatsinfo);
18876 }
18877 vos_mem_free(pData);
18878}
18879
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018880/*==========================================================================
18881 FUNCTION WDA_EncryptMsgRspCallback
18882
18883 DESCRIPTION
18884 API to send Encrypt message response to HDD
18885
18886 PARAMETERS
18887 pEventData: Response from FW
18888 pUserData: Data sent to firmware as part of request
18889===========================================================================*/
18890void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18891 void* pUserData)
18892{
18893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18894 tWDA_CbContext *pWDA = NULL;
18895 tpAniSirGlobal pMac;
18896 vos_msg_t vosMsg;
18897 tpSirEncryptedDataRspParams pEncRspParams;
18898 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18899
18900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18901 FL("%s:"), __func__);
18902 if (NULL == pWdaParams)
18903 {
18904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18905 FL("%s: pWdaParams received NULL"), __func__);
18906 VOS_ASSERT(0);
18907 return;
18908 }
18909
18910 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18911
18912 if (NULL == pWDA)
18913 {
18914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18915 FL("%s: pWDA received NULL"), __func__);
18916 VOS_ASSERT(0);
18917 goto error;
18918 }
18919
18920 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18921 if (NULL == pMac)
18922 {
18923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18924 FL("%s:pMac is NULL"), __func__);
18925 VOS_ASSERT(0);
18926 goto error;
18927 }
18928
18929 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18930
18931 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18932 if (NULL == pEncRspParams)
18933 {
18934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18935 FL("%s: VOS MEM Alloc Failure"), __func__);
18936 VOS_ASSERT(0);
18937 goto error;
18938 }
18939
18940 /* Message Header */
18941 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18942 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18943 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18944 pEncryptedDataRsp->encryptedPayload.length;
18945 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18946 pEncryptedDataRsp->encryptedPayload.data,
18947 pEncryptedDataRsp->encryptedPayload.length);
18948
18949 /* VOS message wrapper */
18950 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18951 vosMsg.bodyptr = (void *)pEncRspParams;
18952 vosMsg.bodyval = 0;
18953
18954 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18955 {
18956 /* free the mem */
18957 vos_mem_free((v_VOID_t *) pEncRspParams);
18958 }
18959
18960error:
18961
18962 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18963 {
18964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18965 }
18966 if (pWdaParams->wdaMsgParam != NULL)
18967 {
18968 vos_mem_free(pWdaParams->wdaMsgParam);
18969 }
18970 vos_mem_free(pWdaParams) ;
18971
18972 return;
18973}
18974/*==========================================================================
18975 FUNCTION WDA_ProcessEncryptMsgReq
18976
18977 DESCRIPTION
18978 API to send Encrypt message Request to WDI
18979
18980 PARAMETERS
18981 pWDA: Pointer to WDA context
18982 wdaRequest: Pointer to Encrypt_msg req parameters
18983===========================================================================*/
18984VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18985 u8 *wdaRequest)
18986{
18987 WDI_Status status = WDI_STATUS_SUCCESS;
18988 tWDA_ReqParams *pWdaParams;
18989
18990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18991 FL("%s: "), __func__);
18992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18993 if (NULL == pWdaParams)
18994 {
18995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18996 FL("%s: VOS MEM Alloc Failure"), __func__);
18997 VOS_ASSERT(0);
18998 return VOS_STATUS_E_NOMEM;
18999 }
19000 pWdaParams->pWdaContext = pWDA;
19001 pWdaParams->wdaMsgParam = wdaRequest;
19002 pWdaParams->wdaWdiApiMsgParam = NULL;
19003
19004 status = WDI_EncryptMsgReq((void *)wdaRequest,
19005 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
19006 (void *)pWdaParams);
19007 if (IS_WDI_STATUS_FAILURE(status))
19008 {
19009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19010 FL("Failure to request. Free all the memory " ));
19011 vos_mem_free(pWdaParams->wdaMsgParam);
19012 vos_mem_free(pWdaParams);
19013 }
19014 return CONVERT_WDI2VOS_STATUS(status);
19015}
Abhishek Singh41988ba2015-05-25 19:42:29 +053019016/*==========================================================================
19017 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
19018
19019 DESCRIPTION
19020 API to enable/disable RTS/CTS for different modes.
19021
19022 PARAMETERS
19023 pWDA: Pointer to WDA context
19024 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
19025===========================================================================*/
19026
19027VOS_STATUS
19028WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
19029 tANI_U32 rtsCtsVal)
19030{
19031 WDI_Status status;
19032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19033 FL("---> %s"), __func__);
19034 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
19035 if (WDI_STATUS_PENDING == status)
19036 {
19037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19038 FL("pending status received "));
19039 }
19040 else if (WDI_STATUS_SUCCESS_SYNC != status)
19041 {
19042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19043 FL("Failure status %d"), status);
19044 }
19045 return CONVERT_WDI2VOS_STATUS(status) ;
19046}