blob: 6718d9da09f4b482ad9ab3d3b71957e30788cab2 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05302 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
88#define IS_WDI_STATUS_FAILURE(status) \
89 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070090#define CONVERT_WDI2VOS_STATUS(x) \
91 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
92
93/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070094#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define WDA_GET_BA_TXFLAG(a, b, c) \
97 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
98
99#define WDA_SET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
101
102#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
105 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700106/* timer related Macros */
107#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
108 tx_timer_create(a, b, c, d, e, f, g)
109#define WDA_START_TIMER(a) tx_timer_activate(a)
110#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
111#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700112#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113
114#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
115 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800120#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700121
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700122#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700125#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
126 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
127 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
128
129#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
130#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800131#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
132
Jeff Johnson295189b2012-06-20 16:38:30 -0700133/* extern declarations */
134extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700135extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
136
Jeff Johnson295189b2012-06-20 16:38:30 -0700137/* forward declarations */
138void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
139 void *pBodyptr, tANI_U32 bodyVal) ;
140VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
141 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700142VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
143VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
144
145extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
146 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530147void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700148void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
149 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
150void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
151 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
152void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
153 void* pUserData ) ;
154static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
155static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
156void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800157void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700158void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700159#ifdef WLAN_FEATURE_VOWIFI_11R
160VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
161#endif /* WLAN_FEATURE_VOWIFI_11R */
162
Jeff Johnson295189b2012-06-20 16:38:30 -0700163void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
164void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
165VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef FEATURE_WLAN_SCAN_PNO
167static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
168static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
169static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
170#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700171#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700172VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700173void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
174void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
175void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
176#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700177#ifdef WLAN_FEATURE_PACKET_FILTERING
178static VOS_STATUS WDA_Process8023MulticastListReq (
179 tWDA_CbContext *pWDA,
180 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
181 );
182static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
183 tWDA_CbContext *pWDA,
184 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
185 );
186static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
187 tWDA_CbContext *pWDA,
188 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
189 );
190static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
191 tWDA_CbContext *pWDA,
192 tSirRcvFltPktClearParam *pRcvFltPktClearParam
193 );
194#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700195VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700196static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
197 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
199 v_U8_t *pDefaultKeyId,
200 v_U8_t *pNumKeys,
201 WDI_KeysType *pWdiKeys );
202
203#ifdef WLAN_FEATURE_GTK_OFFLOAD
204static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
205static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
206#endif // WLAN_FEATURE_GTK_OFFLOAD
207
c_hpothu92367912014-05-01 15:18:17 +0530208v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
209 tSirBcnMissRateReq *pData);
210
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530222
Dino Mycle41bdc942014-06-10 11:30:24 +0530223#ifdef WLAN_FEATURE_EXTSCAN
224VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
225 tSirEXTScanStartReqParams *wdaRequest);
226VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
227 tSirEXTScanStopReqParams *wdaRequest);
228VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
229 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
230VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
231 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
232VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
233 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
234VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
235 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530236VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
237 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
239 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530240VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
241 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#endif /* WLAN_FEATURE_EXTSCAN */
243
Sunil Duttbd736ed2014-05-26 21:19:41 +0530244#ifdef WLAN_FEATURE_LINK_LAYER_STATS
245VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
246 tSirLLStatsSetReq *wdaRequest);
247
248VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
249 tSirLLStatsGetReq *wdaRequest);
250
251VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
252 tSirLLStatsClearReq *wdaRequest);
253#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530254
255v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
256 tSirFWStatsGetReq *wdaRequest);
257
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530258VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
259 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530260VOS_STATUS
261WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
262 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530263
c_manjeecfd1efb2015-09-25 19:32:34 +0530264VOS_STATUS
265WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
266 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530267
Katya Nigamf0511f62015-05-05 16:40:57 +0530268VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
269VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530270VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530271
272VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
273 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530274
275VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
276 tOemDataReqNewConfig *pOemDataReqNewConfig);
277
Srinivas Dasari32a79262015-02-19 13:04:49 +0530278/*
279 * FUNCTION: WDA_ProcessNanRequest
280 * Process NAN request
281 */
282VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
283 tNanRequest *wdaRequest)
284{
285 WDI_Status status = WDI_STATUS_SUCCESS;
286 tWDA_ReqParams *pWdaParams;
287 WDI_NanRequestType *wdiRequest = NULL;
288 size_t wdiReqLength = sizeof(WDI_NanRequestType)
289 - sizeof(wdiRequest->request_data)
290 + wdaRequest->request_data_len;
291
292 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
293
294 if (NULL == wdiRequest)
295 {
296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
297 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
298 wdiReqLength);
299 vos_mem_free(wdaRequest);
300 return VOS_STATUS_E_NOMEM;
301 }
302
303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
304 "WDA: Process Nan Request length: %zu", wdiReqLength);
305
306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
307 if (NULL == pWdaParams)
308 {
309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
310 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
311 VOS_ASSERT(0);
312 vos_mem_free(wdaRequest);
313 vos_mem_free(wdiRequest);
314 return VOS_STATUS_E_NOMEM;
315 }
316
317 wdiRequest->request_data_len = wdaRequest->request_data_len;
318
319 vos_mem_copy( wdiRequest->request_data,
320 wdaRequest->request_data,
321 wdaRequest->request_data_len);
322
323 vos_mem_free(wdaRequest);
324
325 pWdaParams->pWdaContext = pWDA;
326 pWdaParams->wdaMsgParam = NULL;
327 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
328
329 status = WDI_NanRequest(wdiRequest, pWdaParams);
330
331 if (IS_WDI_STATUS_FAILURE(status))
332 {
333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
334 "Failure to request. Free all the memory " );
335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
336 vos_mem_free(pWdaParams);
337 }
338
339 return CONVERT_WDI2VOS_STATUS(status) ;
340}
341
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530342/**
343 * wda_state_info_dump() - prints state information of wda layer
344 */
345static void wda_state_info_dump(void)
346{
347 v_CONTEXT_t vos_ctx_ptr = NULL;
348 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530349
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
351 "<------ %s " ,__func__);
352
353 /* Get the Global VOSS Context */
354 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
355
356 if (NULL != vos_ctx_ptr)
357 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
358 vos_ctx_ptr );
359 else {
360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
361 "%s: Invalid Global VOSS Context", __func__);
362 VOS_ASSERT(0);
363 return;
364 }
365
366 if (NULL != wda)
367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
368 "wdaState: %d linkState: %d", wda->wdaState,
369 wda->linkState);
370 else {
371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
372 "%s: Invalid WDA Context", __func__);
373 VOS_ASSERT(0);
374 }
375}
376
377/**
378 * wda_register_debug_callback() - registration function for wda layer
379 * to print wda state information
380 */
381static void wda_register_debug_callback(void)
382{
383 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
384}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530385
Jeff Johnson295189b2012-06-20 16:38:30 -0700386/*
387 * FUNCTION: WDA_open
388 * Allocate the WDA context
389 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530390VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 tMacOpenParameters *pMacParams )
392{
393 tWDA_CbContext *wdaContext;
394 VOS_STATUS status;
395 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530397 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
399 if(!VOS_IS_STATUS_SUCCESS(status))
400 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
402 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 return VOS_STATUS_E_NOMEM;
404 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700405 /*__asm int 3;*/
406 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
407
408 /* Initialize data structures */
409 wdaContext->pVosContext = pVosContext;
410 wdaContext->wdaState = WDA_INIT_STATE;
411 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
412
413 /* Initialize WDA-WDI synchronization event */
414 status = vos_event_init(&wdaContext->wdaWdiEvent);
415 if(!VOS_IS_STATUS_SUCCESS(status))
416 {
417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800418 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800419 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700420 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Init Frame transfer event */
422 status = vos_event_init(&wdaContext->txFrameEvent);
423 if(!VOS_IS_STATUS_SUCCESS(status))
424 {
425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800426 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800427 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 status = vos_event_init(&wdaContext->suspendDataTxEvent);
430 if(!VOS_IS_STATUS_SUCCESS(status))
431 {
432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800433 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800434 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
437 if(!VOS_IS_STATUS_SUCCESS(status))
438 {
439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800440 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800441 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530445 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 &wdiDevCapability, pMacParams->driverType))
447 {
448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
449 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800450 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 }
452 else
453 {
454 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
455 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
456 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* update max STA in WDA used for BA */
458 wdaContext->wdaMaxSta = pMacParams->maxStation;
459 /* store the frameTransRequired flag in wdaContext, to send this to HAL
460 * in WDA_Start
461 */
462 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
463 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530464
465 wda_register_debug_callback();
466
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800468
469error:
470 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
471 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700472}
473
Jeff Johnson295189b2012-06-20 16:38:30 -0700474/*
475 * FUNCTION: WDA_preStart
476 * Trigger DAL-AL to start CFG download
477 */
478VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
479{
480 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
481 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /*
483 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
484 */
485 wdaMsg.type = WNI_CFG_DNLD_REQ ;
486 wdaMsg.bodyptr = NULL;
487 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700488 /* post the message.. */
489 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
490 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
491 {
492 vosStatus = VOS_STATUS_E_BADMSG;
493 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return( vosStatus );
495}
Jeff Johnson295189b2012-06-20 16:38:30 -0700496/*
497 * FUNCTION: WDA_wdiStartCallback
498 * Once WDI_Start is finished, WDI start callback will be called by WDI
499 * to indicate completion of WDI_Start.
500 */
501void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
502 void *pVosContext)
503{
504 tWDA_CbContext *wdaContext;
505 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 if (NULL == pVosContext)
507 {
508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700509 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700510 return;
511 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
513 if (NULL == wdaContext)
514 {
515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700516 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 return;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 }
524 else
525 {
526 wdaContext->wdaState = WDA_START_STATE;
527 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 /* extract and save version information from the Start Response */
529 wdaContext->wcnssWlanCompiledVersion.major =
530 wdiRspParams->wlanCompiledVersion.major;
531 wdaContext->wcnssWlanCompiledVersion.minor =
532 wdiRspParams->wlanCompiledVersion.minor;
533 wdaContext->wcnssWlanCompiledVersion.version =
534 wdiRspParams->wlanCompiledVersion.version;
535 wdaContext->wcnssWlanCompiledVersion.revision =
536 wdiRspParams->wlanCompiledVersion.revision;
537 wdaContext->wcnssWlanReportedVersion.major =
538 wdiRspParams->wlanReportedVersion.major;
539 wdaContext->wcnssWlanReportedVersion.minor =
540 wdiRspParams->wlanReportedVersion.minor;
541 wdaContext->wcnssWlanReportedVersion.version =
542 wdiRspParams->wlanReportedVersion.version;
543 wdaContext->wcnssWlanReportedVersion.revision =
544 wdiRspParams->wlanReportedVersion.revision;
545 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
546 wdiRspParams->wcnssSoftwareVersion,
547 sizeof(wdaContext->wcnssSoftwareVersionString));
548 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
549 wdiRspParams->wcnssHardwareVersion,
550 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* Notify WDA_start that WDI_Start has completed */
552 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700553 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700556 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700558 return;
559}
560
Jeff Johnson295189b2012-06-20 16:38:30 -0700561/*
562 * FUNCTION: WDA_start
563 * Prepare TLV configuration and call WDI_Start.
564 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700565VOS_STATUS WDA_start(v_PVOID_t pVosContext)
566{
567 tWDA_CbContext *wdaContext;
568 VOS_STATUS status;
569 WDI_Status wdiStatus;
570 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 if (NULL == pVosContext)
572 {
573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700574 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 return VOS_STATUS_E_FAILURE;
576 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
578 if (NULL == wdaContext)
579 {
580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700581 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 return VOS_STATUS_E_FAILURE;
583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 /* Non-FTM mode, WDA status for START must be INIT
585 * FTM mode, WDA Status for START can be INIT or STOP */
586 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
587 (WDA_STOP_STATE != wdaContext->wdaState) )
588 {
589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
590 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700591 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 return VOS_STATUS_E_FAILURE;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 /* initialize the wdiStartParam. Note that we can create this on
595 the stack since we won't exit until WDI_Start() completes or
596 times out */
597 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 /* prepare the config TLV for the WDI */
600 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
601 if ( !VOS_IS_STATUS_SUCCESS(status) )
602 {
603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700604 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 return VOS_STATUS_E_FAILURE;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* note from here onwards if an error occurs we must
608 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
610 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
611 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* initialize the WDA-WDI synchronization event */
613 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700614 /* call WDI start */
615 wdiStatus = WDI_Start(&wdiStartParam,
616 (WDI_StartRspCb)WDA_wdiStartCallback,
617 (v_VOID_t *)pVosContext);
618 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
619 {
620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700621 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 vos_mem_free(wdiStartParam.pConfigBuffer);
623 return VOS_STATUS_E_FAILURE;
624 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* wait for WDI start to invoke our callback */
626 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
627 WDA_WDI_START_TIMEOUT );
628 if ( !VOS_IS_STATUS_SUCCESS(status) )
629 {
630 if ( VOS_STATUS_E_TIMEOUT == status )
631 {
632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700633 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 }
635 else
636 {
637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
638 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700639 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 }
641 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530642 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 /* we no longer need the config TLV */
646 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 /* if we are not in the START state then WDI_Start() failed */
648 if (WDA_START_STATE != wdaContext->wdaState)
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700651 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 return VOS_STATUS_E_FAILURE;
653 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 /* FTM mode does not need to monitor BA activity */
655 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
656 {
657 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800658 if(VOS_STATUS_SUCCESS == status)
659 {
660 wdaContext->wdaTimersCreated = VOS_TRUE;
661 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530662 else
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 FL("wda create timers failed"));
666 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 }
Leo Chang9d76f622013-08-23 16:34:52 -0700668 else
669 {
670 vos_event_init(&wdaContext->ftmStopDoneEvent);
671 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 return status;
673}
674
Jeff Johnson295189b2012-06-20 16:38:30 -0700675/*
676 * FUNCTION: WDA_prepareConfigTLV
677 * Function to prepare CFG for DAL(WDA)
678 */
679VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
680 WDI_StartReqParamsType *wdiStartParams )
681{
682 /* get pMac to acess CFG data base */
683 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
684 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
685 tHalCfg *tlvStruct = NULL ;
686 tANI_U8 *tlvStructStart = NULL ;
687 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
688 v_PVOID_t *configParam;
689 tANI_U32 configParamSize;
690 tANI_U32 *configDataValue;
691 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700692 tANI_U8 i;
693
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 if ((NULL == pMac)||(NULL == wdaContext))
695 {
696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700697 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 VOS_ASSERT(0);
699 return VOS_STATUS_E_FAILURE;
700 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
702 WNI_CFG_STA_ID_LEN +
703 WNI_CFG_EDCA_WME_ACBK_LEN +
704 WNI_CFG_EDCA_WME_ACBE_LEN +
705 WNI_CFG_EDCA_WME_ACVI_LEN +
706 WNI_CFG_EDCA_WME_ACVO_LEN +
707 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 /* malloc memory for all configs in one shot */
709 configParam = vos_mem_malloc(configParamSize);
710
711 if(NULL == configParam )
712 {
713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700714 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700715 VOS_ASSERT(0) ;
716 return VOS_STATUS_E_NOMEM;
717 }
718 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)configParam;
721 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* TODO: Remove Later */
723 /* QWLAN_HAL_CFG_STA_ID */
724 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
725 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
726 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_STA_ID");
731 goto handle_failure;
732 }
733 tlvStruct->length = strLength ;
734 /* calculate the pad bytes to have the CFG in aligned format */
735 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
736 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
738 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700739 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
740 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
741 tlvStruct->length = sizeof(tANI_U32);
742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
743 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
744 != eSIR_SUCCESS)
745 {
746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
747 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
748 goto handle_failure;
749 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
751 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700752 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
753 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
754 tlvStruct->length = sizeof(tANI_U32);
755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
756 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
757 eSIR_SUCCESS)
758 {
759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
760 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
761 goto handle_failure;
762 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
766 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
770 != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
778
779 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
780 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
781 tlvStruct->length = sizeof(tANI_U32);
782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
783 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
784 configDataValue ) != eSIR_SUCCESS)
785 {
786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
787 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
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_CAL_PERIOD */
793 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
797 != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_CAL_PERIOD");
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_CAL_CONTROL */
806 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
810 != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_CAL_CONTROL");
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_PROXIMITY */
819 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_PROXIMITY");
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_NETWORK_DENSITY */
832 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
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_MAX_MEDIUM_TIME */
845 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
849 eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
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_MAX_MPDUS_IN_AMPDU */
858 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
871 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
875 eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
884 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
888 eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
897 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
910 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
923 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length));
935
936 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
937 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
950 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length));
962
963 /* QWLAN_HAL_CFG_FIXED_RATE */
964 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
968 != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_FIXED_RATE");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length));
976
977 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
978 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
979 tlvStruct->length = sizeof(tANI_U32);
980 configDataValue = (tANI_U32 *)(tlvStruct + 1);
981 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
982 != eSIR_SUCCESS)
983 {
984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
985 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
986 goto handle_failure;
987 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
989 + sizeof(tHalCfg) + tlvStruct->length));
990
991 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
992 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
996 configDataValue ) != eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1005 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1009 configDataValue ) != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1013 goto handle_failure;
1014 }
1015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1018 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1031 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1039 goto handle_failure;
1040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1044 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
1056
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1058 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1059 tlvStruct->length = sizeof(tANI_U32);
1060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1061 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1062 configDataValue ) != eSIR_SUCCESS)
1063 {
1064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1065 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1066 goto handle_failure;
1067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1071 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1072 tlvStruct->length = sizeof(tANI_U32);
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1075 configDataValue ) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1079 goto handle_failure;
1080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1082 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1084 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1088 eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
1096
1097 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1098 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1099 tlvStruct->length = sizeof(tANI_U32);
1100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1101 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1102 configDataValue ) != eSIR_SUCCESS)
1103 {
1104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1105 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1106 goto handle_failure;
1107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001108 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1109 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001110 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1111 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1112 tlvStruct->length = sizeof(tANI_U32);
1113 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1114 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1115 configDataValue ) != eSIR_SUCCESS)
1116 {
1117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1118 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1119 goto handle_failure;
1120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1122 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001123 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1137 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
1149
1150 /* QWLAN_HAL_CFG_STATS_PERIOD */
1151 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1155 eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_STATS_PERIOD");
1159 goto handle_failure;
1160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1164 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1168 eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1172 goto handle_failure;
1173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1177 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1181 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1185 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1193 goto handle_failure;
1194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1198 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1199 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1202 &strLength) != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1206 goto handle_failure;
1207 }
1208 tlvStruct->length = strLength;
1209 /* calculate the pad bytes to have the CFG in aligned format */
1210 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1211 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001212 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1213 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001214 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1215 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1216 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1217 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1218 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1219 &strLength) != eSIR_SUCCESS)
1220 {
1221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1222 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1223 goto handle_failure;
1224 }
1225 tlvStruct->length = strLength;
1226 /* calculate the pad bytes to have the CFG in aligned format */
1227 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1228 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001229 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1230 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1232 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1233 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1234 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1235 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1236 &strLength) != eSIR_SUCCESS)
1237 {
1238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1239 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1240 goto handle_failure;
1241 }
1242 tlvStruct->length = strLength;
1243 /* calculate the pad bytes to have the CFG in aligned format */
1244 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1245 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1249 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1250 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1253 &strLength) != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1257 goto handle_failure;
1258 }
1259 tlvStruct->length = strLength;
1260 /* calculate the pad bytes to have the CFG in aligned format */
1261 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1262 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1266 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1270 != eSIR_SUCCESS)
1271 {
1272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1273 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1274 goto handle_failure;
1275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1279 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1283 != eSIR_SUCCESS)
1284 {
1285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1286 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1287 goto handle_failure;
1288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1292 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1305 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1313 goto handle_failure;
1314 }
1315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1318 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1326 goto handle_failure;
1327 }
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1370 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1378 goto handle_failure;
1379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1383 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1391 goto handle_failure;
1392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1396 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1409 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1410 * into FW, so the parameters are added here.
1411 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001412 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1413 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1414 tlvStruct->length = sizeof(tANI_U32);
1415 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1416 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1420 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1421 tlvStruct->length = sizeof(tANI_U32);
1422 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1423 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1425 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1427 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1431 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1432 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001433 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1434 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1435 tlvStruct->length = sizeof(tANI_U32);
1436 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1437 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1438 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1439 + sizeof(tHalCfg) + tlvStruct->length) ;
1440
1441 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1442 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1443 tlvStruct->length = sizeof(tANI_U32);
1444 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1445 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1446 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1447 + sizeof(tHalCfg) + tlvStruct->length) ;
1448
1449 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1450 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1451 tlvStruct->length = sizeof(tANI_U32);
1452 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1453 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1454 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1455 + sizeof(tHalCfg) + tlvStruct->length) ;
1456
1457 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1458 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
1465 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1466 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1470 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1471 + sizeof(tHalCfg) + tlvStruct->length) ;
1472
1473 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1474 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1475 tlvStruct->length = sizeof(tANI_U32);
1476 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1477 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
1481 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1482 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1486 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1487 + sizeof(tHalCfg) + tlvStruct->length) ;
1488
1489 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1490 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1491 tlvStruct->length = sizeof(tANI_U32);
1492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1493 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1494 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1495 + sizeof(tHalCfg) + tlvStruct->length) ;
1496
1497 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1498 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1499 tlvStruct->length = sizeof(tANI_U32);
1500 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1501 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1506 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512
1513 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1514 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1515 tlvStruct->length = sizeof(tANI_U32);
1516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1517 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
1521 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1522 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
1528
1529 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1530 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1531 tlvStruct->length = sizeof(tANI_U32);
1532 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1533 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1534 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1535 + sizeof(tHalCfg) + tlvStruct->length) ;
1536
Wilson Tsaof8b37942013-09-06 10:49:00 -07001537 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1538 {
1539 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1540 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1548 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1556 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562
1563 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1564 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1565 tlvStruct->length = sizeof(tANI_U32);
1566 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1567 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1568 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1569 + sizeof(tHalCfg) + tlvStruct->length) ;
1570 }
1571
1572 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1573 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1574 tlvStruct->length = sizeof(tANI_U32);
1575 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1576 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1577 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1578 + sizeof(tHalCfg) + tlvStruct->length) ;
1579
1580 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1581 {
1582 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1583 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1587 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1588 + sizeof(tHalCfg) + tlvStruct->length) ;
1589 }
1590
1591 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1592 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1593 tlvStruct->length = sizeof(tANI_U32);
1594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1595 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
1598
Jeff Johnson32d95a32012-09-10 13:15:23 -07001599 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1601 tlvStruct->length = sizeof(tANI_U32);
1602 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1603 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1604 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1605 wcnssCompiledApiVersion.minor,
1606 wcnssCompiledApiVersion.version,
1607 wcnssCompiledApiVersion.revision);
1608 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1609 + sizeof(tHalCfg) + tlvStruct->length) ;
1610
Jeff Johnsond13512a2012-07-17 11:42:19 -07001611 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1612 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
1625 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1626 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1630 configDataValue ) != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1634 goto handle_failure;
1635 }
1636
1637 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length) ;
1639
1640 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1641 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1645 != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1649 goto handle_failure;
1650 }
1651
1652 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1653 + sizeof(tHalCfg) + tlvStruct->length) ;
1654
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001655 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1656 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1657 tlvStruct->length = sizeof(tANI_U32);
1658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1659 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1660 != eSIR_SUCCESS)
1661 {
1662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1663 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1664 goto handle_failure;
1665 }
1666
1667 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1668 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001669#ifdef WLAN_SOFTAP_VSTA_FEATURE
1670 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1674 != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1678 goto handle_failure;
1679 }
1680
1681 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1682 + sizeof(tHalCfg) + tlvStruct->length) ;
1683#endif
1684
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001685 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1686 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1687 tlvStruct->length = sizeof(tANI_U32);
1688 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1689
1690 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1691 != eSIR_SUCCESS)
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1695 goto handle_failure;
1696 }
1697
1698 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1699 + sizeof(tHalCfg) + tlvStruct->length) ;
1700
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301701/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1702 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1703 tlvStruct->length = sizeof(tANI_U32);
1704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1705 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1706 configDataValue ) != eSIR_SUCCESS)
1707 {
1708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1709 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1710 goto handle_failure;
1711 }
1712
1713 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1714 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301715#ifdef FEATURE_WLAN_TDLS
1716 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1717 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1718 tlvStruct->length = sizeof(tANI_U32);
1719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1720 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1721 configDataValue ) != eSIR_SUCCESS)
1722 {
1723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1724 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1725 goto handle_failure;
1726 }
1727 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1728 + sizeof(tHalCfg) + tlvStruct->length) ;
1729
1730 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1731 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1732 tlvStruct->length = sizeof(tANI_U32);
1733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1734 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1735 configDataValue ) != eSIR_SUCCESS)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1739 goto handle_failure;
1740 }
1741 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1742 + sizeof(tHalCfg) + tlvStruct->length) ;
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1757 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301769 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1770 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
1782
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301783#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301784
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001785 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1786 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1787 tlvStruct->length = sizeof(tANI_U32);
1788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1789 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1790 configDataValue ) != eSIR_SUCCESS)
1791 {
1792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1793 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1794 goto handle_failure;
1795 }
1796
1797 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1798 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001799
1800 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1801 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1802 tlvStruct->length = sizeof(tANI_U32);
1803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1804 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1805 != eSIR_SUCCESS)
1806 {
1807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1809 goto handle_failure;
1810 }
1811 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1812 + sizeof(tHalCfg) + tlvStruct->length));
1813
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301814 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1815 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1816 tlvStruct->length = sizeof(tANI_U32);
1817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1818 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1823 goto handle_failure;
1824 }
1825
1826 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1827 + sizeof(tHalCfg) + tlvStruct->length) ;
1828
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301829 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1830 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1831 tlvStruct->length = sizeof(tANI_U32);
1832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1833 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301843 /* QWLAN_HAL_CFG_ATH_DISABLE */
1844 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1848 configDataValue ) != eSIR_SUCCESS)
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1851 "Failed to get value for WNI_CFG_ATH_DISABLE");
1852 goto handle_failure;
1853 }
1854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1855 + sizeof(tHalCfg) + tlvStruct->length) ;
1856
c_hpothu6d7dc922013-12-02 12:36:41 +05301857 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1858 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1859 tlvStruct->length = sizeof(tANI_U32);
1860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1861 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1862 configDataValue ) != eSIR_SUCCESS)
1863 {
1864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1865 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1866 goto handle_failure;
1867 }
1868 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1869 + sizeof(tHalCfg) + tlvStruct->length) ;
1870
1871 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1872 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1873 tlvStruct->length = sizeof(tANI_U32);
1874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1875 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1876 configDataValue ) != eSIR_SUCCESS)
1877 {
1878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1879 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1880 goto handle_failure;
1881 }
1882 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1883 + sizeof(tHalCfg) + tlvStruct->length) ;
1884
1885 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1886 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1887 tlvStruct->length = sizeof(tANI_U32);
1888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1889 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1890 configDataValue ) != eSIR_SUCCESS)
1891 {
1892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1893 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1894 goto handle_failure;
1895 }
1896 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1897 + sizeof(tHalCfg) + tlvStruct->length) ;
1898
1899 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1900 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1901 tlvStruct->length = sizeof(tANI_U32);
1902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1903 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1904 configDataValue ) != eSIR_SUCCESS)
1905 {
1906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1907 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1908 goto handle_failure;
1909 }
1910 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1911 + sizeof(tHalCfg) + tlvStruct->length) ;
1912
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301913 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1914 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1915 tlvStruct->length = sizeof(tANI_U32);
1916 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1917 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1918 configDataValue ) != eSIR_SUCCESS)
1919 {
1920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1921 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1922 goto handle_failure;
1923 }
1924 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1925 + sizeof(tHalCfg) + tlvStruct->length) ;
1926
1927 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1928 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1929 tlvStruct->length = sizeof(tANI_U32);
1930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1931 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1932 configDataValue ) != eSIR_SUCCESS)
1933 {
1934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1935 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1936 goto handle_failure;
1937 }
1938 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1939 + sizeof(tHalCfg) + tlvStruct->length) ;
1940
1941 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1942 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1943 tlvStruct->length = sizeof(tANI_U32);
1944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1945 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1946 configDataValue ) != eSIR_SUCCESS)
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1950 goto handle_failure;
1951 }
1952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1953 + sizeof(tHalCfg) + tlvStruct->length) ;
1954
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001955 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1956 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1957 tlvStruct->length = sizeof(tANI_U32);
1958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1959 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1960 configDataValue ) != eSIR_SUCCESS)
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1963 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1964 goto handle_failure;
1965 }
1966 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1967 + sizeof(tHalCfg) + tlvStruct->length) ;
1968
c_hpothu5bd1ae42014-03-07 20:28:22 +05301969 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1970 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1971 tlvStruct->length = sizeof(tANI_U32);
1972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1973
1974 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1975 configDataValue ) != eSIR_SUCCESS)
1976 {
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1978 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1979 goto handle_failure;
1980 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1982 + sizeof(tHalCfg) + tlvStruct->length) ;
1983
1984 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1985 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1986 tlvStruct->length = sizeof(tANI_U32);
1987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1988
1989 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1990 configDataValue ) != eSIR_SUCCESS)
1991 {
1992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1993 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1994 goto handle_failure;
1995 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301996 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1997 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301998
c_hpothu2d0f1c42014-04-01 18:38:51 +05301999 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2000 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2001 tlvStruct->length = sizeof(tANI_U32);
2002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2003
2004 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2005 configDataValue ) != eSIR_SUCCESS)
2006 {
2007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2008 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2009 goto handle_failure;
2010 }
2011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2012 + sizeof(tHalCfg) + tlvStruct->length) ;
2013
2014 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2015 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2016 tlvStruct->length = sizeof(tANI_U32);
2017 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2018
2019 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2020 configDataValue ) != eSIR_SUCCESS)
2021 {
2022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2023 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2024 goto handle_failure;
2025 }
2026 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2027 + sizeof(tHalCfg) + tlvStruct->length) ;
2028
2029 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2030 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2031 tlvStruct->length = sizeof(tANI_U32);
2032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2033
2034 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2035 configDataValue ) != eSIR_SUCCESS)
2036 {
2037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2038 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2039 goto handle_failure;
2040 }
2041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2042 + sizeof(tHalCfg) + tlvStruct->length) ;
2043
2044 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2045 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2046 tlvStruct->length = sizeof(tANI_U32);
2047 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2048
2049 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2050 configDataValue ) != eSIR_SUCCESS)
2051 {
2052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2053 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2054 goto handle_failure;
2055 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302056 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2057 + sizeof(tHalCfg) + tlvStruct->length) ;
2058
Mihir Shetec34258c2014-07-30 17:50:27 +05302059 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2060 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2061 tlvStruct->length = sizeof(tANI_U32);
2062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2063
2064 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2065 configDataValue ) != eSIR_SUCCESS)
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2068 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2069 goto handle_failure;
2070 }
2071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2072 + sizeof(tHalCfg) + tlvStruct->length) ;
2073
2074 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2075 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2076 tlvStruct->length = sizeof(tANI_U32);
2077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2078
2079 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2080 configDataValue ) != eSIR_SUCCESS)
2081 {
2082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2083 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2084 goto handle_failure;
2085 }
2086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2087 + sizeof(tHalCfg) + tlvStruct->length) ;
2088
2089 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2090 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2091 tlvStruct->length = sizeof(tANI_U32);
2092 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2093
2094 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2095 configDataValue ) != eSIR_SUCCESS)
2096 {
2097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2098 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2099 goto handle_failure;
2100 }
2101 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2102 + sizeof(tHalCfg) + tlvStruct->length) ;
2103
2104 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2105 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2106 tlvStruct->length = sizeof(tANI_U32);
2107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2108
2109 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2110 configDataValue ) != eSIR_SUCCESS)
2111 {
2112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2113 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2114 goto handle_failure;
2115 }
2116 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2117 + sizeof(tHalCfg) + tlvStruct->length) ;
2118
2119 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2120 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2121 tlvStruct->length = sizeof(tANI_U32);
2122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2123
2124 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2125 configDataValue ) != eSIR_SUCCESS)
2126 {
2127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2128 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2129 goto handle_failure;
2130 }
2131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2132 + sizeof(tHalCfg) + tlvStruct->length) ;
2133
2134 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2135 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2136 tlvStruct->length = sizeof(tANI_U32);
2137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2138
2139 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2140 configDataValue ) != eSIR_SUCCESS)
2141 {
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2143 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2144 goto handle_failure;
2145 }
2146 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2147 + sizeof(tHalCfg) + tlvStruct->length) ;
2148
2149 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2150 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2151 tlvStruct->length = sizeof(tANI_U32);
2152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2153
2154 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2155 configDataValue ) != eSIR_SUCCESS)
2156 {
2157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2158 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2159 goto handle_failure;
2160 }
2161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2162 + sizeof(tHalCfg) + tlvStruct->length) ;
2163
2164 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2165 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2166 tlvStruct->length = sizeof(tANI_U32);
2167 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2168
2169 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2170 configDataValue ) != eSIR_SUCCESS)
2171 {
2172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2173 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2174 goto handle_failure;
2175 }
2176 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2177 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302178
2179 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2180 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2181 tlvStruct->length = sizeof(tANI_U32);
2182 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2183
2184 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2185 configDataValue ) != eSIR_SUCCESS)
2186 {
2187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2188 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2189 goto handle_failure;
2190 }
2191 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2192 + sizeof(tHalCfg) + tlvStruct->length) ;
2193
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302194 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2195 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2196 tlvStruct->length = sizeof(tANI_U32);
2197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2198
2199 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2200 configDataValue ) != eSIR_SUCCESS)
2201 {
2202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2203 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2204 goto handle_failure;
2205 }
2206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2207 + sizeof(tHalCfg) + tlvStruct->length) ;
2208
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302209 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2210 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2211 tlvStruct->length = sizeof(tANI_U32);
2212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2213
2214 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2215 configDataValue ) != eSIR_SUCCESS)
2216 {
2217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2218 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2219 goto handle_failure;
2220 }
2221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2222 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302223
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302224 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2225 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2226 tlvStruct->length = sizeof(tANI_U32);
2227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2228
2229 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2230 configDataValue ) != eSIR_SUCCESS)
2231 {
2232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2233 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2234 goto handle_failure;
2235 }
2236 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2237 + sizeof(tHalCfg) + tlvStruct->length) ;
2238
Sachin Ahuja41b61902015-06-18 18:32:15 +05302239
2240 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2241 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2242 tlvStruct->length = sizeof(tANI_U32);
2243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2244
2245 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2246 configDataValue ) != eSIR_SUCCESS)
2247 {
2248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2249 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2250 goto handle_failure;
2251 }
2252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2253 + sizeof(tHalCfg) + tlvStruct->length) ;
2254
2255 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2256 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2257 tlvStruct->length = sizeof(tANI_U32);
2258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2259
2260 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2261 configDataValue ) != eSIR_SUCCESS)
2262 {
2263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2264 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2265 goto handle_failure;
2266 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302267 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2268 + sizeof(tHalCfg) + tlvStruct->length) ;
2269
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302270 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2271 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2272 tlvStruct->length = sizeof(tANI_U32);
2273 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2274
2275 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2276 configDataValue ) != eSIR_SUCCESS)
2277 {
2278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2279 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2280 goto handle_failure;
2281 }
2282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2283 + sizeof(tHalCfg) + tlvStruct->length) ;
2284
2285 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2286 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2287 tlvStruct->length = sizeof(tANI_U32);
2288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2289
2290 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2291 configDataValue ) != eSIR_SUCCESS)
2292 {
2293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2294 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2295 goto handle_failure;
2296 }
2297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2298 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302299
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302300 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2301 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2302 tlvStruct->length = sizeof(tANI_U32);
2303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2304
2305 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2306 configDataValue ) != eSIR_SUCCESS)
2307 {
2308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2309 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2310 goto handle_failure;
2311 }
2312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2313 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302314 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2315 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2316 tlvStruct->length = sizeof(tANI_U32);
2317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2318 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2319 configDataValue ) != eSIR_SUCCESS)
2320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2322 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2323 goto handle_failure;
2324 }
2325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2326 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302327
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302328 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2329 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2330 tlvStruct->length = sizeof(tANI_U32);
2331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2332
2333 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2334 configDataValue ) != eSIR_SUCCESS)
2335 {
2336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2337 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2338 goto handle_failure;
2339 }
2340 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2341 + sizeof(tHalCfg) + tlvStruct->length) ;
2342
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002344#ifdef WLAN_DEBUG
2345 {
2346 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2348 "****** Dumping CFG TLV ***** ");
2349 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2350 {
2351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2352 "%02x %02x %02x %02x %02x %02x %02x %02x",
2353 tlvStructStart[i],
2354 tlvStructStart[i+1],
2355 tlvStructStart[i+2],
2356 tlvStructStart[i+3],
2357 tlvStructStart[i+4],
2358 tlvStructStart[i+5],
2359 tlvStructStart[i+6],
2360 tlvStructStart[i+7]);
2361 }
2362 /* Dump the bytes in the last line*/
2363 for (; i < wdiStartParams->usConfigBufferLen; i++)
2364 {
2365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2366 "%02x ",tlvStructStart[i]);
2367 }
2368 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2369 "**************************** ");
2370 }
2371#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002373handle_failure:
2374 vos_mem_free(configParam);
2375 return VOS_STATUS_E_FAILURE;
2376}
Jeff Johnson295189b2012-06-20 16:38:30 -07002377/*
2378 * FUNCTION: WDA_wdiCompleteCB
2379 * call the voss call back function
2380 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002381void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002382{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2384 tWDA_CbContext *wdaContext;
2385
2386 if(NULL == pWdaParams)
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002390 VOS_ASSERT(0) ;
2391 return ;
2392 }
2393
2394 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2395
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 if (NULL == wdaContext)
2397 {
2398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002399 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 return ;
2401 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002402
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002404 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002408 vos_mem_free(pWdaParams);
2409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 if(WDI_STATUS_SUCCESS != status)
2411 {
2412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2413 "WDI stop callback returned failure" );
2414 VOS_ASSERT(0) ;
2415 }
2416 else
2417 {
2418 wdaContext->wdaState = WDA_STOP_STATE;
2419 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002420
Leo Chang9d76f622013-08-23 16:34:52 -07002421 /* FTM Driver stop procedure should be synced.
2422 * Stop and Close will happen on same context */
2423 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2424 {
2425 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2426 {
2427 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2428 "%s: FTM Stop Event Set Fail", __func__);
2429 VOS_ASSERT(0);
2430 }
2431 }
2432
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002434 vos_WDAComplete_cback(wdaContext->pVosContext);
2435
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return ;
2437}
Jeff Johnson295189b2012-06-20 16:38:30 -07002438/*
2439 * FUNCTION: WDA_stop
2440 * call WDI_stop
2441 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002442VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2443{
2444 WDI_Status wdiStatus;
2445 VOS_STATUS status = VOS_STATUS_SUCCESS;
2446 WDI_StopReqParamsType *wdiStopReq;
2447 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002448 tWDA_ReqParams *pWdaParams ;
2449
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 if (NULL == pWDA)
2451 {
2452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002453 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 VOS_ASSERT(0);
2455 return VOS_STATUS_E_FAILURE;
2456 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002457 if (pWDA->wdiFailed == true)
2458 {
2459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002460 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002461 return VOS_STATUS_E_ALREADY;
2462 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002463
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 /* FTM mode stay START_STATE */
2465 if( (WDA_READY_STATE != pWDA->wdaState) &&
2466 (WDA_INIT_STATE != pWDA->wdaState) &&
2467 (WDA_START_STATE != pWDA->wdaState) )
2468 {
2469 VOS_ASSERT(0);
2470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 wdiStopReq = (WDI_StopReqParamsType *)
2472 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2473 if(NULL == wdiStopReq)
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 VOS_ASSERT(0);
2478 return VOS_STATUS_E_NOMEM;
2479 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002480
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wdiStopReq->wdiStopReason = reason;
2482 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302483
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2485 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 VOS_ASSERT(0);
2490 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002491 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002493
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002494 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2495 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 {
2497 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002498 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002500
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002501 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2502 pWdaParams->wdaMsgParam = NULL;
2503 pWdaParams->pWdaContext = pWDA;
2504
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 /* call WDI stop */
2506 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002507 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2508
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2510 {
2511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2512 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2514 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 status = VOS_STATUS_E_FAILURE;
2516 }
Leo Chang9d76f622013-08-23 16:34:52 -07002517
2518 /* FTM Driver stop procedure should be synced.
2519 * Stop and Close will happen on same context */
2520 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2521 {
2522 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2523 WDI_RESPONSE_TIMEOUT);
2524 if (status != VOS_STATUS_SUCCESS)
2525 {
2526 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2527 "%s: FTM Stop Timepoout", __func__);
2528 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002529 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302530 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 return status;
2533}
Jeff Johnson295189b2012-06-20 16:38:30 -07002534/*
2535 * FUNCTION: WDA_close
2536 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302537 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002538VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2539{
Jeff Johnson43971f52012-07-17 12:26:56 -07002540 VOS_STATUS status = VOS_STATUS_SUCCESS;
2541 WDI_Status wstatus;
2542 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 if (NULL == wdaContext)
2545 {
2546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002547 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 return VOS_STATUS_E_FAILURE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2551 (WDA_STOP_STATE != wdaContext->wdaState))
2552 {
2553 VOS_ASSERT(0);
2554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002556 wstatus = WDI_Close();
2557 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 {
2559 status = VOS_STATUS_E_FAILURE;
2560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002563 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2564 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 status = VOS_STATUS_E_FAILURE;
2569 }
2570
Jeff Johnson43971f52012-07-17 12:26:56 -07002571 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002572 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002575 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 status = VOS_STATUS_E_FAILURE;
2577 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002578 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002579 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 {
2581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002582 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 status = VOS_STATUS_E_FAILURE;
2584 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002585 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002586 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002589 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 status = VOS_STATUS_E_FAILURE;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002593 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002594 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 {
2596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2597 "error in WDA close " );
2598 status = VOS_STATUS_E_FAILURE;
2599 }
2600 return status;
2601}
Jeff Johnson295189b2012-06-20 16:38:30 -07002602/*
2603 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2604 * returns 1 if the compiled version is greater than or equal to the input version
2605 */
2606
2607uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2608{
2609 VOS_STATUS status = VOS_STATUS_SUCCESS;
2610 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2611 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2614 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2615 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2616 (compiledVersion.revision >= revision)))
2617 return 1;
2618 else
2619 return 0;
2620}
Jeff Johnson295189b2012-06-20 16:38:30 -07002621/*
2622 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2623 * returns 1 if the compiled version is greater than or equal to the input version
2624 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002625uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2626{
2627 VOS_STATUS status = VOS_STATUS_SUCCESS;
2628 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2629 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2632 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2633 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2634 (reportedVersion.revision >= revision)))
2635 return 1;
2636 else
2637 return 0;
2638}
Jeff Johnson295189b2012-06-20 16:38:30 -07002639/*
2640 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2641 * Returns the version of the WCNSS WLAN API with which the HOST
2642 * device driver was compiled
2643 */
2644VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2645 tSirVersionType *pVersion)
2646{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302647 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 if ((NULL == pvosGCtx) || (NULL == pVersion))
2649 {
2650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002651 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 VOS_ASSERT(0);
2653 return VOS_STATUS_E_FAILURE;
2654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2656 if (NULL == pWDA )
2657 {
2658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002659 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 VOS_ASSERT(0);
2661 return VOS_STATUS_E_FAILURE;
2662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 *pVersion = pWDA->wcnssWlanCompiledVersion;
2664 return VOS_STATUS_SUCCESS;
2665}
Jeff Johnson295189b2012-06-20 16:38:30 -07002666/*
2667 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2668 * Returns the version of the WCNSS WLAN API with which the WCNSS
2669 * device driver was compiled
2670 */
2671VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2672 tSirVersionType *pVersion)
2673{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302674 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 if ((NULL == pvosGCtx) || (NULL == pVersion))
2676 {
2677 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002678 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 VOS_ASSERT(0);
2680 return VOS_STATUS_E_FAILURE;
2681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2683 if (NULL == pWDA )
2684 {
2685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002686 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 VOS_ASSERT(0);
2688 return VOS_STATUS_E_FAILURE;
2689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 *pVersion = pWDA->wcnssWlanReportedVersion;
2691 return VOS_STATUS_SUCCESS;
2692}
Jeff Johnson295189b2012-06-20 16:38:30 -07002693/*
2694 * FUNCTION: WDA_GetWcnssSoftwareVersion
2695 * Returns the WCNSS Software version string
2696 */
2697VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2698 tANI_U8 *pVersion,
2699 tANI_U32 versionBufferSize)
2700{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302701 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if ((NULL == pvosGCtx) || (NULL == pVersion))
2705 {
2706 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 VOS_ASSERT(0);
2709 return VOS_STATUS_E_FAILURE;
2710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2712 if (NULL == pWDA )
2713 {
2714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002715 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 VOS_ASSERT(0);
2717 return VOS_STATUS_E_FAILURE;
2718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2720 return VOS_STATUS_SUCCESS;
2721}
Jeff Johnson295189b2012-06-20 16:38:30 -07002722/*
2723 * FUNCTION: WDA_GetWcnssHardwareVersion
2724 * Returns the WCNSS Hardware version string
2725 */
2726VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2727 tANI_U8 *pVersion,
2728 tANI_U32 versionBufferSize)
2729{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302730 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 if ((NULL == pvosGCtx) || (NULL == pVersion))
2734 {
2735 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002736 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 VOS_ASSERT(0);
2738 return VOS_STATUS_E_FAILURE;
2739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2741 if (NULL == pWDA )
2742 {
2743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002744 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 VOS_ASSERT(0);
2746 return VOS_STATUS_E_FAILURE;
2747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2749 return VOS_STATUS_SUCCESS;
2750}
Jeff Johnson295189b2012-06-20 16:38:30 -07002751/*
2752 * FUNCTION: WDA_WniCfgDnld
2753 * Trigger CFG Download
2754 */
2755VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2756{
2757 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302758 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002759
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 if (NULL == pMac )
2761 {
2762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 VOS_ASSERT(0);
2765 return VOS_STATUS_E_FAILURE;
2766 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302767 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 return vosStatus;
2769}
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/* -----------------------------------------------------------------
2771 * WDI interface
2772 * -----------------------------------------------------------------
2773 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002774/*
2775 * FUNCTION: WDA_suspendDataTxCallback
2776 * call back function called from TL after suspend Transmission
2777 */
2778VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2779 v_U8_t* ucSTAId,
2780 VOS_STATUS vosStatus)
2781{
2782 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002784 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 if (NULL == pWDA )
2786 {
2787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002788 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 VOS_ASSERT(0);
2790 return VOS_STATUS_E_FAILURE;
2791 }
2792 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2793 {
2794 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2795 }
2796 else
2797 {
2798 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 /* Trigger the event to bring the WDA TL suspend function to come
2801 * out of wait*/
2802 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2803 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002806 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 /* If TL suspended had timedout before this callback was called, resume back
2809 * TL.*/
2810 if (pWDA->txSuspendTimedOut)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002813 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 WDA_ResumeDataTx(pWDA);
2815 pWDA->txSuspendTimedOut = FALSE;
2816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 return VOS_STATUS_SUCCESS;
2818}
Jeff Johnson295189b2012-06-20 16:38:30 -07002819/*
2820 * FUNCTION: WDA_suspendDataTx
2821 * Update TL to suspend the data Transmission
2822 */
2823VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2824{
2825 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2826 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002827
2828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002829 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 if (pWDA->txSuspendTimedOut)
2832 {
2833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002834 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 return status;
2836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 /* Reset the event to be not signalled */
2838 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2839 if(!VOS_IS_STATUS_SUCCESS(status))
2840 {
2841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002842 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 return VOS_STATUS_E_FAILURE;
2844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002846 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 WDA_SuspendDataTxCallback);
2848 if(status != VOS_STATUS_SUCCESS)
2849 {
2850 return status;
2851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 /* Wait for the event to be set by the TL, to get the response of
2853 * suspending the TX queues, this event should be set by the Callback
2854 * function called by TL*/
2855 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2856 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2857 if(!VOS_IS_STATUS_SUCCESS(status))
2858 {
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2860 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002861 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* Set this flag to true when TL suspend times out, so that when TL
2863 * suspend eventually happens and calls the callback, TL can be resumed
2864 * right away by looking at this flag when true.*/
2865 pWDA->txSuspendTimedOut = TRUE;
2866 }
2867 else
2868 {
2869 pWDA->txSuspendTimedOut = FALSE;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2872 {
2873 status = VOS_STATUS_SUCCESS;
2874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 return status;
2876}
Jeff Johnson295189b2012-06-20 16:38:30 -07002877/*
2878 * FUNCTION: WDA_resumeDataTx
2879 * Update TL to resume the data Transmission
2880 */
2881VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2882{
2883 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002884
2885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002886 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002887
2888 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 return status;
2890}
Jeff Johnson295189b2012-06-20 16:38:30 -07002891/*
2892 * FUNCTION: WDA_InitScanReqCallback
2893 * Trigger Init SCAN callback
2894 */
2895void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2896{
2897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2898 tWDA_CbContext *pWDA;
2899 tInitScanParams *pWDA_ScanParam ;
2900 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002902 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 if(NULL == pWdaParams)
2904 {
2905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 VOS_ASSERT(0) ;
2908 return ;
2909 }
2910 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2911 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 if(NULL == pWDA_ScanParam)
2913 {
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002916 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2918 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 return ;
2920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 if(WDI_STATUS_SUCCESS != wdiStatus)
2922 {
2923 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 if(VOS_STATUS_SUCCESS != status)
2925 {
2926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002927 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 }
2929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 /* free WDI command buffer */
2931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302933
2934
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002936 /* without converting the Status to Failure or Success Just
2937 pass the same status to lim */
2938 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 /* send SCAN RSP message back to PE */
2940 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 return ;
2942}
2943
2944/*
2945 * FUNCTION: WDA_ProcessInitScanReq
2946 * Trigger Init SCAN in DAL
2947 */
2948VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2949 tInitScanParams *initScanParams)
2950{
2951 WDI_Status status = WDI_STATUS_SUCCESS ;
2952 WDI_InitScanReqParamsType *wdiInitScanParam =
2953 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2954 sizeof(WDI_InitScanReqParamsType)) ;
2955 tWDA_ReqParams *pWdaParams;
2956 tANI_U8 i = 0;
2957
2958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002959 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == wdiInitScanParam)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 VOS_ASSERT(0);
2965 return VOS_STATUS_E_NOMEM;
2966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2968 if(NULL == pWdaParams)
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_ASSERT(0);
2973 vos_mem_free(wdiInitScanParam);
2974 return VOS_STATUS_E_NOMEM;
2975 }
2976
2977 /* Copy init Scan params to WDI structure */
2978 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2979 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2980 sizeof(tSirMacAddr)) ;
2981 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2982 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2983 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2985 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2987 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2989 {
2990 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2991 initScanParams->scanEntry.bssIdx[i] ;
2992 }
2993
2994 /* if Frame length, copy macMgmtHdr or WDI structure */
2995 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2996 {
2997 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2998 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2999 }
3000 wdiInitScanParam->wdiReqStatusCB = NULL ;
3001
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 /* Store Init Req pointer, as this will be used for response */
3003 pWdaParams->pWdaContext = pWDA;
3004 pWdaParams->wdaMsgParam = initScanParams;
3005 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 /* first try to suspend TX */
3007 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 if(WDI_STATUS_SUCCESS != status)
3009 {
3010 goto handleWdiFailure;
3011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 /* call DAL API to pass init scan request to DAL */
3013 status = WDI_InitScanReq(wdiInitScanParam,
3014 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 if(IS_WDI_STATUS_FAILURE(status))
3016 {
3017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3018 "error in WDA Init Scan, Resume Tx " );
3019 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0) ;
3021
3022 goto handleWdiFailure;
3023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003025handleWdiFailure:
3026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3027 "Failure in WDI Api, free all the memory " );
3028 /* free WDI command buffer */
3029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3030 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 /* send Failure to PE */
3032 initScanParams->status = eSIR_FAILURE ;
3033 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 return CONVERT_WDI2VOS_STATUS(status) ;
3035}
3036
Jeff Johnson295189b2012-06-20 16:38:30 -07003037/*
3038 * FUNCTION: WDA_StartScanReqCallback
3039 * send Start SCAN RSP back to PE
3040 */
3041void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3042 void* pUserData)
3043{
3044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3045 tWDA_CbContext *pWDA;
3046 tStartScanParams *pWDA_ScanParam;
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 if(NULL == pWdaParams)
3050 {
3051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003052 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 VOS_ASSERT(0) ;
3054 return ;
3055 }
3056 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3057 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 if(NULL == pWDA_ScanParam)
3059 {
3060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003061 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003063 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 return ;
3065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3067 {
3068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003069 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003071 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 return ;
3073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3075 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003076
Jeff Johnson295189b2012-06-20 16:38:30 -07003077
3078 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003079 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 /* send SCAN RSP message back to PE */
3081 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 return ;
3083}
3084
Jeff Johnson295189b2012-06-20 16:38:30 -07003085/*
3086 * FUNCTION: WDA_ProcessStartScanReq
3087 * Trigger start SCAN in WDI
3088 */
3089VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3090 tStartScanParams *startScanParams)
3091{
3092 WDI_Status status = WDI_STATUS_SUCCESS;
3093 WDI_StartScanReqParamsType *wdiStartScanParams =
3094 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3095 sizeof(WDI_StartScanReqParamsType)) ;
3096 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 if(NULL == wdiStartScanParams)
3100 {
3101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 VOS_ASSERT(0);
3104 return VOS_STATUS_E_NOMEM;
3105 }
3106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3107 if(NULL == pWdaParams)
3108 {
3109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 VOS_ASSERT(0);
3112 vos_mem_free(wdiStartScanParams);
3113 return VOS_STATUS_E_NOMEM;
3114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 /* Copy init Scan params to WDI structure */
3116 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3117 wdiStartScanParams->wdiReqStatusCB = NULL ;
3118
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 /* Store Init Req pointer, as this will be used for response */
3120 /* store Params pass it to WDI */
3121 pWdaParams->pWdaContext = pWDA;
3122 pWdaParams->wdaMsgParam = startScanParams;
3123 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 /* call DAL API to pass init scan request to DAL */
3125 status = WDI_StartScanReq(wdiStartScanParams,
3126 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 /* failure returned by WDI API */
3128 if(IS_WDI_STATUS_FAILURE(status))
3129 {
3130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3131 "Failure in Start Scan WDI API, free all the memory "
3132 "It should be due to previous abort scan." );
3133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3134 vos_mem_free(pWdaParams) ;
3135 startScanParams->status = eSIR_FAILURE ;
3136 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 return CONVERT_WDI2VOS_STATUS(status) ;
3139}
Jeff Johnson295189b2012-06-20 16:38:30 -07003140/*
3141 * FUNCTION: WDA_EndScanReqCallback
3142 * END SCAN callback
3143 */
3144void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3145{
3146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3147 tWDA_CbContext *pWDA;
3148 tEndScanParams *endScanParam;
3149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003150 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 if(NULL == pWdaParams)
3152 {
3153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003154 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 VOS_ASSERT(0) ;
3156 return ;
3157 }
3158 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3159 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 if(NULL == endScanParam)
3161 {
3162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003163 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3166 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 return ;
3168 }
3169
3170 /* Free WDI command buffer */
3171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3172 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003174 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 /* send response back to PE */
3176 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3177 return ;
3178}
3179
Jeff Johnson295189b2012-06-20 16:38:30 -07003180/*
3181 * FUNCTION: WDA_ProcessEndScanReq
3182 * Trigger END SCAN in WDI
3183 */
3184VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3185 tEndScanParams *endScanParams)
3186{
3187 WDI_Status status = WDI_STATUS_SUCCESS;
3188 WDI_EndScanReqParamsType *wdiEndScanParams =
3189 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3190 sizeof(WDI_EndScanReqParamsType)) ;
3191 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 if(NULL == wdiEndScanParams)
3195 {
3196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 VOS_ASSERT(0);
3199 return VOS_STATUS_E_NOMEM;
3200 }
3201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3202 if(NULL == pWdaParams)
3203 {
3204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 VOS_ASSERT(0);
3207 vos_mem_free(wdiEndScanParams);
3208 return VOS_STATUS_E_NOMEM;
3209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 /* Copy init Scan params to WDI structure */
3211 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3212 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 /* Store Init Req pointer, as this will be used for response */
3214 /* store Params pass it to WDI */
3215 pWdaParams->pWdaContext = pWDA;
3216 pWdaParams->wdaMsgParam = endScanParams;
3217 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 /* call DAL API to pass init scan request to DAL */
3219 status = WDI_EndScanReq(wdiEndScanParams,
3220 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 if(IS_WDI_STATUS_FAILURE(status))
3222 {
3223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3224 "Failure in End Scan WDI API, free all the memory "
3225 "It should be due to previous abort scan." );
3226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3227 vos_mem_free(pWdaParams) ;
3228 endScanParams->status = eSIR_FAILURE ;
3229 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 return CONVERT_WDI2VOS_STATUS(status) ;
3232}
Jeff Johnson295189b2012-06-20 16:38:30 -07003233/*
3234 * FUNCTION: WDA_FinishScanReqCallback
3235 * Trigger Finish SCAN callback
3236 */
3237void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3238{
3239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3240 tWDA_CbContext *pWDA;
3241 tFinishScanParams *finishScanParam;
3242 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 if(NULL == pWdaParams)
3246 {
3247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003248 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_ASSERT(0) ;
3250 return ;
3251 }
3252
3253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3254 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 if(NULL == finishScanParam)
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3261 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 return ;
3263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3265 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 /*
3267 * Now Resume TX, if we reached here means, TX is already suspended, we
3268 * have to resume it unconditionaly
3269 */
3270 status = WDA_ResumeDataTx(pWDA) ;
3271
3272 if(VOS_STATUS_SUCCESS != status)
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003275 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003277 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3279 return ;
3280}
Jeff Johnson295189b2012-06-20 16:38:30 -07003281/*
3282 * FUNCTION: WDA_ProcessFinshScanReq
3283 * Trigger Finish SCAN in WDI
3284 */
3285VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3286 tFinishScanParams *finishScanParams)
3287{
3288 WDI_Status status = WDI_STATUS_SUCCESS;
3289 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3290 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3291 sizeof(WDI_FinishScanReqParamsType)) ;
3292 tWDA_ReqParams *pWdaParams ;
3293 tANI_U8 i = 0;
3294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003295 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 if(NULL == wdiFinishScanParams)
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0);
3301 return VOS_STATUS_E_NOMEM;
3302 }
3303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3304 if(NULL == pWdaParams)
3305 {
3306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 VOS_ASSERT(0);
3309 vos_mem_free(wdiFinishScanParams);
3310 return VOS_STATUS_E_NOMEM;
3311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 /* Copy init Scan params to WDI structure */
3313 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3314 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3315 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3317 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3318 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3319 finishScanParams->frameLength ;
3320 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3321 finishScanParams->currentOperChannel ;
3322 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3323 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3324 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3326 {
3327 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3328 finishScanParams->scanEntry.bssIdx[i] ;
3329 }
3330
3331
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 /* if Frame length, copy macMgmtHdr ro WDI structure */
3333 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3334 {
3335 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3336 &finishScanParams->macMgmtHdr,
3337 sizeof(WDI_MacMgmtHdr)) ;
3338 }
3339 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 /* Store Init Req pointer, as this will be used for response */
3341 /* store Params pass it to WDI */
3342 pWdaParams->pWdaContext = pWDA;
3343 pWdaParams->wdaMsgParam = finishScanParams;
3344 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 /* call DAL API to pass init scan request to DAL */
3346 status = WDI_FinishScanReq(wdiFinishScanParams,
3347 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003348
Jeff Johnson295189b2012-06-20 16:38:30 -07003349
3350 /*
3351 * WDI API returns failure..
3352 */
3353 if(IS_WDI_STATUS_FAILURE( status))
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3356 "Failure in Finish Scan WDI API, free all the memory " );
3357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3358 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 finishScanParams->status = eSIR_FAILURE ;
3360 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 return CONVERT_WDI2VOS_STATUS(status) ;
3363}
Jeff Johnson295189b2012-06-20 16:38:30 -07003364/*---------------------------------------------------------------------
3365 * ASSOC API's
3366 *---------------------------------------------------------------------
3367 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003368/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303369 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 * Trigger Init SCAN callback
3371 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303372void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003373{
3374 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3375 tWDA_CbContext *pWDA;
3376 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 if(NULL == pWdaParams)
3380 {
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 VOS_ASSERT(0) ;
3384 return ;
3385 }
3386 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3387 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3389 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 /* reset macBSSID */
3391 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 /* reset macSTASelf */
3393 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003394 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 return ;
3397}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303398
3399/*
3400 * FUNCTION: WDA_JoinReqCallback
3401 * Free memory and send SWITCH CHANNEL RSP back to PE.
3402 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3403 */
3404void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3405{
3406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3407 tWDA_CbContext *pWDA;
3408 tSwitchChannelParams *joinReqParam;
3409
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3411 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3412
3413 if(NULL == pWdaParams)
3414 {
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3416 "%s: pWdaParams received NULL", __func__);
3417 VOS_ASSERT(0);
3418 return;
3419 }
3420
3421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3422 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3423 joinReqParam->status = wdiStatus;
3424
3425 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3426 {
3427 /* reset macBSSID */
3428 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3429 /* reset macSTASelf */
3430 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3431
3432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3433 vos_mem_free(pWdaParams);
3434 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3435 }
3436
3437 return;
3438}
3439
Jeff Johnson295189b2012-06-20 16:38:30 -07003440/*
3441 * FUNCTION: WDA_ProcessJoinReq
3442 * Trigger Join REQ in WDI
3443 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003444VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3445 tSwitchChannelParams* joinReqParam)
3446{
3447 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 WDI_JoinReqParamsType *wdiJoinReqParam =
3449 (WDI_JoinReqParamsType *)vos_mem_malloc(
3450 sizeof(WDI_JoinReqParamsType)) ;
3451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 if(NULL == wdiJoinReqParam)
3455 {
3456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003459 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 return VOS_STATUS_E_NOMEM;
3461 }
3462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3463 if(NULL == pWdaParams)
3464 {
3465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 VOS_ASSERT(0);
3468 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003469 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 return VOS_STATUS_E_NOMEM;
3471 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003472
3473 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3474 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3475 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3476 {
3477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3478 "%s: received join request when BSSID or self-STA is NULL "
3479 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003480 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003481 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3482 VOS_ASSERT(0);
3483 vos_mem_free(wdiJoinReqParam);
3484 vos_mem_free(pWdaParams);
3485 joinReqParam->status = eSIR_FAILURE ;
3486 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3487 return VOS_STATUS_E_INVAL;
3488 }
3489
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 /* copy the BSSID for pWDA */
3491 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3492 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3494 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3496 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003497#ifdef WLAN_FEATURE_VOWIFI
3498 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3499 joinReqParam->maxTxPower ;
3500#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3502 joinReqParam->localPowerConstraint ;
3503#endif
3504 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3505 joinReqParam->secondaryChannelOffset ;
3506 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3507
Sachin Ahuja935eda782014-07-30 14:57:41 +05303508 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3509 wdiJoinReqParam->pUserData = pWdaParams;
3510
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 /* Store Init Req pointer, as this will be used for response */
3512 /* store Params pass it to WDI */
3513 pWdaParams->pWdaContext = pWDA;
3514 pWdaParams->wdaMsgParam = joinReqParam;
3515 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303517 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 if(IS_WDI_STATUS_FAILURE(status))
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3521 "Failure in Join WDI API, free all the memory " );
3522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3523 vos_mem_free(pWdaParams) ;
3524 joinReqParam->status = eSIR_FAILURE ;
3525 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 return CONVERT_WDI2VOS_STATUS(status) ;
3528}
Jeff Johnson295189b2012-06-20 16:38:30 -07003529/*
3530 * FUNCTION: WDA_SwitchChannelReqCallback
3531 * send Switch channel RSP back to PE
3532 */
3533void WDA_SwitchChannelReqCallback(
3534 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3535{
3536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3537 tWDA_CbContext *pWDA;
3538 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 if(NULL == pWdaParams)
3542 {
3543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 VOS_ASSERT(0) ;
3546 return ;
3547 }
3548 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3549 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3550
3551#ifdef WLAN_FEATURE_VOWIFI
3552 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3553#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3555 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003557 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 return ;
3560}
Jeff Johnson295189b2012-06-20 16:38:30 -07003561/*
3562 * FUNCTION: WDA_ProcessChannelSwitchReq
3563 * Request to WDI to switch channel REQ params.
3564 */
3565VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3566 tSwitchChannelParams *pSwitchChanParams)
3567{
3568 WDI_Status status = WDI_STATUS_SUCCESS ;
3569 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3570 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3571 sizeof(WDI_SwitchChReqParamsType)) ;
3572 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(NULL == wdiSwitchChanParam)
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 VOS_ASSERT(0);
3580 return VOS_STATUS_E_NOMEM;
3581 }
3582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3583 if(NULL == pWdaParams)
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0);
3588 vos_mem_free(wdiSwitchChanParam);
3589 return VOS_STATUS_E_NOMEM;
3590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3592#ifndef WLAN_FEATURE_VOWIFI
3593 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3594 pSwitchChanParams->localPowerConstraint;
3595#endif
3596 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3597 pSwitchChanParams->secondaryChannelOffset;
3598 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 /* Store req pointer, as this will be used for response */
3600 /* store Params pass it to WDI */
3601 pWdaParams->pWdaContext = pWDA;
3602 pWdaParams->wdaMsgParam = pSwitchChanParams;
3603 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604#ifdef WLAN_FEATURE_VOWIFI
3605 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3606 = pSwitchChanParams->maxTxPower;
3607 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3608 pSwitchChanParams ->selfStaMacAddr,
3609 sizeof(tSirMacAddr));
3610#endif
3611 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3612 pSwitchChanParams->bssId,
3613 sizeof(tSirMacAddr));
3614
3615 status = WDI_SwitchChReq(wdiSwitchChanParam,
3616 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 if(IS_WDI_STATUS_FAILURE(status))
3618 {
3619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3620 "Failure in process channel switch Req WDI API, free all the memory " );
3621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3622 vos_mem_free(pWdaParams) ;
3623 pSwitchChanParams->status = eSIR_FAILURE ;
3624 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 return CONVERT_WDI2VOS_STATUS(status) ;
3627}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003628
3629/*
3630 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3631 * send Switch channel RSP back to PE
3632 */
3633void WDA_SwitchChannelReqCallback_V1(
3634 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3635 void* pUserData)
3636{
3637 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3638 tWDA_CbContext *pWDA;
3639 tSwitchChannelParams *pSwitchChanParams;
3640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3641 "<------ %s " ,__func__);
3642
3643 if (NULL == pWdaParams)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3646 "%s: pWdaParams received NULL", __func__);
3647 VOS_ASSERT(0);
3648 return ;
3649 }
3650 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3651 pSwitchChanParams =
3652 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3653 pSwitchChanParams->channelSwitchSrc =
3654 wdiSwitchChanRsp->channelSwitchSrc;
3655#ifdef WLAN_FEATURE_VOWIFI
3656 pSwitchChanParams->txMgmtPower =
3657 wdiSwitchChanRsp->ucTxMgmtPower;
3658#endif
3659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3660 vos_mem_free(pWdaParams);
3661 pSwitchChanParams->status =
3662 wdiSwitchChanRsp->wdiStatus ;
3663 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3664 (void *)pSwitchChanParams , 0);
3665 return;
3666}
3667
3668/*
3669 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3670 * Request to WDI to switch channel REQ params.
3671 */
3672VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3673 tSwitchChannelParams *pSwitchChanParams)
3674{
3675 WDI_Status status = WDI_STATUS_SUCCESS ;
3676 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3677 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3678 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3679 tWDA_ReqParams *pWdaParams ;
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3681 "------> %s " ,__func__);
3682 if (NULL == wdiSwitchChanParam)
3683 {
3684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3685 "%s: VOS MEM Alloc Failure", __func__);
3686 VOS_ASSERT(0);
3687 return VOS_STATUS_E_NOMEM;
3688 }
3689 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3690 if (NULL == pWdaParams)
3691 {
3692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3693 "%s: VOS MEM Alloc Failure", __func__);
3694 VOS_ASSERT(0);
3695 vos_mem_free(wdiSwitchChanParam);
3696 return VOS_STATUS_E_NOMEM;
3697 }
3698 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3699 pSwitchChanParams->channelSwitchSrc;
3700
3701 wdiSwitchChanParam->wdiChInfo.ucChannel =
3702 pSwitchChanParams->channelNumber;
3703#ifndef WLAN_FEATURE_VOWIFI
3704 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3705 pSwitchChanParams->localPowerConstraint;
3706#endif
3707 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3708 pSwitchChanParams->secondaryChannelOffset;
3709 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3710 /* Store req pointer, as this will be used for response */
3711 /* store Params pass it to WDI */
3712 pWdaParams->pWdaContext = pWDA;
3713 pWdaParams->wdaMsgParam = pSwitchChanParams;
3714 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3715#ifdef WLAN_FEATURE_VOWIFI
3716 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3717 pSwitchChanParams->maxTxPower;
3718 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3719 pSwitchChanParams ->selfStaMacAddr,
3720 sizeof(tSirMacAddr));
3721#endif
3722 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3723 pSwitchChanParams->bssId,
3724 sizeof(tSirMacAddr));
3725
3726 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3727 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3728 pWdaParams);
3729 if (IS_WDI_STATUS_FAILURE(status))
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3732 "Failure in process channel switch Req WDI "
3733 "API, free all the memory " );
3734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3735 vos_mem_free(pWdaParams) ;
3736 pSwitchChanParams->status = eSIR_FAILURE ;
3737 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3738 (void *)pSwitchChanParams, 0) ;
3739 }
3740 return CONVERT_WDI2VOS_STATUS(status) ;
3741}
3742
Jeff Johnson295189b2012-06-20 16:38:30 -07003743/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303744 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 * config BSS Req Callback, called by WDI
3746 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303747void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 ,void* pUserData)
3749{
3750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3751 tWDA_CbContext *pWDA;
3752 tAddBssParams *configBssReqParam;
3753 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003755 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 if(NULL == pWdaParams)
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003759 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 VOS_ASSERT(0) ;
3761 return ;
3762 }
3763 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3764 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3765 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003767 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3769 {
3770 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3771 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3773 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3774 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3775
3776 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3777 {
3778 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3779 {
3780 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3781 staConfigBssParam->staType = STA_ENTRY_BSSID;
3782 }
3783 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3784 (staConfigBssParam->staType == STA_ENTRY_SELF))
3785 {
3786 /* This is the 1st add BSS Req for the BTAMP STA */
3787 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3788 staConfigBssParam->staType = STA_ENTRY_BSSID;
3789 }
3790 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3791 (staConfigBssParam->staType == STA_ENTRY_PEER))
3792 {
3793 /* This is the 2nd ADD BSS Request that is sent
3794 * on the BTAMP STA side. The Sta type is
3795 * set to STA_ENTRY_PEER here.*/
3796 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3797 }
3798 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3799 (staConfigBssParam->staType == STA_ENTRY_SELF))
3800 {
3801 /* statype is already set by PE.
3802 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3803 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3804 staConfigBssParam->staType = STA_ENTRY_BSSID;
3805 }
3806 else
3807 {
3808 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3809 staConfigBssParam->staType = STA_ENTRY_PEER;
3810 }
3811 }
3812 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3813 {
3814 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3815 staConfigBssParam->staType = STA_ENTRY_SELF;
3816 }
3817 else
3818 {
3819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3820 "Invalid operation mode specified");
3821 VOS_ASSERT(0);
3822 }
3823
3824 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003827 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3829 sizeof(tSirMacAddr));
3830 staConfigBssParam->txChannelWidthSet =
3831 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3833 staConfigBssParam->htCapable)
3834 {
3835 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3836 wdiConfigBssRsp->ucBSSIdx;
3837 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3838 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303839 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3840 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3843 wdiConfigBssRsp->ucBSSIdx,
3844 wdiConfigBssRsp->ucSTAIdx))
3845 {
3846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003847 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 VOS_ASSERT(0) ;
3849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003850 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3851 {
3852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003853 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 VOS_ASSERT(0) ;
3855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003856#ifdef WLAN_FEATURE_VOWIFI
3857 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3858#endif
3859 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303860 else
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3863 "%s: Failure with status %d", __func__,
3864 wdiConfigBssRsp->wdiStatus);
3865 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3866 WLAN_LOG_INDICATOR_HOST_DRIVER,
3867 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3868 FALSE, TRUE);
3869 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303870 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3871 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3873 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 return ;
3876}
Jeff Johnson295189b2012-06-20 16:38:30 -07003877/*
3878 * FUNCTION: WDA_UpdateEdcaParamsForAC
3879 * Update WDI EDCA params with PE edca params
3880 */
3881void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3882 WDI_EdcaParamRecord *wdiEdcaParam,
3883 tSirMacEdcaParamRecord *macEdcaParam)
3884{
3885 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3886 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3887 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3888 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3889 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3890 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3891}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303892void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3893 void* pUserData)
3894{
3895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3896 tWDA_CbContext *pWDA;
3897 tAddBssParams *addBssParams;
3898
3899 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3900 "<------ %s, wdiStatus: %d",
3901 __func__, wdiStatus);
3902
3903 if (NULL == pWdaParams)
3904 {
3905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3906 "%s: Invalid pWdaParams pointer", __func__);
3907 VOS_ASSERT(0);
3908 return;
3909 }
3910
3911 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3912 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3913
3914 addBssParams->status = wdiStatus;
3915
3916 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3917 {
3918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3919 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303920 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3921 WLAN_LOG_INDICATOR_HOST_DRIVER,
3922 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3923 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303924 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3925 }
3926
3927 return ;
3928}
3929
Jeff Johnson295189b2012-06-20 16:38:30 -07003930/*
3931 * FUNCTION: WDA_ProcessConfigBssReq
3932 * Configure BSS before starting Assoc with AP
3933 */
3934VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3935 tAddBssParams* configBssReqParam)
3936{
3937 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303938 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003939 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003941 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303942 if (NULL == configBssReqParam)
3943 {
3944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3945 "%s: configBssReqParam is NULL", __func__);
3946 return VOS_STATUS_E_INVAL;
3947 }
3948
3949 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3950 sizeof(WDI_ConfigBSSReqParamsType)) ;
3951
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(NULL == wdiConfigBssReqParam)
3953 {
3954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_ASSERT(0);
3957 return VOS_STATUS_E_NOMEM;
3958 }
3959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3960 if(NULL == pWdaParams)
3961 {
3962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 VOS_ASSERT(0);
3965 vos_mem_free(wdiConfigBssReqParam);
3966 return VOS_STATUS_E_NOMEM;
3967 }
Kiran4a17ebe2013-01-31 10:43:43 -08003968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3969 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3972 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303973 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
3974 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 /* Store Init Req pointer, as this will be used for response */
3976 /* store Params pass it to WDI */
3977 pWdaParams->pWdaContext = pWDA;
3978 pWdaParams->wdaMsgParam = configBssReqParam;
3979 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303981 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 if(IS_WDI_STATUS_FAILURE(status))
3983 {
3984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3985 "Failure in Config BSS WDI API, free all the memory " );
3986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3987 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 return CONVERT_WDI2VOS_STATUS(status) ;
3992}
Jeff Johnson295189b2012-06-20 16:38:30 -07003993#ifdef ENABLE_HAL_COMBINED_MESSAGES
3994/*
3995 * FUNCTION: WDA_PostAssocReqCallback
3996 * Post ASSOC req callback, send RSP back to PE
3997 */
3998void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3999 void* pUserData)
4000{
4001 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4002 tPostAssocParams *postAssocReqParam =
4003 (tPostAssocParams *)pWDA->wdaMsgParam ;
4004 /*STA context within the BSS Params*/
4005 tAddStaParams *staPostAssocParam =
4006 &postAssocReqParam->addBssParams.staContext ;
4007 /*STA Params for self STA*/
4008 tAddStaParams *selfStaPostAssocParam =
4009 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004011 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004012 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004013 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4015 {
4016 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4017 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4018 sizeof(tSirMacAddr)) ;
4019 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4020 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4021 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4023 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304024 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4026 pWDA->wdaWdiApiMsgParam = NULL;
4027 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 return ;
4030}
Jeff Johnson295189b2012-06-20 16:38:30 -07004031/*
4032 * FUNCTION: WDA_ProcessPostAssocReq
4033 * Trigger POST ASSOC processing in WDI
4034 */
4035VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4036 tPostAssocParams *postAssocReqParam)
4037{
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 WDI_Status status = WDI_STATUS_SUCCESS ;
4039
4040 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4041 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4042 sizeof(WDI_PostAssocReqParamsType)) ;
4043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004045
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 if(NULL == wdiPostAssocReqParam)
4047 {
4048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004050 VOS_ASSERT(0);
4051 return VOS_STATUS_E_NOMEM;
4052 }
4053
4054 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4055 {
4056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004057 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 VOS_ASSERT(0);
4059 return VOS_STATUS_E_FAILURE;
4060 }
4061
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 /* update BSS params into WDI structure */
4063 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4064 &postAssocReqParam->addBssParams) ;
4065 /* update STA params into WDI structure */
4066 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4067 &postAssocReqParam->addStaParams) ;
4068
4069 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4070 postAssocReqParam->addBssParams.highPerformance;
4071 WDA_UpdateEdcaParamsForAC(pWDA,
4072 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4073 &postAssocReqParam->addBssParams.acbe);
4074 WDA_UpdateEdcaParamsForAC(pWDA,
4075 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4076 &postAssocReqParam->addBssParams.acbk);
4077 WDA_UpdateEdcaParamsForAC(pWDA,
4078 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4079 &postAssocReqParam->addBssParams.acvi);
4080 WDA_UpdateEdcaParamsForAC(pWDA,
4081 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4082 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 /* Store Init Req pointer, as this will be used for response */
4084 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 /* store Params pass it to WDI */
4086 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4088 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 if(IS_WDI_STATUS_FAILURE(status))
4090 {
4091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4092 "Failure in Post Assoc WDI API, free all the memory " );
4093 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4094 pWDA->wdaWdiApiMsgParam = NULL;
4095 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 return CONVERT_WDI2VOS_STATUS(status) ;
4100}
4101#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004102/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304103 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 * ADD STA req callback, send RSP back to PE
4105 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304106void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 void* pUserData)
4108{
4109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4110 tWDA_CbContext *pWDA;
4111 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 if(NULL == pWdaParams)
4115 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 VOS_ASSERT(0) ;
4118 return ;
4119 }
4120 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4121 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004123 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4125 {
4126 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4127 /*TODO: UMAC structure doesn't have these fields*/
4128 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4129 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4130 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4131 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4132 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4133 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004134#ifdef FEATURE_WLAN_TDLS
4135 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4136 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4137#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004138 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004139#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 {
4141 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4142 wdiConfigStaRsp->ucBssIdx;
4143 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4144 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304145 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4146 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 }
4148 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4149 {
4150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004151 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 VOS_ASSERT(0) ;
4153 return ;
4154 }
4155 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304156 else
4157 {
4158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4159 "%s: Failure with status %d", __func__,
4160 wdiConfigStaRsp->wdiStatus);
4161 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4162 WLAN_LOG_INDICATOR_HOST_DRIVER,
4163 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4164 FALSE, TRUE);
4165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4167 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 return ;
4170}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304171void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4172 void* pUserData)
4173{
4174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4175 tWDA_CbContext *pWDA;
4176 tAddStaParams *addStaParams;
4177
4178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4179 "<------ %s, wdiStatus: %d",
4180 __func__, wdiStatus);
4181
4182 if (NULL == pWdaParams)
4183 {
4184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4185 "%s: Invalid pWdaParams pointer", __func__);
4186 VOS_ASSERT(0);
4187 return;
4188 }
4189
4190 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4191 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4192
4193 addStaParams->status = wdiStatus;
4194
4195 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4196 {
4197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4198 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304199 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4200 WLAN_LOG_INDICATOR_HOST_DRIVER,
4201 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4202 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304203 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4204 }
4205
4206 return ;
4207}
4208
Jeff Johnson295189b2012-06-20 16:38:30 -07004209/*
4210 * FUNCTION: WDA_ConfigStaReq
4211 * Trigger Config STA processing in WDI
4212 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304213VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 tAddStaParams *addStaReqParam)
4215{
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4218 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4219 sizeof(WDI_ConfigSTAReqParamsType)) ;
4220 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 if(NULL == wdiConfigStaReqParam)
4224 {
4225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 VOS_ASSERT(0);
4228 return VOS_STATUS_E_NOMEM;
4229 }
4230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4231 if(NULL == pWdaParams)
4232 {
4233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 VOS_ASSERT(0);
4236 vos_mem_free(wdiConfigStaReqParam);
4237 return VOS_STATUS_E_NOMEM;
4238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004240 /* update STA params into WDI structure */
4241 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4242 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304243 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4244 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 /* Store Init Req pointer, as this will be used for response */
4246 /* store Params pass it to WDI */
4247 pWdaParams->pWdaContext = pWDA;
4248 pWdaParams->wdaMsgParam = addStaReqParam;
4249 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304250
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304252 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 if(IS_WDI_STATUS_FAILURE(status))
4254 {
4255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4256 "Failure in Config STA WDI API, free all the memory " );
4257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4258 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 return CONVERT_WDI2VOS_STATUS(status) ;
4263}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304264
Jeff Johnson295189b2012-06-20 16:38:30 -07004265/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304266 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304268 */
4269void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 void* pUserData)
4271{
4272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4273 tWDA_CbContext *pWDA;
4274 tDeleteBssParams *delBssReqParam;
4275 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 if(NULL == pWdaParams)
4279 {
4280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 VOS_ASSERT(0) ;
4283 return ;
4284 }
4285 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4286 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004287 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4289 {
4290 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4291 sizeof(tSirMacAddr)) ;
4292 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304293 else
4294 {
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4296 "%s: Failure with status %d", __func__,
4297 wdiDelBssRsp->wdiStatus);
4298 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4299 WLAN_LOG_INDICATOR_HOST_DRIVER,
4300 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4301 FALSE, TRUE);
4302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4304 {
4305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004306 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 VOS_ASSERT(0) ;
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004312 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 VOS_ASSERT(0) ;
4314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4316 {
4317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004318 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 VOS_ASSERT(0) ;
4320 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304321
4322 WLANTL_StartForwarding(staIdx,0,0);
4323
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4325 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 /* reset the the system role*/
4327 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4328
4329 /* Reset the BA related information */
4330 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4331 {
4332 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4333 {
4334 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4335 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304336 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 /* Reset framesTxed counters here */
4338 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4339 {
4340 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4341 }
4342 }
4343 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304344
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 return ;
4347}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304348void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4349 void* pUserData)
4350{
4351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4352 tWDA_CbContext *pWDA;
4353 tDeleteBssParams *delbssParams;
4354
4355 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4356 "<------ %s, wdiStatus: %d",
4357 __func__, wdiStatus);
4358
4359 if (NULL == pWdaParams)
4360 {
4361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4362 "%s: Invalid pWdaParams pointer", __func__);
4363 VOS_ASSERT(0);
4364 return;
4365 }
4366
4367 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4368 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4369
4370 delbssParams->status = wdiStatus ;
4371
4372 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4373 {
4374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4375 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304376 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4377 WLAN_LOG_INDICATOR_HOST_DRIVER,
4378 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4379 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304380 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4381 }
4382
4383 return ;
4384}
Jeff Johnson295189b2012-06-20 16:38:30 -07004385
Jeff Johnson295189b2012-06-20 16:38:30 -07004386/*
4387 * FUNCTION: WDA_ProcessDelBssReq
4388 * Init DEL BSS req with WDI
4389 */
4390VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4391 tDeleteBssParams *delBssParam)
4392{
4393 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4395 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4396 sizeof(WDI_DelBSSReqParamsType)) ;
4397 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 if(NULL == wdiDelBssReqParam)
4401 {
4402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 VOS_ASSERT(0);
4405 return VOS_STATUS_E_NOMEM;
4406 }
4407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4408 if(NULL == pWdaParams)
4409 {
4410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 VOS_ASSERT(0);
4413 vos_mem_free(wdiDelBssReqParam);
4414 return VOS_STATUS_E_NOMEM;
4415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304417 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4418 wdiDelBssReqParam->pUserData = pWdaParams;
4419
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 /* Store Init Req pointer, as this will be used for response */
4421 /* store Params pass it to WDI */
4422 pWdaParams->pWdaContext = pWDA;
4423 pWdaParams->wdaMsgParam = delBssParam;
4424 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304425
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304427 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(IS_WDI_STATUS_FAILURE(status))
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4431 "Failure in Del BSS WDI API, free all the memory " );
4432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4433 vos_mem_free(pWdaParams) ;
4434 delBssParam->status = eSIR_FAILURE ;
4435 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 return CONVERT_WDI2VOS_STATUS(status) ;
4438}
Jeff Johnson295189b2012-06-20 16:38:30 -07004439/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304440 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304442 */
4443void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 void* pUserData)
4445{
4446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4447 tWDA_CbContext *pWDA;
4448 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004450 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 if(NULL == pWdaParams)
4452 {
4453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004454 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304455 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 return ;
4457 }
4458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4459 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004460 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4462 {
4463 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4464 {
4465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004466 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 VOS_ASSERT(0) ;
4468 }
4469 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304470 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304472 else
4473 {
4474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4475 "%s: Failure with status %d", __func__,
4476 wdiDelStaRsp->wdiStatus);
4477 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4478 WLAN_LOG_INDICATOR_HOST_DRIVER,
4479 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4480 FALSE, TRUE);
4481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4483 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 /*Reset the BA information corresponding to this STAIdx */
4485 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4486 WDA_INVALID_STA_INDEX;
4487 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304488 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 return ;
4491}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304492void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4493 void* pUserData)
4494{
4495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4496 tWDA_CbContext *pWDA;
4497 tDeleteStaParams *delStaParams;
4498
4499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4500 "<------ %s, wdiStatus: %d",
4501 __func__, wdiStatus);
4502
4503 if (NULL == pWdaParams)
4504 {
4505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4506 "%s: Invalid pWdaParams pointer", __func__);
4507 VOS_ASSERT(0);
4508 return;
4509 }
4510
4511 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4512 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4513
4514 delStaParams->status = wdiStatus ;
4515
4516 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4517 {
4518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4519 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304520 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4521 WLAN_LOG_INDICATOR_HOST_DRIVER,
4522 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4523 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304524 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4525 }
4526
4527 return ;
4528}
4529
Jeff Johnson295189b2012-06-20 16:38:30 -07004530/*
4531 * FUNCTION: WDA_ProcessDelStaReq
4532 * Init DEL STA req with WDI
4533 */
4534VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4535 tDeleteStaParams *delStaParam)
4536{
4537 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4539 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4540 sizeof(WDI_DelSTAReqParamsType)) ;
4541 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 if(NULL == wdiDelStaReqParam)
4545 {
4546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 VOS_ASSERT(0);
4549 return VOS_STATUS_E_NOMEM;
4550 }
4551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4552 if(NULL == pWdaParams)
4553 {
4554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 VOS_ASSERT(0);
4557 vos_mem_free(wdiDelStaReqParam);
4558 return VOS_STATUS_E_NOMEM;
4559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304561 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4562 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 /* Store Init Req pointer, as this will be used for response */
4564 /* store Params pass it to WDI */
4565 pWdaParams->pWdaContext = pWDA;
4566 pWdaParams->wdaMsgParam = delStaParam;
4567 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304568
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304570 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 if(IS_WDI_STATUS_FAILURE(status))
4572 {
4573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4574 "Failure in Del STA WDI API, free all the memory status = %d",
4575 status );
4576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4577 vos_mem_free(pWdaParams) ;
4578 delStaParam->status = eSIR_FAILURE ;
4579 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 return CONVERT_WDI2VOS_STATUS(status) ;
4582}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304583void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004584{
4585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4586 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304587 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 if(NULL == pWdaParams)
4591 {
4592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004593 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 VOS_ASSERT(0) ;
4595 return ;
4596 }
4597 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4598 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4600 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4602 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4603 pwdiAddSTASelfRsp->macSelfSta,
4604 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304605 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4606 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4607 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4608 {
4609 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4610 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4612 "%s: Failure with status %d failcnter %d", __func__,
4613 pwdiAddSTASelfRsp->wdiStatus,
4614 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4615 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4616 WLAN_LOG_INDICATOR_HOST_DRIVER,
4617 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4618 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 return ;
4622}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304623void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4624 void* pUserData)
4625{
4626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4627 tWDA_CbContext *pWDA;
4628 tAddStaSelfParams *addStaSelfParams;
4629
4630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4631 "<------ %s, wdiStatus: %d",
4632 __func__, wdiStatus);
4633
4634 if (NULL == pWdaParams)
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4637 "%s: Invalid pWdaParams pointer", __func__);
4638 VOS_ASSERT(0);
4639 return;
4640 }
4641
4642 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4643 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4644
4645 addStaSelfParams->status = wdiStatus ;
4646
4647 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4648 {
4649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4650 vos_mem_free(pWdaParams) ;
4651 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4652 = WDA_ADDSTA_REQ_WDI_FAIL;
4653 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4655 "%s: Failure with status %d failcnter %d", __func__,
4656 wdiStatus,
4657 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4658 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4659 WLAN_LOG_INDICATOR_HOST_DRIVER,
4660 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4661 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304662 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4663 }
4664
4665 return ;
4666}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304667
Jeff Johnson295189b2012-06-20 16:38:30 -07004668/*
4669 * FUNCTION: WDA_ProcessAddStaSelfReq
4670 *
4671 */
4672VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4673{
4674 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004675 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4677 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4678 sizeof(WDI_AddSTASelfReqParamsType)) ;
4679 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004681 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304682 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 if( NULL == wdiAddStaSelfReq )
4684 {
4685 VOS_ASSERT( 0 );
4686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004687 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304688 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4689 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 return( VOS_STATUS_E_NOMEM );
4691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 if( NULL == pWdaParams )
4694 {
4695 VOS_ASSERT( 0 );
4696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004697 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304698 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4699 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 vos_mem_free(wdiAddStaSelfReq) ;
4701 return( VOS_STATUS_E_NOMEM );
4702 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304703 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4704 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004706 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 /* Store Init Req pointer, as this will be used for response */
4708 /* store Params pass it to WDI */
4709 pWdaParams->pWdaContext = pWDA;
4710 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304711 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4712
4713 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4714 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004715
Jeff Johnson43971f52012-07-17 12:26:56 -07004716 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 {
4718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4719 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004720 wstatus );
4721 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4723 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304724 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4725 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 pAddStaSelfReq->status = eSIR_FAILURE ;
4727 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4728 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004729 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730}
Jeff Johnson295189b2012-06-20 16:38:30 -07004731/*
4732 * FUNCTION: WDA_DelSTASelfRespCallback
4733 *
4734 */
4735void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4736 wdiDelStaSelfRspParams , void* pUserData)
4737{
4738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4739 tWDA_CbContext *pWDA;
4740 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004742 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 if (NULL == pWdaParams)
4744 {
4745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004746 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 VOS_ASSERT(0);
4748 return;
4749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4751 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004753 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004754
4755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4756 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304757 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
4758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4759 "%s: Failure with status %d", __func__,
4760 wdiDelStaSelfRspParams->wdiStatus);
4761 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4762 WLAN_LOG_INDICATOR_HOST_DRIVER,
4763 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4764 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 return ;
4767}
Jeff Johnson295189b2012-06-20 16:38:30 -07004768/*
4769 * FUNCTION: WDA_DelSTASelfReqCallback
4770 *
4771 */
4772void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4773 void* pUserData)
4774{
4775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4776 tWDA_CbContext *pWDA;
4777 tDelStaSelfParams *delStaSelfParams;
4778
4779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304780 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782
4783 if (NULL == pWdaParams)
4784 {
4785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 VOS_ASSERT(0);
4788 return;
4789 }
4790
4791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4792 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4793
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004794 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795
4796 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4797 {
4798 VOS_ASSERT(0);
4799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4800 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304801 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4802 WLAN_LOG_INDICATOR_HOST_DRIVER,
4803 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4804 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4806 }
4807
4808 return ;
4809}
4810
4811/*
4812 * FUNCTION: WDA_DelSTASelfReq
4813 * Trigger Config STA processing in WDI
4814 */
4815VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4816 tDelStaSelfParams* pDelStaSelfReqParam)
4817{
4818 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004819 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 tWDA_ReqParams *pWdaParams = NULL;
4821 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4822 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4823 sizeof(WDI_DelSTASelfReqParamsType)) ;
4824
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 if( NULL == wdiDelStaSelfReq )
4828 {
4829 VOS_ASSERT( 0 );
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004831 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 return( VOS_STATUS_E_NOMEM );
4833 }
4834
4835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4836 if( NULL == pWdaParams )
4837 {
4838 VOS_ASSERT( 0 );
4839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004840 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 vos_mem_free(wdiDelStaSelfReq) ;
4842 return( VOS_STATUS_E_NOMEM );
4843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 pWdaParams->pWdaContext = pWDA;
4845 /* Store param pointer as passed in by caller */
4846 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4847 /* store Params pass it to WDI */
4848 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4850 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4851
4852 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4853 wdiDelStaSelfReq->pUserData = pWdaParams;
4854
Jeff Johnson43971f52012-07-17 12:26:56 -07004855 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4857
Jeff Johnson43971f52012-07-17 12:26:56 -07004858 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 {
4860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4861 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4862 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004863 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4865 vos_mem_free(pWdaParams) ;
4866 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4867 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4868 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004869 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870}
4871
Jeff Johnson295189b2012-06-20 16:38:30 -07004872/*
4873 * FUNCTION: WDA_SendMsg
4874 * Send Message back to PE
4875 */
4876void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4877 void *pBodyptr, tANI_U32 bodyVal)
4878{
4879 tSirMsgQ msg = {0} ;
4880 tANI_U32 status = VOS_STATUS_SUCCESS ;
4881 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 msg.type = msgType;
4883 msg.bodyval = bodyVal;
4884 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 if (VOS_STATUS_SUCCESS != status)
4887 {
4888 if(NULL != pBodyptr)
4889 {
4890 vos_mem_free(pBodyptr);
4891 }
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004893 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 VOS_ASSERT(0) ;
4895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 return ;
4897}
Jeff Johnson295189b2012-06-20 16:38:30 -07004898/*
4899 * FUNCTION: WDA_UpdateBSSParams
4900 * Translated WDA/PE BSS info into WDI BSS info..
4901 */
4902void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4903 WDI_ConfigBSSReqInfoType *wdiBssParams,
4904 tAddBssParams *wdaBssParams)
4905{
4906 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304907 v_U8_t i = 0;
4908
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 /* copy bssReq Params to WDI structure */
4910 vos_mem_copy(wdiBssParams->macBSSID,
4911 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4912 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4913 sizeof(tSirMacAddr)) ;
4914 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4915 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4916 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 wdiBssParams->ucShortSlotTimeSupported =
4918 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4920 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4921 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4922 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4923 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4924
4925 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4926 wdiBssParams->ucTXOPProtectionFullSupport =
4927 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4929 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4932 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4933 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4934 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4935
Chet Lanctot186b5732013-03-18 10:26:30 -07004936 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4937
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 /* copy SSID into WDI structure */
4939 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4940 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4941 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4943 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945#ifdef WLAN_FEATURE_VOWIFI
4946 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4947#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004950#ifdef WLAN_FEATURE_VOWIFI_11R
4951 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 if(wdiBssParams->bExtSetStaKeyParamValid)
4953 {
4954 /* copy set STA key params to WDI structure */
4955 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4956 wdaBssParams->extSetStaKeyParam.staIdx;
4957 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4958 wdaBssParams->extSetStaKeyParam.encType;
4959 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4960 wdaBssParams->extSetStaKeyParam.wepType;
4961 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4962 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4964 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004965 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4967 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4968 {
4969 WDA_GetWepKeysFromCfg( pWDA,
4970 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4971 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4972 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4973 }
4974 else
4975 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4977 keyIndex++)
4978 {
4979 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4980 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4981 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4982 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4983 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4984 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304985
4986 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4987 {
4988 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4989 {
4990 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4991 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4992 }
4993
4994 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4995 {
4996 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4997 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4998 }
4999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5000 FL("%s: Negated Keys"), __func__);
5001 }
5002 else
5003 {
5004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5005 FL("%s: No change in Keys "), __func__);
5006 vos_mem_copy(
5007 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5008 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5009 WLAN_MAX_KEY_RSC_LEN);
5010 vos_mem_copy(
5011 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5012 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5013 SIR_MAC_MAX_KEY_LENGTH);
5014 }
5015
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5017 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5018 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5019 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305021 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 }
5024 }
5025 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5026 }
5027 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5028 {
5029 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5030 sizeof(wdaBssParams->extSetStaKeyParam) );
5031 }
5032#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005033#ifdef WLAN_FEATURE_11AC
5034 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5035 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5036#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005037
5038 return ;
5039}
Jeff Johnson295189b2012-06-20 16:38:30 -07005040/*
5041 * FUNCTION: WDA_UpdateSTAParams
5042 * Translated WDA/PE BSS info into WDI BSS info..
5043 */
5044void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5045 WDI_ConfigStaReqInfoType *wdiStaParams,
5046 tAddStaParams *wdaStaParams)
5047{
5048 tANI_U8 i = 0;
5049 /* Update STA params */
5050 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5051 sizeof(tSirMacAddr)) ;
5052 wdiStaParams->usAssocId = wdaStaParams->assocId;
5053 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005054 wdiStaParams->staIdx = wdaStaParams->staIdx;
5055
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 wdiStaParams->ucShortPreambleSupported =
5057 wdaStaParams->shortPreambleSupported;
5058 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5059 sizeof(tSirMacAddr)) ;
5060 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5061
5062 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5063
5064 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5065 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5066 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5067 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5068 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5069 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5070 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5071
5072 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5073 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 wdiStaParams->wdiSupportedRates.opRateMode =
5075 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5077 {
5078 wdiStaParams->wdiSupportedRates.llbRates[i] =
5079 wdaStaParams->supportedRates.llbRates[i];
5080 }
5081 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5082 {
5083 wdiStaParams->wdiSupportedRates.llaRates[i] =
5084 wdaStaParams->supportedRates.llaRates[i];
5085 }
5086 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5087 {
5088 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5089 wdaStaParams->supportedRates.aniLegacyRates[i];
5090 }
5091 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5092 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005093#ifdef WLAN_FEATURE_11AC
5094 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5095 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5096 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5097 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5098#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5100 {
5101 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5102 wdaStaParams->supportedRates.supportedMCSSet[i];
5103 }
5104 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5105 wdaStaParams->supportedRates.rxHighestDataRate;
5106
5107 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5108
5109 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5110
5111 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5112 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5113 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5114
5115 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5116 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5117 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5118 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005120#ifdef WLAN_FEATURE_11AC
5121 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5122 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005123 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305124 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5125 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5126 * must be set by default */
5127 if ( wdiStaParams->vhtTxMUBformeeCapable )
5128 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005129#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005130 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5131 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 return ;
5133}
Jeff Johnson295189b2012-06-20 16:38:30 -07005134/*
5135 * -------------------------------------------------------------------------
5136 * CFG update to WDI
5137 * -------------------------------------------------------------------------
5138 */
5139
5140 /*
5141 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5142 * Convert the WNI CFG ID to HAL CFG ID
5143 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005144static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005145{
5146 switch(wniCfgId)
5147 {
5148 case WNI_CFG_STA_ID:
5149 return QWLAN_HAL_CFG_STA_ID;
5150 case WNI_CFG_CURRENT_TX_ANTENNA:
5151 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5152 case WNI_CFG_CURRENT_RX_ANTENNA:
5153 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5154 case WNI_CFG_LOW_GAIN_OVERRIDE:
5155 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5156 case WNI_CFG_POWER_STATE_PER_CHAIN:
5157 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5158 case WNI_CFG_CAL_PERIOD:
5159 return QWLAN_HAL_CFG_CAL_PERIOD;
5160 case WNI_CFG_CAL_CONTROL:
5161 return QWLAN_HAL_CFG_CAL_CONTROL;
5162 case WNI_CFG_PROXIMITY:
5163 return QWLAN_HAL_CFG_PROXIMITY;
5164 case WNI_CFG_NETWORK_DENSITY:
5165 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5166 case WNI_CFG_MAX_MEDIUM_TIME:
5167 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5168 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5169 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5170 case WNI_CFG_RTS_THRESHOLD:
5171 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5172 case WNI_CFG_SHORT_RETRY_LIMIT:
5173 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5174 case WNI_CFG_LONG_RETRY_LIMIT:
5175 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5176 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5177 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5178 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5179 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5180 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5181 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5182 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5183 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5184 case WNI_CFG_FIXED_RATE:
5185 return QWLAN_HAL_CFG_FIXED_RATE;
5186 case WNI_CFG_RETRYRATE_POLICY:
5187 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5188 case WNI_CFG_RETRYRATE_SECONDARY:
5189 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5190 case WNI_CFG_RETRYRATE_TERTIARY:
5191 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5192 case WNI_CFG_FORCE_POLICY_PROTECTION:
5193 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5194 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5195 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5196 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5197 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5198 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5199 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5200 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5201 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5202 case WNI_CFG_MAX_BA_SESSIONS:
5203 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5204 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5205 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5206 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5207 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5208 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5209 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5210 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5211 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5212 case WNI_CFG_STATS_PERIOD:
5213 return QWLAN_HAL_CFG_STATS_PERIOD;
5214 case WNI_CFG_CFP_MAX_DURATION:
5215 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5216#if 0 /*This is not part of CFG*/
5217 case WNI_CFG_FRAME_TRANS_ENABLED:
5218 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5219#endif
5220 case WNI_CFG_DTIM_PERIOD:
5221 return QWLAN_HAL_CFG_DTIM_PERIOD;
5222 case WNI_CFG_EDCA_WME_ACBK:
5223 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5224 case WNI_CFG_EDCA_WME_ACBE:
5225 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5226 case WNI_CFG_EDCA_WME_ACVI:
5227 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5228 case WNI_CFG_EDCA_WME_ACVO:
5229 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5230#if 0
5231 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5232 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5233 case WNI_CFG_TELE_BCN_TRANS_LI:
5234 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5235 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5236 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5237 case WNI_CFG_TELE_BCN_MAX_LI:
5238 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5239 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5240 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5241#endif
5242 case WNI_CFG_ENABLE_CLOSE_LOOP:
5243 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005244 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5245 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305246 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5247 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 default:
5249 {
5250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005251 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 wniCfgId);
5253 return VOS_STATUS_E_INVAL;
5254 }
5255 }
5256}
Jeff Johnson295189b2012-06-20 16:38:30 -07005257/*
5258 * FUNCTION: WDA_UpdateCfgCallback
5259 *
5260 */
5261void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5262{
5263 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5264 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5265 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005267 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005268 /*
5269 * currently there is no response message is expected between PE and
5270 * WDA, Failure return from WDI is a ASSERT condition
5271 */
5272 if(WDI_STATUS_SUCCESS != wdiStatus)
5273 {
5274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005275 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5277 }
5278
5279 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5280 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5281 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 return ;
5283}
Jeff Johnson295189b2012-06-20 16:38:30 -07005284/*
5285 * FUNCTION: WDA_UpdateCfg
5286 *
5287 */
5288VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5289{
5290
5291 WDI_Status status = WDI_STATUS_SUCCESS ;
5292 tANI_U32 val =0;
5293 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5294 tHalCfg *configData;
5295 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5296 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005298 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 if (NULL == pMac )
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005302 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 return VOS_STATUS_E_FAILURE;
5304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 if(WDA_START_STATE != pWDA->wdaState)
5306 {
5307 return VOS_STATUS_E_FAILURE;
5308 }
5309
5310 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5311 {
5312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005313 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 VOS_ASSERT(0);
5315 return VOS_STATUS_E_FAILURE;
5316 }
5317
5318 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5319 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 if(NULL == wdiCfgReqParam)
5321 {
5322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 VOS_ASSERT(0);
5325 return VOS_STATUS_E_NOMEM;
5326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5328 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 if(NULL == wdiCfgReqParam->pConfigBuffer)
5330 {
5331 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 vos_mem_free(wdiCfgReqParam);
5334 VOS_ASSERT(0);
5335 return VOS_STATUS_E_NOMEM;
5336 }
5337
5338 /*convert the WNI CFG Id to HAL CFG Id*/
5339 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5340 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5341
5342 /*TODO: revisit this for handling string parameters */
5343 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5344 &val) != eSIR_SUCCESS)
5345 {
5346 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005347 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5349 vos_mem_free(wdiCfgReqParam);
5350 return eSIR_FAILURE;
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5353 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5354 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5355 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5356 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5357
5358 /* store Params pass it to WDI */
5359 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5361 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5362 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(IS_WDI_STATUS_FAILURE(status))
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Failure in Update CFG WDI API, free all the memory " );
5367 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5368 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5369 pWDA->wdaWdiCfgApiMsgParam = NULL;
5370 /* Failure is not expected */
5371 VOS_ASSERT(0) ;
5372 }
5373#else
5374 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5375 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5376 pWDA->wdaWdiCfgApiMsgParam = NULL;
5377#endif
5378 return CONVERT_WDI2VOS_STATUS(status) ;
5379}
5380
Jeff Johnson295189b2012-06-20 16:38:30 -07005381VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5382 v_U8_t *pDefaultKeyId,
5383 v_U8_t *pNumKeys,
5384 WDI_KeysType *pWdiKeys )
5385{
5386 v_U32_t i, j, defKeyId = 0;
5387 v_U32_t val = SIR_MAC_KEY_LENGTH;
5388 VOS_STATUS status = WDI_STATUS_SUCCESS;
5389 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 if (NULL == pMac )
5391 {
5392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005393 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 return VOS_STATUS_E_FAILURE;
5395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5397 &defKeyId ))
5398 {
5399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5400 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5401 }
5402
5403 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 /* Need to extract ALL of the configured WEP Keys */
5405 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5406 {
5407 val = SIR_MAC_KEY_LENGTH;
5408 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5409 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5410 pWdiKeys[j].key,
5411 &val ))
5412 {
5413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005414 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 }
5416 else
5417 {
5418 pWdiKeys[j].keyId = (tANI_U8) i;
5419 /*
5420 * Actually, a DC (Don't Care) because
5421 * this is determined (and set) by PE/MLME
5422 */
5423 pWdiKeys[j].unicast = 0;
5424 /*
5425 * Another DC (Don't Care)
5426 */
5427 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5428 /* Another DC (Don't Care). Unused for WEP */
5429 pWdiKeys[j].paeRole = 0;
5430 /* Determined from wlan_cfgGetStr() above.*/
5431 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 j++;
5433 *pNumKeys = (tANI_U8) j;
5434 }
5435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005436 return status;
5437}
Jeff Johnson295189b2012-06-20 16:38:30 -07005438/*
5439 * FUNCTION: WDA_SetBssKeyReqCallback
5440 * send SET BSS key RSP back to PE
5441 */
5442void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5443{
5444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5445 tWDA_CbContext *pWDA;
5446 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 if(NULL == pWdaParams)
5450 {
5451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005452 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 VOS_ASSERT(0) ;
5454 return ;
5455 }
5456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5457 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305458 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5459 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5461 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005462 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 return ;
5465}
Jeff Johnson295189b2012-06-20 16:38:30 -07005466/*
5467 * FUNCTION: WDA_ProcessSetBssKeyReq
5468 * Request to WDI for programming the BSS key( key for
5469 * broadcast/multicast frames Encryption)
5470 */
5471VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5472 tSetBssKeyParams *setBssKeyParams )
5473{
5474 WDI_Status status = WDI_STATUS_SUCCESS ;
5475 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5476 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5477 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5478 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 if(NULL == wdiSetBssKeyParam)
5483 {
5484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 VOS_ASSERT(0);
5487 return VOS_STATUS_E_NOMEM;
5488 }
5489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5490 if(NULL == pWdaParams)
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 VOS_ASSERT(0);
5495 vos_mem_free(wdiSetBssKeyParam);
5496 return VOS_STATUS_E_NOMEM;
5497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 /* copy set BSS params to WDI structure */
5500 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5501 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5502 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 if(setBssKeyParams->encType != eSIR_ED_NONE)
5504 {
5505 if( setBssKeyParams->numKeys == 0 &&
5506 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5507 setBssKeyParams->encType == eSIR_ED_WEP104))
5508 {
5509 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5511 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5512 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5513 }
5514 else
5515 {
5516 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5517 {
5518 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5519 setBssKeyParams->key[keyIndex].keyId;
5520 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5521 setBssKeyParams->key[keyIndex].unicast;
5522 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5523 setBssKeyParams->key[keyIndex].keyDirection;
5524 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5525 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5526 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5527 setBssKeyParams->key[keyIndex].paeRole;
5528 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5529 setBssKeyParams->key[keyIndex].keyLength;
5530 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5531 setBssKeyParams->key[keyIndex].key,
5532 SIR_MAC_MAX_KEY_LENGTH);
5533 }
5534 }
5535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5537 setBssKeyParams->singleTidRc;
5538 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 /* Store set key pointer, as this will be used for response */
5540 /* store Params pass it to WDI */
5541 pWdaParams->pWdaContext = pWDA;
5542 pWdaParams->wdaMsgParam = setBssKeyParams;
5543 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5545 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5546
5547 if(IS_WDI_STATUS_FAILURE(status))
5548 {
5549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5550 "Failure in Set BSS Key Req WDI API, free all the memory " );
5551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5552 vos_mem_free(pWdaParams) ;
5553 setBssKeyParams->status = eSIR_FAILURE ;
5554 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 return CONVERT_WDI2VOS_STATUS(status) ;
5557}
Jeff Johnson295189b2012-06-20 16:38:30 -07005558/*
5559 * FUNCTION: WDA_RemoveBssKeyReqCallback
5560 * send SET BSS key RSP back to PE
5561 */
5562void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5563{
5564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5565 tWDA_CbContext *pWDA;
5566 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 if(NULL == pWdaParams)
5570 {
5571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005572 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 VOS_ASSERT(0) ;
5574 return ;
5575 }
5576 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5577 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5579 vos_mem_free(pWdaParams) ;
5580
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005581 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 return ;
5584}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305585
5586/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305587 * FUNCTION: WDA_GetFrameLogRspCallback
5588 * recieves get frame log response from FW
5589 */
5590void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5591 void* pUserData)
5592{
5593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5594 tWDA_CbContext *pWDA = NULL;
5595 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5596
5597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5598 "<------ Entering: %s " ,__func__);
5599 if(NULL == pWdaParams)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5602 "%s: pWdaParams received NULL", __func__);
5603 VOS_ASSERT(0) ;
5604 return ;
5605 }
5606
5607 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5608 if (NULL == pWDA)
5609 {
5610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5611 "%s:pWDA is NULL", __func__);
5612 VOS_ASSERT(0);
5613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5614 vos_mem_free(pWdaParams);
5615 return ;
5616 }
5617
5618 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5619 if(NULL == pGetFrameLogReqParams)
5620 {
5621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5622 "%s: pGetFrameLogReqParams received NULL", __func__);
5623 VOS_ASSERT(0);
5624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5625 vos_mem_free(pWdaParams);
5626 return;
5627 }
5628
Siddharth Bhal64246172015-02-27 01:04:37 +05305629 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305631 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5632 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305633 }
5634
5635 /* free WDI command buffer only */
5636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5637 vos_mem_free(pWdaParams->wdaMsgParam);
5638 vos_mem_free(pWdaParams);
5639
5640 return ;
5641
5642}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305643
5644/*
5645 * FUNCTION: WDA_RssiMonitorStopRspCallback
5646 * recieves Rssi Monitor stop response from FW
5647 */
5648void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5649 void* pUserData)
5650{
5651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5652 tSirRssiMonitorReq *pRssiMonitorReqParams;
5653
5654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5655 "<------ %s " ,__func__);
5656
5657 if(NULL == pWdaParams)
5658 {
5659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5660 "%s: pWdaParams received NULL", __func__);
5661 VOS_ASSERT(0);
5662 return ;
5663 }
5664
5665 if(NULL == pWdaParams->wdaMsgParam)
5666 {
5667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5668 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5669 VOS_ASSERT(0);
5670 vos_mem_free(pWdaParams);
5671 return ;
5672 }
5673
5674 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5675
5676 if(pRssiMonitorReqParams->rssiMonitorCallback)
5677 {
5678 pRssiMonitorReqParams->rssiMonitorCallback(
5679 pRssiMonitorReqParams->rssiMonitorCbContext,
5680 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5681 }
5682 else
5683 {
5684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5685 "%s: pFWLoggingInitParams callback is NULL", __func__);
5686 }
5687
5688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5689 vos_mem_free(pWdaParams->wdaMsgParam);
5690 vos_mem_free(pWdaParams);
5691
5692 return;
5693}
5694
5695/*
5696 * FUNCTION: WDA_RssiMonitorStartRspCallback
5697 * recieves Rssi Monitor start response from FW
5698 */
5699void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5700 void* pUserData)
5701{
5702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5703 tSirRssiMonitorReq *pRssiMonitorReqParams;
5704
5705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5706 "<------ %s " ,__func__);
5707
5708 if(NULL == pWdaParams)
5709 {
5710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5711 "%s: pWdaParams received NULL", __func__);
5712 VOS_ASSERT(0);
5713 return ;
5714 }
5715
5716 if(NULL == pWdaParams->wdaMsgParam)
5717 {
5718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5719 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5720 VOS_ASSERT(0);
5721 vos_mem_free(pWdaParams);
5722 return ;
5723 }
5724
5725 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5726
5727 if(pRssiMonitorReqParams->rssiMonitorCallback)
5728 {
5729 pRssiMonitorReqParams->rssiMonitorCallback(
5730 pRssiMonitorReqParams->rssiMonitorCbContext,
5731 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5732 }
5733 else
5734 {
5735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5736 "%s: pFWLoggingInitParams callback is NULL", __func__);
5737 }
5738
5739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5740 vos_mem_free(pWdaParams->wdaMsgParam);
5741 vos_mem_free(pWdaParams);
5742
5743 return;
5744}
5745
Siddharth Bhal64246172015-02-27 01:04:37 +05305746/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305747 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305748 * recieves Mgmt Logging init response from FW
5749 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305750void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305751 void* pUserData)
5752{
5753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305754 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305755 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305756
5757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5758 "<------ %s " ,__func__);
5759
5760 if(NULL == pWdaParams)
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5763 "%s: pWdaParams received NULL", __func__);
5764 VOS_ASSERT(0);
5765 return ;
5766 }
5767
5768 if(NULL == pWdaParams->wdaMsgParam)
5769 {
5770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5771 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5772 VOS_ASSERT(0);
5773 vos_mem_free(pWdaParams);
5774 return ;
5775 }
5776
c_manjeecfd1efb2015-09-25 19:32:34 +05305777 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5778 if(NULL == pWdaParams)
5779 {
5780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5781 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5782 VOS_ASSERT(0);
5783 vos_mem_free(pWdaParams);
5784 return;
5785 }
5786
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305787 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305788 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305789
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305790 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305791 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305792 pFWLoggingInitParams->fwlogInitCallback(
5793 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305794 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305795 }
5796 else
5797 {
5798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305799 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305800 }
5801
c_manjeecfd1efb2015-09-25 19:32:34 +05305802 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5804 vos_mem_free(pWdaParams->wdaMsgParam);
5805 vos_mem_free(pWdaParams);
5806
5807 return;
5808}
5809
5810/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305811 * FUNCTION: WDA_SpoofMacAddrRspCallback
5812 * recieves spoof mac addr response from FW
5813 */
5814void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5815{
5816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5817 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305818
Siddharth Bhal171788a2014-09-29 21:02:40 +05305819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5820 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305821
Siddharth Bhal171788a2014-09-29 21:02:40 +05305822 if(NULL == pWdaParams)
5823 {
5824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5825 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305826 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305827 return ;
5828 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305829 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305830
Siddharth Bhal029d6732014-10-09 21:31:23 +05305831 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305833 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305834 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305835 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5836 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305837
Siddharth Bhal171788a2014-09-29 21:02:40 +05305838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305839 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305840 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305841
5842 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305843}
5844
Jeff Johnson295189b2012-06-20 16:38:30 -07005845/*
5846 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5847 * Request to WDI to remove the BSS key( key for broadcast/multicast
5848 * frames Encryption)
5849 */
5850VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5851 tRemoveBssKeyParams *removeBssKeyParams )
5852{
5853 WDI_Status status = WDI_STATUS_SUCCESS ;
5854 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5855 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5856 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5857 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005859 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 if(NULL == wdiRemoveBssKeyParam)
5861 {
5862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 VOS_ASSERT(0);
5865 return VOS_STATUS_E_NOMEM;
5866 }
5867 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5868 if(NULL == pWdaParams)
5869 {
5870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 VOS_ASSERT(0);
5873 vos_mem_free(wdiRemoveBssKeyParam);
5874 return VOS_STATUS_E_NOMEM;
5875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 /* copy Remove BSS key params to WDI structure*/
5877 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5878 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5879 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5880 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5881 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 /* Store remove key pointer, as this will be used for response */
5883 /* store Params pass it to WDI */
5884 pWdaParams->pWdaContext = pWDA;
5885 pWdaParams->wdaMsgParam = removeBssKeyParams;
5886 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5888 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 if(IS_WDI_STATUS_FAILURE(status))
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5892 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5894 vos_mem_free(pWdaParams) ;
5895 removeBssKeyParams->status = eSIR_FAILURE ;
5896 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 return CONVERT_WDI2VOS_STATUS(status) ;
5899}
Jeff Johnson295189b2012-06-20 16:38:30 -07005900/*
5901 * FUNCTION: WDA_SetBssKeyReqCallback
5902 * send SET BSS key RSP back to PE
5903 */
5904void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5905{
5906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5907 tWDA_CbContext *pWDA;
5908 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 if(NULL == pWdaParams)
5912 {
5913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005914 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 VOS_ASSERT(0) ;
5916 return ;
5917 }
5918 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5919 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305920 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5921 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5923 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005924 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 return ;
5927}
Jeff Johnson295189b2012-06-20 16:38:30 -07005928/*
5929 * FUNCTION: WDA_ProcessSetStaKeyReq
5930 * Request to WDI for programming the STA key( key for Unicast frames
5931 * Encryption)
5932 */
5933VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5934 tSetStaKeyParams *setStaKeyParams )
5935{
5936 WDI_Status status = WDI_STATUS_SUCCESS ;
5937 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5938 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5939 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5940 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 if(NULL == wdiSetStaKeyParam)
5945 {
5946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 VOS_ASSERT(0);
5949 return VOS_STATUS_E_NOMEM;
5950 }
5951 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5952 if(NULL == pWdaParams)
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 VOS_ASSERT(0);
5957 vos_mem_free(wdiSetStaKeyParam);
5958 return VOS_STATUS_E_NOMEM;
5959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 /* copy set STA key params to WDI structure */
5963 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5964 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5965 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5966 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 if(setStaKeyParams->encType != eSIR_ED_NONE)
5968 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005969 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5971 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5972 {
5973 WDA_GetWepKeysFromCfg( pWDA,
5974 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5975 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5976 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5977 }
5978 else
5979 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5981 keyIndex++)
5982 {
5983 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5984 setStaKeyParams->key[keyIndex].keyId;
5985 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5986 setStaKeyParams->key[keyIndex].unicast;
5987 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5988 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5990 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5991 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5992 setStaKeyParams->key[keyIndex].paeRole;
5993 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5994 setStaKeyParams->key[keyIndex].keyLength;
5995 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5996 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5997 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5998 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5999 {
6000 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6001 }
6002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6004 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 }
6006 }
6007 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6008 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 /* Store set key pointer, as this will be used for response */
6010 /* store Params pass it to WDI */
6011 pWdaParams->pWdaContext = pWDA;
6012 pWdaParams->wdaMsgParam = setStaKeyParams;
6013 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6015 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 if(IS_WDI_STATUS_FAILURE(status))
6017 {
6018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6019 "Failure in set STA Key Req WDI API, free all the memory " );
6020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6021 vos_mem_free(pWdaParams) ;
6022 setStaKeyParams->status = eSIR_FAILURE ;
6023 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 return CONVERT_WDI2VOS_STATUS(status) ;
6026}
Jeff Johnson295189b2012-06-20 16:38:30 -07006027/*
6028 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6029 * send SET Bcast STA key RSP back to PE
6030 */
6031void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6032{
6033 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6034 tWDA_CbContext *pWDA;
6035 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006037 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 if(NULL == pWdaParams)
6039 {
6040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006041 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 VOS_ASSERT(0) ;
6043 return ;
6044 }
6045 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6046 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6048 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006049 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 return ;
6052}
6053
Jeff Johnson295189b2012-06-20 16:38:30 -07006054/*
6055 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6056 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6057 * Encryption)
6058 */
6059VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6060 tSetStaKeyParams *setStaKeyParams )
6061{
6062 WDI_Status status = WDI_STATUS_SUCCESS ;
6063 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6064 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6065 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6066 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 if(NULL == wdiSetStaKeyParam)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_ASSERT(0);
6075 return VOS_STATUS_E_NOMEM;
6076 }
6077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6078 if(NULL == pWdaParams)
6079 {
6080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 VOS_ASSERT(0);
6083 vos_mem_free(wdiSetStaKeyParam);
6084 return VOS_STATUS_E_NOMEM;
6085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 /* copy set STA key params to WDI structure */
6089 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6090 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6091 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6092 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 if(setStaKeyParams->encType != eSIR_ED_NONE)
6094 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6096 keyIndex++)
6097 {
6098 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6099 setStaKeyParams->key[keyIndex].keyId;
6100 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6101 setStaKeyParams->key[keyIndex].unicast;
6102 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6103 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006104 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6105 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6106 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6107 setStaKeyParams->key[keyIndex].paeRole;
6108 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6109 setStaKeyParams->key[keyIndex].keyLength;
6110 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6111 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6114 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 }
6116 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 /* Store set key pointer, as this will be used for response */
6118 /* store Params pass it to WDI */
6119 pWdaParams->pWdaContext = pWDA;
6120 pWdaParams->wdaMsgParam = setStaKeyParams;
6121 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6123 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 if(IS_WDI_STATUS_FAILURE(status))
6125 {
6126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6127 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6129 vos_mem_free(pWdaParams) ;
6130 setStaKeyParams->status = eSIR_FAILURE ;
6131 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 return CONVERT_WDI2VOS_STATUS(status) ;
6134}
Jeff Johnson295189b2012-06-20 16:38:30 -07006135/*
6136 * FUNCTION: WDA_RemoveStaKeyReqCallback
6137 * send SET BSS key RSP back to PE
6138 */
6139void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6140{
6141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6142 tWDA_CbContext *pWDA;
6143 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006145 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 if(NULL == pWdaParams)
6147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006149 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 VOS_ASSERT(0) ;
6151 return ;
6152 }
6153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6154 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6156 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006157 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 return ;
6160}
6161
Jeff Johnson295189b2012-06-20 16:38:30 -07006162/*
6163 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6164 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6165 */
6166VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6167 tRemoveStaKeyParams *removeStaKeyParams )
6168{
6169 WDI_Status status = WDI_STATUS_SUCCESS ;
6170 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6171 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6172 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6173 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006175 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 if(NULL == wdiRemoveStaKeyParam)
6177 {
6178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 VOS_ASSERT(0);
6181 return VOS_STATUS_E_NOMEM;
6182 }
6183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6184 if(NULL == pWdaParams)
6185 {
6186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 VOS_ASSERT(0);
6189 vos_mem_free(wdiRemoveStaKeyParam);
6190 return VOS_STATUS_E_NOMEM;
6191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 /* copy remove STA key params to WDI structure*/
6193 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6194 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6195 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6196 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6197 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 /* Store remove key pointer, as this will be used for response */
6199 /* store Params pass it to WDI */
6200 pWdaParams->pWdaContext = pWDA;
6201 pWdaParams->wdaMsgParam = removeStaKeyParams;
6202 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6204 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(IS_WDI_STATUS_FAILURE(status))
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6208 "Failure in remove STA Key Req WDI API, free all the memory " );
6209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6210 vos_mem_free(pWdaParams) ;
6211 removeStaKeyParams->status = eSIR_FAILURE ;
6212 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 return CONVERT_WDI2VOS_STATUS(status) ;
6215}
Jeff Johnson295189b2012-06-20 16:38:30 -07006216/*
6217 * FUNCTION: WDA_IsHandleSetLinkStateReq
6218 * Update the WDA state and return the status to handle this message or not
6219 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006220WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6221 tWDA_CbContext *pWDA,
6222 tLinkStateParams *linkStateParams)
6223{
6224 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 switch(linkStateParams->state)
6226 {
6227 case eSIR_LINK_PREASSOC_STATE:
6228 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6229 /*
6230 * set the WDA state to PRE ASSOC
6231 * copy the BSSID into pWDA to use it in join request and return,
6232 * No need to handle these messages.
6233 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006234 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6235 {
6236 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006238 }
6239 else
6240 {
6241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006242 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006243 VOS_ASSERT(0);
6244 }
6245
6246 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6247 {
6248 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006250 }
6251 else
6252 {
6253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006255 VOS_ASSERT(0);
6256 }
6257
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6259 *channel and after ) so reset the WDA state to ready when the second
6260 * time UMAC issue the link state with PREASSOC
6261 */
6262 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6263 {
6264 /* RESET WDA state back to WDA_READY_STATE */
6265 pWDA->wdaState = WDA_READY_STATE;
6266 }
6267 else
6268 {
6269 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6270 }
6271 //populate linkState info in WDACbCtxt
6272 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 default:
6275 if(pWDA->wdaState != WDA_READY_STATE)
6276 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006277 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6278 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6279 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6280 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6281 *the ASSERT in WDA_Stop during module unload.*/
6282 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6283 {
6284 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006285 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006286 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006287 else
6288 {
6289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006290 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006291 status = WDA_IGNORE_SET_LINK_STATE;
6292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 }
6294 break;
6295 }
6296
6297 return status;
6298}
Jeff Johnson295189b2012-06-20 16:38:30 -07006299/*
6300 * FUNCTION: WDA_SetLinkStateCallback
6301 * call back function for set link state from WDI
6302 */
6303void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6304{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306305 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 tLinkStateParams *linkStateParams;
6307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006309 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306310 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 {
6312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 VOS_ASSERT(0) ;
6315 return ;
6316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306318 if (NULL == pWDA)
6319 {
6320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6321 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6323 vos_mem_free(pWdaParams->wdaMsgParam);
6324 vos_mem_free(pWdaParams);
6325
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306326 VOS_ASSERT(0);
6327 return ;
6328 }
6329
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 /*
6332 * In STA mode start the BA activity check timer after association
6333 * and in AP mode start BA activity check timer after BSS start */
6334 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6335 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006336 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6337 ((status == WDI_STATUS_SUCCESS) &&
6338 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 {
6340 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 /*
6344 * No respone required for WDA_SET_LINK_STATE so free the request
6345 * param here
6346 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6348 vos_mem_free(pWdaParams);
6349
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 return ;
6351}
Jeff Johnson295189b2012-06-20 16:38:30 -07006352/*
6353 * FUNCTION: WDA_ProcessSetLinkState
6354 * Request to WDI to set the link status.
6355 */
6356VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6357 tLinkStateParams *linkStateParams)
6358{
6359 WDI_Status status = WDI_STATUS_SUCCESS ;
6360 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6361 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6362 sizeof(WDI_SetLinkReqParamsType)) ;
6363 tWDA_ReqParams *pWdaParams ;
6364 tpAniSirGlobal pMac;
6365 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6366
6367 if(NULL == pMac)
6368 {
6369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006370 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006372 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 return VOS_STATUS_E_FAILURE;
6374 }
6375
6376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 if(NULL == wdiSetLinkStateParam)
6379 {
6380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 VOS_ASSERT(0);
6383 return VOS_STATUS_E_NOMEM;
6384 }
6385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6386 if(NULL == pWdaParams)
6387 {
6388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 VOS_ASSERT(0);
6391 vos_mem_free(wdiSetLinkStateParam);
6392 return VOS_STATUS_E_NOMEM;
6393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 if(WDA_IGNORE_SET_LINK_STATE ==
6395 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6396 {
6397 status = WDI_STATUS_E_FAILURE;
6398 }
6399 else
6400 {
6401 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6402 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6404 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6406 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 pWdaParams->pWdaContext = pWDA;
6408 /* Store remove key pointer, as this will be used for response */
6409 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 /* store Params pass it to WDI */
6411 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6412 /* Stop Timer only other than GO role and concurrent session */
6413 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006414 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6416 {
6417 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6420 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 if(IS_WDI_STATUS_FAILURE(status))
6422 {
6423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6424 "Failure in set link state Req WDI API, free all the memory " );
6425 }
6426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 if(IS_WDI_STATUS_FAILURE(status))
6428 {
6429 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006430 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 vos_mem_free(pWdaParams);
6432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 return CONVERT_WDI2VOS_STATUS(status) ;
6434}
Jeff Johnson295189b2012-06-20 16:38:30 -07006435/*
6436 * FUNCTION: WDA_GetStatsReqParamsCallback
6437 * send the response to PE with Stats received from WDI
6438 */
6439void WDA_GetStatsReqParamsCallback(
6440 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6441 void* pUserData)
6442{
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306444 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006445
6446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006447 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 pGetPEStatsRspParams =
6449 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6450 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6451
6452 if(NULL == pGetPEStatsRspParams)
6453 {
6454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006455 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 VOS_ASSERT(0);
6457 return;
6458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306460 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6462 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006463
6464 //Fill the Session Id Properly in PE
6465 pGetPEStatsRspParams->sessionId = 0;
6466 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006467 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6469 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 vos_mem_copy( pGetPEStatsRspParams + 1,
6471 wdiGetStatsRsp + 1,
6472 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306473
6474 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6475 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6476 vosMsg.bodyval = 0;
6477 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6478 (vos_msg_t*)&vosMsg))
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6481 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6482 vos_mem_free(pGetPEStatsRspParams);
6483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006484
6485 return;
6486}
6487
Jeff Johnson295189b2012-06-20 16:38:30 -07006488/*
6489 * FUNCTION: WDA_ProcessGetStatsReq
6490 * Request to WDI to get the statistics
6491 */
6492VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6493 tAniGetPEStatsReq *pGetStatsParams)
6494{
6495 WDI_Status status = WDI_STATUS_SUCCESS ;
6496 WDI_GetStatsReqParamsType wdiGetStatsParam;
6497 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306498 vos_msg_t vosMsg;
6499
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006501 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6503 pGetStatsParams->staId;
6504 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6505 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 status = WDI_GetStatsReq(&wdiGetStatsParam,
6508 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 if(IS_WDI_STATUS_FAILURE(status))
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "Failure in Get Stats Req WDI API, free all the memory " );
6513 pGetPEStatsRspParams =
6514 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6515 if(NULL == pGetPEStatsRspParams)
6516 {
6517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006519 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006520 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006521 return VOS_STATUS_E_NOMEM;
6522 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306523 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6525 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6526 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306527
6528 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6529 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6530 vosMsg.bodyval = 0;
6531 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6532 (vos_msg_t*)&vosMsg))
6533 {
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6535 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6536 vos_mem_free(pGetPEStatsRspParams);
6537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 /* Free the request message */
6540 vos_mem_free(pGetStatsParams);
6541 return CONVERT_WDI2VOS_STATUS(status);
6542}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006543
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006544#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006545/*
6546 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6547 * send the response to PE with roam Rssi received from WDI
6548 */
6549void WDA_GetRoamRssiReqParamsCallback(
6550 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6551 void* pUserData)
6552{
6553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6554 tWDA_CbContext *pWDA = NULL;
6555 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6556 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6558 "<------ %s " ,__func__);
6559 if(NULL == pWdaParams)
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "%s: pWdaParams received NULL", __func__);
6563 VOS_ASSERT(0) ;
6564 return ;
6565 }
6566 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6567 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6568
6569 if(NULL == pGetRoamRssiReqParams)
6570 {
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6572 "%s: pGetRoamRssiReqParams received NULL", __func__);
6573 VOS_ASSERT(0);
6574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6575 vos_mem_free(pWdaParams);
6576 return ;
6577 }
6578 pGetRoamRssiRspParams =
6579 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6580
6581 if(NULL == pGetRoamRssiRspParams)
6582 {
6583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6584 "%s: VOS MEM Alloc Failure", __func__);
6585 VOS_ASSERT(0);
6586 return;
6587 }
6588 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6589 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006590 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006591 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6592 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6593
6594 /* Assign get roam rssi req (backup) in to the response */
6595 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6596
6597 /* free WDI command buffer */
6598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6599 vos_mem_free(pWdaParams) ;
6600
6601 /* send response to UMAC*/
6602 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6603
6604 return;
6605}
6606
6607
6608
6609/*
6610 * FUNCTION: WDA_ProcessGetRoamRssiReq
6611 * Request to WDI to get the statistics
6612 */
6613VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6614 tAniGetRssiReq *pGetRoamRssiParams)
6615{
6616 WDI_Status status = WDI_STATUS_SUCCESS ;
6617 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6618 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6619 tWDA_ReqParams *pWdaParams = NULL;
6620
6621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6622 "------> %s " ,__func__);
6623 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6624 pGetRoamRssiParams->staId;
6625 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6626
6627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6628 if(NULL == pWdaParams)
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6631 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306632 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006633 VOS_ASSERT(0);
6634 return VOS_STATUS_E_NOMEM;
6635 }
6636
6637 /* Store Init Req pointer, as this will be used for response */
6638 pWdaParams->pWdaContext = pWDA;
6639
6640 /* Take Get roam Rssi req backup as it stores the callback to be called after
6641 receiving the response */
6642 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6643 pWdaParams->wdaWdiApiMsgParam = NULL;
6644
6645 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6646 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6647 if(IS_WDI_STATUS_FAILURE(status))
6648 {
6649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6650 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6651 pGetRoamRssiRspParams =
6652 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6653 if(NULL == pGetRoamRssiRspParams)
6654 {
6655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6656 "%s: VOS MEM Alloc Failure", __func__);
6657 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306658 vos_mem_free(pGetRoamRssiParams);
6659 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006660 return VOS_STATUS_E_NOMEM;
6661 }
6662 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6663 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6664 pGetRoamRssiRspParams->rssi = 0;
6665 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6666 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6667 (void *)pGetRoamRssiRspParams, 0) ;
6668 }
6669 return CONVERT_WDI2VOS_STATUS(status);
6670}
6671#endif
6672
6673
Jeff Johnson295189b2012-06-20 16:38:30 -07006674/*
6675 * FUNCTION: WDA_UpdateEDCAParamCallback
6676 * call back function for Update EDCA params from WDI
6677 */
6678void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6679{
6680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6681 tEdcaParams *pEdcaParams;
6682
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006684 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 if(NULL == pWdaParams)
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006688 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_ASSERT(0) ;
6690 return ;
6691 }
6692 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6694 vos_mem_free(pWdaParams);
6695 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006696 return ;
6697}
Jeff Johnson295189b2012-06-20 16:38:30 -07006698/*
6699 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6700 * Request to WDI to Update the EDCA params.
6701 */
6702VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6703 tEdcaParams *pEdcaParams)
6704{
6705 WDI_Status status = WDI_STATUS_SUCCESS ;
6706 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6707 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6708 sizeof(WDI_UpdateEDCAParamsType)) ;
6709 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 if(NULL == wdiEdcaParam)
6713 {
6714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006717 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 return VOS_STATUS_E_NOMEM;
6719 }
6720 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6721 if(NULL == pWdaParams)
6722 {
6723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006724 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 VOS_ASSERT(0);
6726 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006727 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 return VOS_STATUS_E_NOMEM;
6729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006731 /*
6732 Since firmware is not using highperformance flag, we have removed
6733 this flag from wdiEDCAInfo structure to match sizeof the structure
6734 between host and firmware.In future if we are planning to use
6735 highperformance flag then Please define this flag in wdiEDCAInfo
6736 structure, update it here and send it to firmware. i.e.
6737 Following is the original line which we removed as part of the fix
6738 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6739 pEdcaParams->highPerformance;
6740 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6742 &pEdcaParams->acbe);
6743 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6744 &pEdcaParams->acbk);
6745 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6746 &pEdcaParams->acvi);
6747 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6748 &pEdcaParams->acvo);
6749 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 pWdaParams->pWdaContext = pWDA;
6751 /* Store remove key pointer, as this will be used for response */
6752 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 /* store Params pass it to WDI */
6754 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6756 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 if(IS_WDI_STATUS_FAILURE(status))
6758 {
6759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6760 "Failure in Update EDCA Params WDI API, free all the memory " );
6761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6762 vos_mem_free(pWdaParams);
6763 vos_mem_free(pEdcaParams);
6764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 return CONVERT_WDI2VOS_STATUS(status) ;
6766}
Jeff Johnson295189b2012-06-20 16:38:30 -07006767/*
6768 * FUNCTION: WDA_AddBAReqCallback
6769 * send ADD BA RSP back to PE
6770 */
6771void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6772 void* pUserData)
6773{
6774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6775 tWDA_CbContext *pWDA;
6776 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306779 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 {
6781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006782 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 VOS_ASSERT(0) ;
6784 return ;
6785 }
6786 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306787 if (NULL == pWDA)
6788 {
6789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6790 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6792 vos_mem_free(pWdaParams->wdaMsgParam);
6793 vos_mem_free(pWdaParams);
6794
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306795 VOS_ASSERT(0);
6796 return ;
6797 }
6798
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6801 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006802 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 return ;
6805}
6806
Jeff Johnson295189b2012-06-20 16:38:30 -07006807/*
6808 * FUNCTION: WDA_ProcessAddBAReq
6809 * Request to WDI to Update the ADDBA REQ params.
6810 */
6811VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306812 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006813{
Jeff Johnson43971f52012-07-17 12:26:56 -07006814 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6816 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6817 sizeof(WDI_AddBAReqParamsType)) ;
6818 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006820 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 if(NULL == wdiAddBAReqParam)
6822 {
6823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 VOS_ASSERT(0);
6826 return VOS_STATUS_E_NOMEM;
6827 }
6828 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6829 if(NULL == pWdaParams)
6830 {
6831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 VOS_ASSERT(0);
6834 vos_mem_free(wdiAddBAReqParam);
6835 return VOS_STATUS_E_NOMEM;
6836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 do
6838 {
6839 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 wdiAddBaInfo->ucSTAIdx = staIdx ;
6841 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306842 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 } while(0) ;
6844 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 pWdaParams->pWdaContext = pWDA;
6846 /* store Params pass it to WDI */
6847 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6848 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006849 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6850 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006851
Jeff Johnson43971f52012-07-17 12:26:56 -07006852 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 {
6854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006855 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6856 status = CONVERT_WDI2VOS_STATUS(wstatus);
6857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 vos_mem_free(pWdaParams);
6859 pAddBAReqParams->status = eSIR_FAILURE;
6860 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6861 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006862 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863}
Jeff Johnson295189b2012-06-20 16:38:30 -07006864/*
6865 * FUNCTION: WDA_AddBASessionReqCallback
6866 * send ADD BA SESSION RSP back to PE/(or TL)
6867 */
6868void WDA_AddBASessionReqCallback(
6869 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6870{
6871 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306873 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 if(NULL == pWdaParams)
6878 {
6879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006880 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 VOS_ASSERT(0) ;
6882 return ;
6883 }
6884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306885 if (NULL == pWDA)
6886 {
6887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6888 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6890 vos_mem_free(pWdaParams->wdaMsgParam);
6891 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306892 VOS_ASSERT(0);
6893 return ;
6894 }
6895
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 if( NULL == pAddBAReqParams )
6898 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006900 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6903 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 return ;
6905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6907 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306909 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 * another request to HAL(/WDI) (ADD_BA_REQ)
6911 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 if((VOS_STATUS_SUCCESS ==
6913 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306914 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 {
6916 /* Update TL with BA info received from HAL/WDI */
6917 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6918 wdiAddBaSession->usBaSessionID,
6919 wdiAddBaSession->ucSTAIdx,
6920 wdiAddBaSession->ucBaTID,
6921 wdiAddBaSession->ucBaBufferSize,
6922 wdiAddBaSession->ucWinSize,
6923 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306925 wdiAddBaSession->ucSTAIdx,
6926 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 }
6928 else
6929 {
6930 pAddBAReqParams->status =
6931 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6932
6933 /* Setting Flag to indicate that Set BA is success */
6934 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6935 {
6936 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6937 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6938 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 /*Reset the WDA state to READY */
6943 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 return ;
6945}
6946
Jeff Johnson295189b2012-06-20 16:38:30 -07006947/*
6948 * FUNCTION: WDA_ProcessAddBASessionReq
6949 * Request to WDI to Update the ADDBA REQ params.
6950 */
6951VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6952 tAddBAParams *pAddBAReqParams)
6953{
6954 WDI_Status status = WDI_STATUS_SUCCESS ;
6955 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6956 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6957 sizeof(WDI_AddBASessionReqParamsType)) ;
6958 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006959 WLANTL_STAStateType tlSTAState = 0;
6960
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006962 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 if(NULL == wdiAddBASessionReqParam)
6964 {
6965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 VOS_ASSERT(0);
6968 return VOS_STATUS_E_NOMEM;
6969 }
6970 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6971 if(NULL == pWdaParams)
6972 {
6973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 VOS_ASSERT(0);
6976 vos_mem_free(wdiAddBASessionReqParam);
6977 return VOS_STATUS_E_NOMEM;
6978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 /*
6980 * Populate ADD BA parameters and pass these paarmeters to WDI.
6981 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6982 * the state to track if these is BA recipient case or BA initiator
6983 * case.
6984 */
6985 do
6986 {
6987 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6988 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6989 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6990 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6991 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6992 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6993 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6996 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6997 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6998 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6999 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307000
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 }while(0) ;
7002 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 pWdaParams->pWdaContext = pWDA;
7004 /* Store ADD BA pointer, as this will be used for response */
7005 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7006 /* store Params pass it to WDI */
7007 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007008
7009 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7010 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7011 */
7012 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7013 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7014 {
7015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007016 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007017 status = WDI_STATUS_E_NOT_ALLOWED;
7018 pAddBAReqParams->status =
7019 CONVERT_WDI2SIR_STATUS(status) ;
7020 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7021 /*Reset the WDA state to READY */
7022 pWDA->wdaState = WDA_READY_STATE;
7023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7024 vos_mem_free(pWdaParams);
7025
7026 return CONVERT_WDI2VOS_STATUS(status) ;
7027 }
7028
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7030 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 if(IS_WDI_STATUS_FAILURE(status))
7032 {
7033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007034 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007036 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007037 pAddBAReqParams->status =
7038 CONVERT_WDI2SIR_STATUS(status) ;
7039 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007040 /*Reset the WDA state to READY */
7041 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 vos_mem_free(pWdaParams);
7044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007046}
Jeff Johnson295189b2012-06-20 16:38:30 -07007047/*
7048 * FUNCTION: WDA_DelBANotifyTL
7049 * send DEL BA IND to TL
7050 */
7051void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7052 tDelBAParams *pDelBAReqParams)
7053{
7054 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7055 //tSirMsgQ msg;
7056 vos_msg_t vosMsg;
7057 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 if(NULL == pDelBAInd)
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 VOS_ASSERT(0) ;
7063 return;
7064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7066 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7067 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7068 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007069
Jeff Johnson295189b2012-06-20 16:38:30 -07007070
7071 vosMsg.type = WDA_DELETEBA_IND;
7072 vosMsg.bodyptr = pDelBAInd;
7073 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7074 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7075 {
7076 vosStatus = VOS_STATUS_E_BADMSG;
7077 }
7078}
Jeff Johnson295189b2012-06-20 16:38:30 -07007079/*
7080 * FUNCTION: WDA_DelBAReqCallback
7081 * send DEL BA RSP back to PE
7082 */
7083void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7084{
7085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7086 tWDA_CbContext *pWDA;
7087 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007089 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(NULL == pWdaParams)
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007093 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 VOS_ASSERT(0) ;
7095 return ;
7096 }
7097 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307098
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 /* Notify TL about DEL BA in case of recipinet */
7101 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7102 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7103 {
7104 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 /*
7107 * No respone required for WDA_DELBA_IND so just free the request
7108 * param here
7109 */
7110 vos_mem_free(pDelBAReqParams);
7111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7112 vos_mem_free(pWdaParams);
7113 return ;
7114}
7115
Jeff Johnson295189b2012-06-20 16:38:30 -07007116/*
7117 * FUNCTION: WDA_ProcessDelBAReq
7118 * Request to WDI to Update the DELBA REQ params.
7119 */
7120VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7121 tDelBAParams *pDelBAReqParams)
7122{
7123 WDI_Status status = WDI_STATUS_SUCCESS ;
7124 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7125 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7126 sizeof(WDI_DelBAReqParamsType)) ;
7127 tWDA_ReqParams *pWdaParams ;
7128 tANI_U16 staIdx = 0;
7129 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 if(NULL == wdiDelBAReqParam)
7133 {
7134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 VOS_ASSERT(0);
7137 return VOS_STATUS_E_NOMEM;
7138 }
7139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7140 if(NULL == pWdaParams)
7141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_ASSERT(0);
7145 vos_mem_free(wdiDelBAReqParam);
7146 return VOS_STATUS_E_NOMEM;
7147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007148 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7149 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7150 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7151 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 pWdaParams->pWdaContext = pWDA;
7153 /* Store DEL BA pointer, as this will be used for response */
7154 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 /* store Params pass it to WDI */
7156 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7158 * maintained in WDA, so that WDA can retry for another BA session
7159 */
7160 staIdx = pDelBAReqParams->staIdx;
7161 tid = pDelBAReqParams->baTID;
7162 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 status = WDI_DelBAReq(wdiDelBAReqParam,
7164 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 if(IS_WDI_STATUS_FAILURE(status))
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7168 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7170 vos_mem_free(pWdaParams->wdaMsgParam);
7171 vos_mem_free(pWdaParams);
7172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007174}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007175
7176/*
7177 * FUNCTION: WDA_UpdateChReqCallback
7178 *
7179 */
7180void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7181{
Siddharth Bhala006c122014-05-03 12:13:27 +05307182 tWDA_ReqParams *pWdaParams;
7183 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7184 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7185 WDI_UpdateChannelReqinfoType *pChanInfoType;
7186 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007187
7188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7189 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307190 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307193 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007194 VOS_ASSERT(0);
7195 return;
7196 }
7197
Siddharth Bhala006c122014-05-03 12:13:27 +05307198 pWdaParams = (tWDA_ReqParams *)pUserData;
7199 pwdiUpdateChReqParam =
7200 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7201 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7202 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7203 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007204 /*
7205 * currently there is no response message is expected between PE and
7206 * WDA, Failure return from WDI is a ASSERT condition
7207 */
7208 vos_mem_free(pChanInfoType);
7209 vos_mem_free(pChanList);
7210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7211 vos_mem_free(pWdaParams);
7212
7213 return;
7214}
7215
7216/*
7217 * FUNCTION: WDA_ProcessUpdateChannelList
7218 * Request to WDI to Update the ChannelList params.
7219 */
7220VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7221 tSirUpdateChanList *pChanList)
7222{
7223 WDI_Status status = WDI_STATUS_SUCCESS;
7224 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7225 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7226 WDI_UpdateChannelReqinfoType *pChanInfoType;
7227 tWDA_ReqParams *pWdaParams;
7228 wpt_uint8 i;
7229
7230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7231 "------> %s " ,__func__);
7232 if(NULL == pChanList)
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7235 "%s: NULL pChanList", __func__);
7236 VOS_ASSERT(0);
7237 return VOS_STATUS_E_INVAL;
7238 }
7239
7240 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7241 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007243 "Update channel list capability Not Supported");
7244 vos_mem_free(pChanList);
7245 return VOS_STATUS_E_INVAL;
7246 }
7247
7248 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7249 sizeof(WDI_UpdateChReqParamsType));
7250 if(NULL == pwdiUpdateChReqParam)
7251 {
7252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7253 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7254 __func__);
7255 VOS_ASSERT(0);
7256 vos_mem_free(pChanList);
7257 return VOS_STATUS_E_NOMEM;
7258 }
7259 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7260 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7261 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7262 pChanList->numChan);
7263 if(NULL == pChanInfoType)
7264 {
7265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7266 "%s: VOS MEM Alloc Failure", __func__);
7267 VOS_ASSERT(0);
7268 vos_mem_free(pChanList);
7269 vos_mem_free(pwdiUpdateChReqParam);
7270 return VOS_STATUS_E_NOMEM;
7271 }
7272 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7273 * pChanList->numChan);
7274 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7275
7276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7277 if(NULL == pWdaParams)
7278 {
7279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7280 "%s: VOS MEM Alloc Failure", __func__);
7281 VOS_ASSERT(0);
7282 vos_mem_free(pChanList);
7283 vos_mem_free(pChanInfoType);
7284 vos_mem_free(pwdiUpdateChReqParam);
7285 return VOS_STATUS_E_NOMEM;
7286 }
7287 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7288
7289 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7290 {
7291 pChanInfoType->mhz =
7292 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7293
7294 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7295 pChanInfoType->band_center_freq2 = 0;
7296
7297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7298 "chan[%d] = %u", i, pChanInfoType->mhz);
7299 if (pChanList->chanParam[i].dfsSet)
7300 {
7301 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7303 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7304 pChanList->chanParam[i].dfsSet);
7305 }
7306
7307 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7308 {
7309 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7310 }
7311 else
7312 {
7313 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7314 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7315 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7316 }
7317
7318 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7319 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307320 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007321 pChanInfoType++;
7322 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007323 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7324 pWdaParams->pWdaContext = pWDA;
7325 pWdaParams->wdaMsgParam = (void *)pChanList;
7326 /* store Params pass it to WDI */
7327 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7328 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7329 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7330 if(IS_WDI_STATUS_FAILURE(status))
7331 {
7332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7333 "Failure in Update Channel REQ Params WDI API, free all the memory");
7334 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7335 vos_mem_free(pwdiUpdateChReqParam);
7336 vos_mem_free(pWdaParams->wdaMsgParam);
7337 vos_mem_free(pWdaParams);
7338 }
7339 return CONVERT_WDI2VOS_STATUS(status);
7340}
7341
Jeff Johnson295189b2012-06-20 16:38:30 -07007342/*
7343 * FUNCTION: WDA_AddTSReqCallback
7344 * send ADD TS RSP back to PE
7345 */
7346void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7347{
7348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307349 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 tAddTsParams *pAddTsReqParams;
7351
7352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007353 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 if(NULL == pWdaParams)
7355 {
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007357 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 VOS_ASSERT(0) ;
7359 return ;
7360 }
7361 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307362 if (NULL == pWDA)
7363 {
7364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7365 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7367 vos_mem_free(pWdaParams->wdaMsgParam);
7368 vos_mem_free(pWdaParams);
7369
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307370 VOS_ASSERT(0);
7371 return ;
7372 }
7373
Jeff Johnson295189b2012-06-20 16:38:30 -07007374 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7376 vos_mem_free(pWdaParams);
7377
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007378 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 return ;
7381}
7382
Jeff Johnson295189b2012-06-20 16:38:30 -07007383/*
7384 * FUNCTION: WDA_ProcessAddTSReq
7385 * Request to WDI to Update the ADD TS REQ params.
7386 */
7387VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7388 tAddTsParams *pAddTsReqParams)
7389{
7390 WDI_Status status = WDI_STATUS_SUCCESS ;
7391 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7392 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7393 sizeof(WDI_AddTSReqParamsType)) ;
7394 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007396 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 if(NULL == wdiAddTSReqParam)
7398 {
7399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 VOS_ASSERT(0);
7402 return VOS_STATUS_E_NOMEM;
7403 }
7404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7405 if(NULL == pWdaParams)
7406 {
7407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 VOS_ASSERT(0);
7410 vos_mem_free(wdiAddTSReqParam);
7411 return VOS_STATUS_E_NOMEM;
7412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7414 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 //TS IE
7416 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7417 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7418 pAddTsReqParams->tspec.length;
7419
7420 //TS IE : TS INFO : TRAFFIC
7421 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7422 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7423 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7424 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7426 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7428 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7429 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7430 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7431 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7432 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7434 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7435 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7436 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7437
7438 //TS IE : TS INFO : SCHEDULE
7439 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7440 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7441 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7442 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 //TS IE
7444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7445 pAddTsReqParams->tspec.nomMsduSz;
7446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7447 pAddTsReqParams->tspec.maxMsduSz;
7448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7449 pAddTsReqParams->tspec.minSvcInterval;
7450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7451 pAddTsReqParams->tspec.maxSvcInterval;
7452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7453 pAddTsReqParams->tspec.inactInterval;
7454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7455 pAddTsReqParams->tspec.suspendInterval;
7456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7457 pAddTsReqParams->tspec.svcStartTime;
7458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7459 pAddTsReqParams->tspec.minDataRate;
7460 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7461 pAddTsReqParams->tspec.meanDataRate;
7462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7463 pAddTsReqParams->tspec.peakDataRate;
7464 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7465 pAddTsReqParams->tspec.maxBurstSz;
7466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7467 pAddTsReqParams->tspec.delayBound;
7468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7469 pAddTsReqParams->tspec.minPhyRate;
7470 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7471 pAddTsReqParams->tspec.surplusBw;
7472 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7473 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 /* TODO: tAddTsParams doesn't have the following fields */
7475#if 0
7476 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7477 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7478 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7479 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7480#endif
7481 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7482
7483 pWdaParams->pWdaContext = pWDA;
7484 /* Store ADD TS pointer, as this will be used for response */
7485 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 /* store Params pass it to WDI */
7487 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 status = WDI_AddTSReq(wdiAddTSReqParam,
7489 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 if(IS_WDI_STATUS_FAILURE(status))
7491 {
7492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7493 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7495 vos_mem_free(pWdaParams);
7496 pAddTsReqParams->status = eSIR_FAILURE ;
7497 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007500}
7501
Jeff Johnson295189b2012-06-20 16:38:30 -07007502/*
7503 * FUNCTION: WDA_DelTSReqCallback
7504 * send DEL TS RSP back to PE
7505 */
7506void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7507{
7508 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7512 vos_mem_free(pWdaParams->wdaMsgParam) ;
7513 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 /*
7515 * No respone required for WDA_DEL_TS_REQ so just free the request
7516 * param here
7517 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 return ;
7519}
7520
Jeff Johnson295189b2012-06-20 16:38:30 -07007521/*
7522 * FUNCTION: WDA_ProcessDelTSReq
7523 * Request to WDI to Update the DELTS REQ params.
7524 */
7525VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7526 tDelTsParams *pDelTSReqParams)
7527{
7528 WDI_Status status = WDI_STATUS_SUCCESS ;
7529 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7530 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7531 sizeof(WDI_DelTSReqParamsType)) ;
7532 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007534 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 if(NULL == wdiDelTSReqParam)
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 VOS_ASSERT(0);
7540 return VOS_STATUS_E_NOMEM;
7541 }
7542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7543 if(NULL == pWdaParams)
7544 {
7545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 VOS_ASSERT(0);
7548 vos_mem_free(wdiDelTSReqParam);
7549 return VOS_STATUS_E_NOMEM;
7550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7552 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7553 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7554 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7555 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 pWdaParams->pWdaContext = pWDA;
7557 /* Store DEL TS pointer, as this will be used for response */
7558 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 /* store Params pass it to WDI */
7560 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 status = WDI_DelTSReq(wdiDelTSReqParam,
7562 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 if(IS_WDI_STATUS_FAILURE(status))
7564 {
7565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7566 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7568 vos_mem_free(pWdaParams->wdaMsgParam);
7569 vos_mem_free(pWdaParams);
7570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007572}
Jeff Johnson295189b2012-06-20 16:38:30 -07007573/*
7574 * FUNCTION: WDA_UpdateBeaconParamsCallback
7575 * Free the memory. No need to send any response to PE in this case
7576 */
7577void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7578{
7579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007581 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 if(NULL == pWdaParams)
7583 {
7584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007585 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 VOS_ASSERT(0) ;
7587 return ;
7588 }
7589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7590 vos_mem_free(pWdaParams->wdaMsgParam) ;
7591 vos_mem_free(pWdaParams);
7592 /*
7593 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7594 * param here
7595 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 return ;
7597}
Jeff Johnson295189b2012-06-20 16:38:30 -07007598/*
7599 * FUNCTION: WDA_ProcessUpdateBeaconParams
7600 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7601 */
7602VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7603 tUpdateBeaconParams *pUpdateBeaconParams)
7604{
7605 WDI_Status status = WDI_STATUS_SUCCESS ;
7606 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7607 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7608 sizeof(WDI_UpdateBeaconParamsType)) ;
7609 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007611 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 if(NULL == wdiUpdateBeaconParams)
7613 {
7614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 VOS_ASSERT(0);
7617 return VOS_STATUS_E_NOMEM;
7618 }
7619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7620 if(NULL == pWdaParams)
7621 {
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 VOS_ASSERT(0);
7625 vos_mem_free(wdiUpdateBeaconParams);
7626 return VOS_STATUS_E_NOMEM;
7627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7629 pUpdateBeaconParams->bssIdx;
7630 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7631 pUpdateBeaconParams->fShortPreamble;
7632 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7633 pUpdateBeaconParams->fShortSlotTime;
7634 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7635 pUpdateBeaconParams->beaconInterval;
7636 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7637 pUpdateBeaconParams->llaCoexist;
7638 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7639 pUpdateBeaconParams->llbCoexist;
7640 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7641 pUpdateBeaconParams->llgCoexist;
7642 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7643 pUpdateBeaconParams->ht20MhzCoexist;
7644 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7645 pUpdateBeaconParams->llnNonGFCoexist;
7646 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7647 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7648 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7649 pUpdateBeaconParams->fRIFSMode;
7650 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7651 pUpdateBeaconParams->paramChangeBitmap;
7652 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7653
7654 pWdaParams->pWdaContext = pWDA;
7655 /* Store UpdateBeacon Req pointer, as this will be used for response */
7656 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 /* store Params pass it to WDI */
7658 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7660 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7661 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 if(IS_WDI_STATUS_FAILURE(status))
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7665 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7667 vos_mem_free(pWdaParams->wdaMsgParam);
7668 vos_mem_free(pWdaParams);
7669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007671}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007672#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007673/*
7674 * FUNCTION: WDA_TSMStatsReqCallback
7675 * send TSM Stats RSP back to PE
7676 */
7677void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7678{
7679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7680 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007681 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7682 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007683
7684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007685 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 if(NULL == pWdaParams)
7687 {
7688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007689 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 VOS_ASSERT(0) ;
7691 return ;
7692 }
7693 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307694 if (NULL == pWDA)
7695 {
7696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7697 "%s:pWDA is NULL", __func__);
7698 VOS_ASSERT(0);
7699 return ;
7700 }
7701
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007702 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7703
7704 if(NULL == pGetTsmStatsReqParams)
7705 {
7706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7707 "%s: pGetTsmStatsReqParams received NULL", __func__);
7708 VOS_ASSERT(0);
7709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7710 vos_mem_free(pWdaParams);
7711 return;
7712 }
7713
7714 pTsmRspParams =
7715 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 if( NULL == pTsmRspParams )
7717 {
7718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007719 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 VOS_ASSERT( 0 );
7721 return ;
7722 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007723 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7724 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7725 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7726
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7728 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7729 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7730 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7731 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7732 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7733 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7734 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7735 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7736 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007737
7738 /* Assign get tsm stats req req (backup) in to the response */
7739 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7740
7741 /* free WDI command buffer */
7742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7743 vos_mem_free(pWdaParams);
7744
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 return ;
7747}
7748
7749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750/*
7751 * FUNCTION: WDA_ProcessTsmStatsReq
7752 * Request to WDI to get the TSM Stats params.
7753 */
7754VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007755 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007756{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007757 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007759 tWDA_ReqParams *pWdaParams = NULL;
7760 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7761
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007763 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7765 sizeof(WDI_TSMStatsReqParamsType));
7766 if(NULL == wdiTSMReqParam)
7767 {
7768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 VOS_ASSERT(0);
7771 return VOS_STATUS_E_NOMEM;
7772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7774 if(NULL == pWdaParams)
7775 {
7776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 VOS_ASSERT(0);
7779 vos_mem_free(wdiTSMReqParam);
7780 return VOS_STATUS_E_NOMEM;
7781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7783 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7784 pTsmStats->bssId,
7785 sizeof(wpt_macAddr));
7786 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7787
7788 pWdaParams->pWdaContext = pWDA;
7789 /* Store TSM Stats pointer, as this will be used for response */
7790 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007791 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 status = WDI_TSMStatsReq(wdiTSMReqParam,
7793 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 if(IS_WDI_STATUS_FAILURE(status))
7795 {
7796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7797 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007798 vos_mem_free(pWdaParams);
7799
7800 pGetTsmStatsRspParams =
7801 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7802 if(NULL == pGetTsmStatsRspParams)
7803 {
7804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7805 "%s: VOS MEM Alloc Failure", __func__);
7806 VOS_ASSERT(0);
7807 vos_mem_free(pTsmStats);
7808 return VOS_STATUS_E_NOMEM;
7809 }
7810 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7811 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7812 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7813
7814 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 return CONVERT_WDI2VOS_STATUS(status) ;
7817}
7818#endif
7819/*
7820 * FUNCTION: WDA_SendBeaconParamsCallback
7821 * No need to send any response to PE in this case
7822 */
7823void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7824{
7825
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 return ;
7829}
Jeff Johnson295189b2012-06-20 16:38:30 -07007830/*
7831 * FUNCTION: WDA_ProcessSendBeacon
7832 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7833 * start beacon trasmission
7834 */
7835VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7836 tSendbeaconParams *pSendbeaconParams)
7837{
7838 WDI_Status status = WDI_STATUS_SUCCESS ;
7839 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7843 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7844 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7845 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7847 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307848 /* p2pIeOffset should be atleast greater than timIeOffset */
7849 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7850 (pSendbeaconParams->p2pIeOffset <
7851 pSendbeaconParams->timIeOffset))
7852 {
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7854 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307855 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307856 VOS_ASSERT( 0 );
7857 return WDI_STATUS_E_FAILURE;
7858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7860 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 /* Copy the beacon template to local buffer */
7862 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7863 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7864 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7865
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7867 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 if(IS_WDI_STATUS_FAILURE(status))
7869 {
7870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7871 "Failure in SEND BEACON REQ Params WDI API" );
7872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 vos_mem_free(pSendbeaconParams);
7874 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007875}
Jeff Johnson295189b2012-06-20 16:38:30 -07007876/*
7877 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7878 * No need to send any response to PE in this case
7879 */
7880void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7881{
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 return ;
7885}
7886
Jeff Johnson295189b2012-06-20 16:38:30 -07007887/*
7888 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7889 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7890 * send probe response
7891 */
7892VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7893 tSendProbeRespParams *pSendProbeRspParams)
7894{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007895 WDI_Status status = WDI_STATUS_SUCCESS;
7896 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7897 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007899 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007900
7901 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307902 {
7903 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007904 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307905 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007906
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007908 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007910 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 /* Copy the Probe Response template to local buffer */
7913 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007914 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 pSendProbeRspParams->pProbeRespTemplate,
7916 pSendProbeRspParams->probeRespTemplateLen);
7917 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007918 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7920 WDI_PROBE_REQ_BITMAP_IE_LEN);
7921
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007922 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007923
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007924 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 if(IS_WDI_STATUS_FAILURE(status))
7927 {
7928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7929 "Failure in SEND Probe RSP Params WDI API" );
7930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007932 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007935#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007936/*
7937 * FUNCTION: WDA_SetMaxTxPowerCallBack
7938 * send the response to PE with power value received from WDI
7939 */
7940void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7941 void* pUserData)
7942{
7943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7944 tWDA_CbContext *pWDA = NULL;
7945 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7946
7947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007948 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007949 if(NULL == pWdaParams)
7950 {
7951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007952 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 VOS_ASSERT(0) ;
7954 return ;
7955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307957 if (NULL == pWDA)
7958 {
7959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7960 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7962 vos_mem_free(pWdaParams->wdaMsgParam);
7963 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307964 VOS_ASSERT(0);
7965 return ;
7966 }
7967
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 if( NULL == pMaxTxPowerParams )
7970 {
7971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007973 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7975 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 return ;
7977 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007978
Jeff Johnson295189b2012-06-20 16:38:30 -07007979
7980 /*need to free memory for the pointers used in the
7981 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7983 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007985
Jeff Johnson295189b2012-06-20 16:38:30 -07007986
7987 /* send response to UMAC*/
7988 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7989
7990 return;
7991}
Jeff Johnson295189b2012-06-20 16:38:30 -07007992/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007993 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 * Request to WDI to send set Max Tx Power Request
7995 */
7996 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7997 tMaxTxPowerParams *MaxTxPowerParams)
7998{
7999 WDI_Status status = WDI_STATUS_SUCCESS;
8000 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8001 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008002
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008004 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008005
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8007 sizeof(WDI_SetMaxTxPowerParamsType));
8008 if(NULL == wdiSetMaxTxPowerParams)
8009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 VOS_ASSERT(0);
8013 return VOS_STATUS_E_NOMEM;
8014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8016 if(NULL == pWdaParams)
8017 {
8018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 vos_mem_free(wdiSetMaxTxPowerParams);
8021 VOS_ASSERT(0);
8022 return VOS_STATUS_E_NOMEM;
8023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 /* Copy.Max.Tx.Power Params to WDI structure */
8025 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8026 MaxTxPowerParams->bssId,
8027 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8029 MaxTxPowerParams->selfStaMacAddr,
8030 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8032 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 pWdaParams->pWdaContext = pWDA;
8035 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 /* store Params pass it to WDI */
8037 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8039 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 if(IS_WDI_STATUS_FAILURE(status))
8041 {
8042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8043 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8045 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008046 /* send response to UMAC*/
8047 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 }
8049 return CONVERT_WDI2VOS_STATUS(status);
8050
8051}
Jeff Johnson295189b2012-06-20 16:38:30 -07008052#endif
schang86c22c42013-03-13 18:41:24 -07008053
8054/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008055 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8056 * send the response to PE with power value received from WDI
8057 */
8058void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8059 *pwdiSetMaxTxPowerPerBandRsp,
8060 void* pUserData)
8061{
8062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8063 tWDA_CbContext *pWDA = NULL;
8064 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8065
8066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8067 "<------ %s ", __func__);
8068 if (NULL == pWdaParams)
8069 {
8070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8071 "%s: pWdaParams received NULL", __func__);
8072 VOS_ASSERT(0);
8073 return ;
8074 }
8075 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308076 if (NULL == pWDA)
8077 {
8078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8079 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8081 vos_mem_free(pWdaParams->wdaMsgParam);
8082 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308083 VOS_ASSERT(0);
8084 return ;
8085 }
8086
Arif Hussaina5ebce02013-08-09 15:09:58 -07008087 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8088 if ( NULL == pMxTxPwrPerBandParams )
8089 {
8090 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8091 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8092 VOS_ASSERT(0);
8093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8094 vos_mem_free(pWdaParams);
8095 return;
8096 }
8097
8098 /*need to free memory for the pointers used in the
8099 WDA Process.Set Max Tx Power Req function*/
8100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8101 vos_mem_free(pWdaParams);
8102 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8103
8104 /* send response to UMAC*/
8105 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8106 pMxTxPwrPerBandParams, 0);
8107
8108 return;
8109}
8110
8111/*
8112 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8113 * Request to WDI to send set Max Tx Power Per band Request
8114 */
8115 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8116 tMaxTxPowerPerBandParams
8117 *MaxTxPowerPerBandParams)
8118{
8119 WDI_Status status = WDI_STATUS_SUCCESS;
8120 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8121 tWDA_ReqParams *pWdaParams = NULL;
8122
8123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8124 "------> %s ", __func__);
8125
8126 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8127 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8128
8129 if (NULL == wdiSetMxTxPwrPerBandParams)
8130 {
8131 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8132 "%s: VOS MEM Alloc Failure", __func__);
8133 VOS_ASSERT(0);
8134 return VOS_STATUS_E_NOMEM;
8135 }
8136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8137 if (NULL == pWdaParams)
8138 {
8139 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8140 "%s: VOS MEM Alloc Failure", __func__);
8141 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8142 VOS_ASSERT(0);
8143 return VOS_STATUS_E_NOMEM;
8144 }
8145 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8146 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8147 MaxTxPowerPerBandParams->bandInfo;
8148 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8149 MaxTxPowerPerBandParams->power;
8150 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8151 pWdaParams->pWdaContext = pWDA;
8152 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8153 /* store Params pass it to WDI */
8154 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8155 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8156 WDA_SetMaxTxPowerPerBandCallBack,
8157 pWdaParams);
8158 if (IS_WDI_STATUS_FAILURE(status))
8159 {
8160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8161 "Failure in SET MAX TX Power REQ Params WDI API,"
8162 " free all the memory");
8163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8164 vos_mem_free(pWdaParams);
8165 /* send response to UMAC*/
8166 WDA_SendMsg(pWDA,
8167 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8168 MaxTxPowerPerBandParams, 0);
8169 }
8170 return CONVERT_WDI2VOS_STATUS(status);
8171}
8172
8173/*
schang86c22c42013-03-13 18:41:24 -07008174 * FUNCTION: WDA_SetTxPowerCallBack
8175 * send the response to PE with power value received from WDI
8176 */
8177void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8178 void* pUserData)
8179{
8180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8181 tWDA_CbContext *pWDA = NULL;
8182 tSirSetTxPowerReq *pTxPowerParams = NULL;
8183
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8185 "<------ %s ", __func__);
8186 if(NULL == pWdaParams)
8187 {
8188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8189 "%s: pWdaParams received NULL", __func__);
8190 VOS_ASSERT(0) ;
8191 return ;
8192 }
8193 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308194 if (NULL == pWDA)
8195 {
8196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8197 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8199 vos_mem_free(pWdaParams->wdaMsgParam);
8200 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308201 VOS_ASSERT(0);
8202 return ;
8203 }
8204
schang86c22c42013-03-13 18:41:24 -07008205 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8206 if(NULL == pTxPowerParams)
8207 {
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8209 "%s: pTxPowerParams received NULL " ,__func__);
8210 VOS_ASSERT(0);
8211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8212 vos_mem_free(pWdaParams);
8213 return ;
8214 }
8215
8216 /*need to free memory for the pointers used in the
8217 WDA Process.Set Max Tx Power Req function*/
8218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8219 vos_mem_free(pWdaParams);
8220
8221 /* send response to UMAC*/
8222 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8223 return;
8224}
8225
8226/*
8227 * FUNCTION: WDA_ProcessSetTxPowerReq
8228 * Request to WDI to send set Tx Power Request
8229 */
8230 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8231 tSirSetTxPowerReq *txPowerParams)
8232{
8233 WDI_Status status = WDI_STATUS_SUCCESS;
8234 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8235 tWDA_ReqParams *pWdaParams = NULL;
8236
8237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8238 "------> %s ", __func__);
8239
8240 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8241 sizeof(WDI_SetTxPowerParamsType));
8242 if(NULL == wdiSetTxPowerParams)
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8245 "%s: VOS MEM Alloc Failure", __func__);
8246 VOS_ASSERT(0);
8247 return VOS_STATUS_E_NOMEM;
8248 }
8249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8250 if(NULL == pWdaParams)
8251 {
8252 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8253 "%s: VOS MEM Alloc Failure", __func__);
8254 vos_mem_free(wdiSetTxPowerParams);
8255 VOS_ASSERT(0);
8256 return VOS_STATUS_E_NOMEM;
8257 }
8258 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8259 txPowerParams->bssIdx;
8260 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8261 txPowerParams->mwPower;
8262 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8263 pWdaParams->pWdaContext = pWDA;
8264 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8265 /* store Params pass it to WDI */
8266 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8267 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8268 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8269 if(IS_WDI_STATUS_FAILURE(status))
8270 {
8271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8272 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8274 vos_mem_free(pWdaParams);
8275 /* send response to UMAC*/
8276 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8277 }
8278 return CONVERT_WDI2VOS_STATUS(status);
8279}
8280
Jeff Johnson295189b2012-06-20 16:38:30 -07008281/*
8282 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8283 * Free the memory. No need to send any response to PE in this case
8284 */
8285void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8286{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8288
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008290 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008291
8292 if(NULL == pWdaParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008295 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008296 VOS_ASSERT(0) ;
8297 return ;
8298 }
8299
8300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8301 vos_mem_free(pWdaParams->wdaMsgParam) ;
8302 vos_mem_free(pWdaParams);
8303
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 /*
8305 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8306 * so just free the request param here
8307 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 return ;
8309}
8310
Jeff Johnson295189b2012-06-20 16:38:30 -07008311/*
8312 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8313 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8314 */
8315VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8316 tP2pPsParams *pP2pPsConfigParams)
8317{
8318 WDI_Status status = WDI_STATUS_SUCCESS ;
8319 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8320 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8321 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008322 tWDA_ReqParams *pWdaParams = NULL;
8323
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008325 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 if(NULL == wdiSetP2PGONOAReqParam)
8327 {
8328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008329 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308330 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 VOS_ASSERT(0);
8332 return VOS_STATUS_E_NOMEM;
8333 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008334
8335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8336 if(NULL == pWdaParams)
8337 {
8338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008339 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008340 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008341 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008342 VOS_ASSERT(0);
8343 return VOS_STATUS_E_NOMEM;
8344 }
8345
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8347 pP2pPsConfigParams->opp_ps;
8348 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8349 pP2pPsConfigParams->ctWindow;
8350 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8351 pP2pPsConfigParams->count;
8352 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8353 pP2pPsConfigParams->duration;
8354 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8355 pP2pPsConfigParams->interval;
8356 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8357 pP2pPsConfigParams->single_noa_duration;
8358 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8359 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008360
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8362 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008363 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8364
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008366 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8367 pWdaParams->pWdaContext = pWDA;
8368
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008370 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8371
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 if(IS_WDI_STATUS_FAILURE(status))
8373 {
8374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8375 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8377 vos_mem_free(pWdaParams->wdaMsgParam);
8378 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 return CONVERT_WDI2VOS_STATUS(status);
8381
Jeff Johnson295189b2012-06-20 16:38:30 -07008382}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308383
8384#ifdef FEATURE_WLAN_TDLS
8385/*
8386 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8387 * Free the memory. No need to send any response to PE in this case
8388 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308389void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8390 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308391{
8392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8393 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308394 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308395
8396
8397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8398 "<------ %s " ,__func__);
8399 if(NULL == pWdaParams)
8400 {
8401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8402 "%s: pWdaParams received NULL", __func__);
8403 VOS_ASSERT(0) ;
8404 return ;
8405 }
8406 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8407
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308408 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308409 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8413 vos_mem_free(pWdaParams->wdaMsgParam);
8414 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308415 VOS_ASSERT(0);
8416 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308417 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308418
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308419 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8420 if( NULL == pTdlsLinkEstablishParams )
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8423 "%s: pTdlsLinkEstablishParams "
8424 "received NULL " ,__func__);
8425 VOS_ASSERT(0);
8426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8427 vos_mem_free(pWdaParams);
8428 return ;
8429 }
8430 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8431 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308433 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308434 /* send response to UMAC*/
8435 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8436
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308437 return ;
8438}
8439
8440VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8441 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8442{
8443 WDI_Status status = WDI_STATUS_SUCCESS ;
8444 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8445 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8446 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8447 tWDA_ReqParams *pWdaParams = NULL;
8448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8449 "------> %s " ,__func__);
8450 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8451 {
8452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8453 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308454 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308455 VOS_ASSERT(0);
8456 return VOS_STATUS_E_NOMEM;
8457 }
8458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8459 if(NULL == pWdaParams)
8460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8462 "%s: VOS MEM Alloc Failure", __func__);
8463 vos_mem_free(pTdlsLinkEstablishParams);
8464 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8465 VOS_ASSERT(0);
8466 return VOS_STATUS_E_NOMEM;
8467 }
8468 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308469 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308470 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308471 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308472 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308473 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308474 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308475 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308476 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308477 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308478 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8479 pTdlsLinkEstablishParams->isOffChannelSupported;
8480
8481 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8482 pTdlsLinkEstablishParams->validChannels,
8483 pTdlsLinkEstablishParams->validChannelsLen);
8484
8485 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8486 pTdlsLinkEstablishParams->validChannelsLen;
8487
8488 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8489 pTdlsLinkEstablishParams->validOperClasses,
8490 pTdlsLinkEstablishParams->validOperClassesLen);
8491 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8492 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308493
8494 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8495 /* Store msg pointer from PE, as this will be used for response */
8496 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8497 /* store Params pass it to WDI */
8498 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8499 pWdaParams->pWdaContext = pWDA;
8500
8501 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8502 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8503 WDA_SetTDLSLinkEstablishReqParamsCallback,
8504 pWdaParams);
8505 if(IS_WDI_STATUS_FAILURE(status))
8506 {
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8508 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8510 vos_mem_free(pWdaParams->wdaMsgParam);
8511 vos_mem_free(pWdaParams);
8512 }
8513 return CONVERT_WDI2VOS_STATUS(status);
8514}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308515
8516// tdlsoffchan
8517void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8518 void* pUserData)
8519{
8520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8521 tWDA_CbContext *pWDA = NULL;
8522 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8523
8524
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8526 "<------ %s " ,__func__);
8527 if(NULL == pWdaParams)
8528 {
8529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8530 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308531 VOS_ASSERT(0) ;
8532 return ;
8533 }
8534 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8535
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308536 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308537 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8539 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8541 vos_mem_free(pWdaParams->wdaMsgParam);
8542 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308543 VOS_ASSERT(0);
8544 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308545 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308546
Atul Mittalc0f739f2014-07-31 13:47:47 +05308547 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308548 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308549 {
8550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8551 "%s: pTdlsChanSwitchParams "
8552 "received NULL " ,__func__);
8553 VOS_ASSERT(0);
8554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8555 vos_mem_free(pWdaParams);
8556 return ;
8557 }
8558 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8559 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8561 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308562 /* send response to UMAC*/
8563 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308564
8565 return ;
8566}
8567VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8568 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8569{
8570 WDI_Status status = WDI_STATUS_SUCCESS ;
8571 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8572 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8573 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8574 tWDA_ReqParams *pWdaParams = NULL;
8575
8576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8577 "Enter: %s ",__func__);
8578 if(NULL == wdiSetTDLSChanSwitchReqParam)
8579 {
8580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8581 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308582 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308583 VOS_ASSERT(0);
8584 return VOS_STATUS_E_NOMEM;
8585 }
8586
8587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8588 if(NULL == pWdaParams)
8589 {
8590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8591 "%s: VOS MEM Alloc Failure", __func__);
8592 vos_mem_free(pTdlsChanSwitchParams);
8593 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8594 VOS_ASSERT(0);
8595 return VOS_STATUS_E_NOMEM;
8596 }
8597 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8598 pTdlsChanSwitchParams->staIdx;
8599 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8600 pTdlsChanSwitchParams->tdlsSwMode;
8601 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8602 pTdlsChanSwitchParams->operClass;
8603 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8604 pTdlsChanSwitchParams->tdlsOffCh;
8605 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8606 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8607
8608
8609 /* Store msg pointer from PE, as this will be used for response */
8610 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8611 /* store Params pass it to WDI */
8612 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8613 pWdaParams->pWdaContext = pWDA;
8614 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8615 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8616 WDA_SetTDLSChanSwitchReqParamsCallback,
8617 pWdaParams);
8618 if(IS_WDI_STATUS_FAILURE(status))
8619 {
8620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8621 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8623 vos_mem_free(pWdaParams->wdaMsgParam);
8624 vos_mem_free(pWdaParams);
8625 }
8626 return CONVERT_WDI2VOS_STATUS(status);
8627}
8628#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308629
8630
Jeff Johnson295189b2012-06-20 16:38:30 -07008631#ifdef WLAN_FEATURE_VOWIFI_11R
8632/*
8633 * FUNCTION: WDA_AggrAddTSReqCallback
8634 * send ADD AGGREGATED TS RSP back to PE
8635 */
8636void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8637{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308639 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008640 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008643 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008644 if(NULL == pWdaParams)
8645 {
8646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008647 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008648 VOS_ASSERT(0) ;
8649 return ;
8650 }
8651
8652 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308653 if (NULL == pWDA)
8654 {
8655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8656 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8658 vos_mem_free(pWdaParams->wdaMsgParam);
8659 vos_mem_free(pWdaParams);
8660
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308661 VOS_ASSERT(0);
8662 return ;
8663 }
8664
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008665 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008666
8667 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8668 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008669 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008672
8673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8674 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 return ;
8676}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008677/*
8678 * FUNCTION: WDA_ProcessAddTSReq
8679 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8680 */
8681VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8682 tAggrAddTsParams *pAggrAddTsReqParams)
8683{
8684 WDI_Status status = WDI_STATUS_SUCCESS ;
8685 int i;
8686 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008687 tWDA_ReqParams *pWdaParams = NULL;
8688
8689
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8693 sizeof(WDI_AggrAddTSReqParamsType)) ;
8694 if(NULL == wdiAggrAddTSReqParam)
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308698 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008699 VOS_ASSERT(0);
8700 return VOS_STATUS_E_NOMEM;
8701 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008702
8703
8704 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8705 if(NULL == pWdaParams)
8706 {
8707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008708 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008709 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008710 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008711 VOS_ASSERT(0);
8712 return VOS_STATUS_E_NOMEM;
8713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8715 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8716 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8718 {
8719 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8720 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8721 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8723 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8724 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8725 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8726 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8727 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8728 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8729 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8730 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8731 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8732 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8733 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8734 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8735 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8736 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8737 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8739 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8741 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8742 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8743 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8744 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8745 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8746 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8747 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8748 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8749 pAggrAddTsReqParams->tspec[i].inactInterval;
8750 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8751 pAggrAddTsReqParams->tspec[i].suspendInterval;
8752 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8753 pAggrAddTsReqParams->tspec[i].svcStartTime;
8754 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8755 pAggrAddTsReqParams->tspec[i].minDataRate;
8756 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8757 pAggrAddTsReqParams->tspec[i].meanDataRate;
8758 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8759 pAggrAddTsReqParams->tspec[i].peakDataRate;
8760 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8761 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8762 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8763 pAggrAddTsReqParams->tspec[i].delayBound;
8764 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8765 pAggrAddTsReqParams->tspec[i].minPhyRate;
8766 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8767 pAggrAddTsReqParams->tspec[i].surplusBw;
8768 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8769 pAggrAddTsReqParams->tspec[i].mediumTime;
8770 }
8771
8772 /* TODO: tAggrAddTsParams doesn't have the following fields */
8773#if 0
8774 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8775 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8776 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8777 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8778#endif
8779 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8780
8781 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008782 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008784 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8785
8786 pWdaParams->pWdaContext = pWDA;
8787
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008789 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8790
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 if(IS_WDI_STATUS_FAILURE(status))
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8794 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8796 vos_mem_free(pWdaParams);
8797
8798 /* send the failure response back to PE*/
8799 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8800 {
8801 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8802 }
8803
8804 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8805 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 return CONVERT_WDI2VOS_STATUS(status) ;
8808}
8809#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008810/*
Mihir Shetea4306052014-03-25 00:02:54 +05308811 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 * send Enter IMPS RSP back to PE
8813 */
Mihir Shetea4306052014-03-25 00:02:54 +05308814void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008815{
Mihir Shetea4306052014-03-25 00:02:54 +05308816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308817 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308818
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308820 "<------ %s status=%d" ,__func__,status);
8821 if(NULL == pWdaParams)
8822 {
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8824 "%s: pWdaParams received NULL", __func__);
8825 VOS_ASSERT(0);
8826 return;
8827 }
8828
8829 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308830 if (NULL == pWDA)
8831 {
8832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8833 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8835 vos_mem_free(pWdaParams->wdaMsgParam);
8836 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308837 VOS_ASSERT(0);
8838 return ;
8839 }
Mihir Shetea4306052014-03-25 00:02:54 +05308840
8841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8842 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308843 if (WDI_STATUS_SUCCESS != status)
8844 {
8845 pWDA->failureCounts.enterImpsFailureCount++;
8846 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8847 pWDA->failureCounts.enterImpsFailureCount)
8848 {
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8850 "%s: Status %d fail count %d", __func__, status,
8851 pWDA->failureCounts.enterImpsFailureCount);
8852 pWDA->failureCounts.enterImpsFailureCount = 0;
8853 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8854 WLAN_LOG_INDICATOR_HOST_DRIVER,
8855 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8856 FALSE, TRUE);
8857 }
8858 }
8859 else
8860 {
8861 pWDA->failureCounts.enterImpsFailureCount = 0;
8862 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008863 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 return ;
8865}
Mihir Shetea4306052014-03-25 00:02:54 +05308866
8867
8868/*
8869 * FUNCTION: WDA_EnterImpsReqCallback
8870 * Free memory and send Enter IMPS RSP back to PE.
8871 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8872 */
8873void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8874{
8875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308876 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308877
8878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8879 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8880
8881 if(NULL == pWdaParams)
8882 {
8883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8884 "%s: pWdaParams received NULL", __func__);
8885 VOS_ASSERT(0);
8886 return;
8887 }
8888
8889 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308890 if (NULL == pWDA)
8891 {
8892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8893 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8895 vos_mem_free(pWdaParams->wdaMsgParam);
8896 vos_mem_free(pWdaParams);
8897
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308898 VOS_ASSERT(0);
8899 return ;
8900 }
8901
Mihir Shetea4306052014-03-25 00:02:54 +05308902
8903 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8904 {
8905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8906 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308907 pWDA->failureCounts.enterImpsFailureCount++;
8908 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8909 pWDA->failureCounts.enterImpsFailureCount)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8912 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8913 pWDA->failureCounts.enterImpsFailureCount);
8914 pWDA->failureCounts.enterImpsFailureCount = 0;
8915 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8916 WLAN_LOG_INDICATOR_HOST_DRIVER,
8917 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8918 FALSE, TRUE);
8919 }
Mihir Shetea4306052014-03-25 00:02:54 +05308920 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8921 CONVERT_WDI2SIR_STATUS(wdiStatus));
8922 }
8923
8924 return;
8925}
Jeff Johnson295189b2012-06-20 16:38:30 -07008926/*
8927 * FUNCTION: WDA_ProcessEnterImpsReq
8928 * Request to WDI to Enter IMPS power state.
8929 */
8930VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8931{
8932 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308933 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8934 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308935 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008937 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308938
8939
8940 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8941 if (NULL == wdiEnterImpsReqParams)
8942 {
8943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8944 "%s: VOS MEM Alloc Failure", __func__);
8945 VOS_ASSERT(0);
8946 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8947 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8948 return VOS_STATUS_E_NOMEM;
8949 }
8950
8951 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8952 if (NULL == pWdaParams)
8953 {
8954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8955 "%s: VOS MEM Alloc Failure", __func__);
8956 VOS_ASSERT(0);
8957 vos_mem_free(wdiEnterImpsReqParams);
8958 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8959 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8960 return VOS_STATUS_E_NOMEM;
8961 }
8962
8963 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8964 wdiEnterImpsReqParams->pUserData = pWdaParams;
8965
8966 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8967 pWdaParams->wdaMsgParam = NULL;
8968 pWdaParams->pWdaContext = pWDA;
8969
8970 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8971 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8972 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 if(IS_WDI_STATUS_FAILURE(status))
8974 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05308975 if (! (failcnt & 0xF))
8976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8977 "Failure in Enter IMPS REQ WDI API, free all the memory " );
8978 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05308979 vos_mem_free(wdiEnterImpsReqParams);
8980 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008981 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 return CONVERT_WDI2VOS_STATUS(status) ;
8984}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308985
8986/*
8987 * FUNCTION: WDA_ExitImpsRespCallback
8988 * send Exit IMPS RSP back to PE
8989 */
8990void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8991{
8992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8993 tWDA_CbContext *pWDA;
8994
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8996 "<------ %s " ,__func__);
8997
8998 if (NULL == pWdaParams)
8999 {
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9001 "%s: pWdaParams received NULL", __func__);
9002 VOS_ASSERT(0);
9003 return;
9004 }
9005 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9006
9007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9008 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309009 if (WDI_STATUS_SUCCESS != status)
9010 {
9011 pWDA->failureCounts.exitImpsFailureCount++;
9012 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9013 pWDA->failureCounts.exitImpsFailureCount)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9016 "%s: Status %d fail count %d", __func__,
9017 status,
9018 pWDA->failureCounts.exitImpsFailureCount);
9019 pWDA->failureCounts.exitImpsFailureCount = 0;
9020 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9021 WLAN_LOG_INDICATOR_HOST_DRIVER,
9022 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9023 FALSE, TRUE);
9024 }
9025 }
9026 else
9027 {
9028 pWDA->failureCounts.exitImpsFailureCount = 0;
9029 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309030
9031 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9032 return;
9033}
9034
Jeff Johnson295189b2012-06-20 16:38:30 -07009035/*
9036 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 */
9038void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9039{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309041 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009043 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309044 if(NULL == pWdaParams)
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9047 "%s: pWdaParams received NULL", __func__);
9048 VOS_ASSERT(0);
9049 return;
9050 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309052 if (IS_WDI_STATUS_FAILURE(status))
9053 {
9054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9055 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309056
9057 pWDA->failureCounts.exitImpsFailureCount++;
9058 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9059 pWDA->failureCounts.exitImpsFailureCount)
9060 {
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9062 "%s: wdiStatus %d fail count %d", __func__,
9063 status,
9064 pWDA->failureCounts.exitImpsFailureCount);
9065 pWDA->failureCounts.exitImpsFailureCount = 0;
9066 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9067 WLAN_LOG_INDICATOR_HOST_DRIVER,
9068 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9069 FALSE, TRUE);
9070 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309071 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9072 {
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9074 FL("reload wlan driver"));
9075 wpalWlanReload();
9076 }
9077 }
9078 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009079}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309080
Jeff Johnson295189b2012-06-20 16:38:30 -07009081/*
9082 * FUNCTION: WDA_ProcessExitImpsReq
9083 * Request to WDI to Exit IMPS power state.
9084 */
9085VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9086{
9087 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309088 tWDA_ReqParams *pWdaParams;
9089 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9090
Jeff Johnson295189b2012-06-20 16:38:30 -07009091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009092 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309093 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9094 sizeof(WDI_ExitImpsReqParamsType));
9095 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9098 "%s: VOS MEM Alloc Failure", __func__);
9099 VOS_ASSERT(0);
9100 return VOS_STATUS_E_NOMEM;
9101 }
9102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9103 if(NULL == pWdaParams)
9104 {
9105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9106 "%s: VOS MEM Alloc Failure", __func__);
9107 VOS_ASSERT(0);
9108 vos_mem_free(wdiExitImpsReqParams);
9109 return VOS_STATUS_E_NOMEM;
9110 }
9111 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9112 wdiExitImpsReqParams->pUserData = pWdaParams;
9113
9114 /* Store param pointer as passed in by caller */
9115 /* store Params pass it to WDI */
9116 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9117 pWdaParams->pWdaContext = pWDA;
9118 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9119 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9120 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9121 pWdaParams);
9122 if (IS_WDI_STATUS_FAILURE(status))
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9125 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9127 vos_mem_free(pWdaParams);
9128 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 return CONVERT_WDI2VOS_STATUS(status) ;
9131}
Jeff Johnson295189b2012-06-20 16:38:30 -07009132/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009133 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009134 * send Enter BMPS RSP back to PE
9135 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009136void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009137{
9138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309139 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009140 tEnterBmpsParams *pEnterBmpsRspParams;
9141
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 if(NULL == pWdaParams)
9145 {
9146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 VOS_ASSERT(0) ;
9149 return ;
9150 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009151
9152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309153 if (NULL == pWDA)
9154 {
9155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9156 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309157
9158 if(pWdaParams->wdaWdiApiMsgParam)
9159 {
9160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9161 }
9162 vos_mem_free(pWdaParams);
9163
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309164 VOS_ASSERT(0);
9165 return ;
9166 }
9167
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009168 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9169
9170 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009171 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009172
9173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309175 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9176 {
9177 pWDA->failureCounts.enterBmpsFailureCount++;
9178 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9179 pWDA->failureCounts.enterBmpsFailureCount)
9180 {
9181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9182 "%s: wdiStatus %d fail count %d", __func__,
9183 pwdiEnterBmpsRsp->wdiStatus,
9184 pWDA->failureCounts.enterBmpsFailureCount);
9185 pWDA->failureCounts.enterBmpsFailureCount = 0;
9186 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9187 WLAN_LOG_INDICATOR_HOST_DRIVER,
9188 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9189 FALSE, TRUE);
9190 }
9191 }
9192 else
9193 {
9194 pWDA->failureCounts.enterBmpsFailureCount = 0;
9195 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009196 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9197
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 return ;
9199}
Jeff Johnson295189b2012-06-20 16:38:30 -07009200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009201 * FUNCTION: WDA_EnterBmpsReqCallback
9202 * Free memory and send Enter BMPS RSP back to PE.
9203 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9204 */
9205void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9206{
9207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309208 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009209 tEnterBmpsParams *pEnterBmpsRspParams;
9210
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9212 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9213
9214 if(NULL == pWdaParams)
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9217 "%s: pWdaParams received NULL", __func__);
9218 VOS_ASSERT(0);
9219 return;
9220 }
9221
9222 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309223 if (NULL == pWDA)
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9226 "%s:pWDA is NULL", __func__);
9227 VOS_ASSERT(0);
9228 return ;
9229 }
9230
Yue Ma7f44bbe2013-04-12 11:47:39 -07009231 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9232 pEnterBmpsRspParams->status = wdiStatus;
9233
9234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9235 {
9236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9237 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309238 pWDA->failureCounts.enterBmpsFailureCount++;
9239 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9240 pWDA->failureCounts.enterBmpsFailureCount)
9241 {
9242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9243 "%s: wdiStatus %d fail count %d", __func__,
9244 wdiStatus,
9245 pWDA->failureCounts.enterBmpsFailureCount);
9246 pWDA->failureCounts.enterBmpsFailureCount = 0;
9247 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9248 WLAN_LOG_INDICATOR_HOST_DRIVER,
9249 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9250 FALSE, TRUE);
9251 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009252 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9253 }
9254
9255 return;
9256}
9257/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 * FUNCTION: WDA_ProcessEnterBmpsReq
9259 * Request to WDI to Enter BMPS power state.
9260 */
9261VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9262 tEnterBmpsParams *pEnterBmpsReqParams)
9263{
9264 WDI_Status status = WDI_STATUS_SUCCESS;
9265 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9266 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9270 {
9271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009272 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 VOS_ASSERT(0);
9274 return VOS_STATUS_E_FAILURE;
9275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9277 if (NULL == wdiEnterBmpsReqParams)
9278 {
9279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009282 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9283 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 return VOS_STATUS_E_NOMEM;
9285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9287 if (NULL == pWdaParams)
9288 {
9289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 VOS_ASSERT(0);
9292 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009293 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9294 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 return VOS_STATUS_E_NOMEM;
9296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9298 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9299 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9300 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009301 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9303 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9304 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009305 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9306 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009307
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 /* Store param pointer as passed in by caller */
9309 /* store Params pass it to WDI */
9310 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009311 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009314 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 if (IS_WDI_STATUS_FAILURE(status))
9316 {
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9318 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009320 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009322 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 return CONVERT_WDI2VOS_STATUS(status);
9325}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009326
9327
9328static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9329 WDI_Status wdiStatus,
9330 tExitBmpsParams *pExitBmpsReqParams)
9331{
9332 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9333
9334 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9335}
9336
9337
Jeff Johnson295189b2012-06-20 16:38:30 -07009338/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009339 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 * send Exit BMPS RSP back to PE
9341 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009342void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009343{
9344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309345 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009346 tExitBmpsParams *pExitBmpsRspParams;
9347
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 if(NULL == pWdaParams)
9351 {
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009353 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_ASSERT(0) ;
9355 return ;
9356 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009357
9358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309359 if (NULL == pWDA)
9360 {
9361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9362 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309363
9364 if(pWdaParams->wdaWdiApiMsgParam)
9365 {
9366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9367 }
9368 vos_mem_free(pWdaParams);
9369
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309370 VOS_ASSERT(0);
9371 return ;
9372 }
9373
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009374 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9375
9376 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009377 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009378
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309380 vos_mem_free(pWdaParams);
9381
9382 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9383 {
9384 pWDA->failureCounts.exitBmpsFailureCount++;
9385 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9386 pWDA->failureCounts.exitBmpsFailureCount)
9387 {
9388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9389 "%s: Status %d fail count %d", __func__,
9390 pExitBmpsRspParams->status,
9391 pWDA->failureCounts.exitBmpsFailureCount);
9392 pWDA->failureCounts.exitBmpsFailureCount = 0;
9393 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9394 WLAN_LOG_INDICATOR_HOST_DRIVER,
9395 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9396 FALSE, TRUE);
9397 }
9398 }
9399 else
9400 {
9401 pWDA->failureCounts.exitBmpsFailureCount = 0;
9402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009403
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009404 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 return ;
9406}
Jeff Johnson295189b2012-06-20 16:38:30 -07009407/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009408 * FUNCTION: WDA_ExitBmpsReqCallback
9409 * Free memory and send Exit BMPS RSP back to PE.
9410 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9411 */
9412void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9413{
9414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309415 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009416 tExitBmpsParams *pExitBmpsRspParams;
9417
9418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9419 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9420
9421 if(NULL == pWdaParams)
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9424 "%s: pWdaParams received NULL", __func__);
9425 VOS_ASSERT(0);
9426 return;
9427 }
9428
9429 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309430 if (NULL == pWDA)
9431 {
9432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9433 "%s:pWDA is NULL", __func__);
9434 VOS_ASSERT(0);
9435 return ;
9436 }
9437
Yue Ma7f44bbe2013-04-12 11:47:39 -07009438 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9439 pExitBmpsRspParams->status = wdiStatus;
9440
9441 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9442 {
9443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9444 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309445 pWDA->failureCounts.exitBmpsFailureCount++;
9446 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9447 pWDA->failureCounts.exitBmpsFailureCount)
9448 {
9449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9450 "%s: wdiStatus %d fail count %d", __func__,
9451 wdiStatus,
9452 pWDA->failureCounts.exitBmpsFailureCount);
9453 pWDA->failureCounts.exitBmpsFailureCount = 0;
9454 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9455 WLAN_LOG_INDICATOR_HOST_DRIVER,
9456 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9457 FALSE, TRUE);
9458 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009459 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9460 }
9461
9462 return;
9463}
9464/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 * FUNCTION: WDA_ProcessExitBmpsReq
9466 * Request to WDI to Exit BMPS power state.
9467 */
9468VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9469 tExitBmpsParams *pExitBmpsReqParams)
9470{
9471 WDI_Status status = WDI_STATUS_SUCCESS ;
9472 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9473 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9474 sizeof(WDI_ExitBmpsReqParamsType)) ;
9475 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009477 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 if(NULL == wdiExitBmpsReqParams)
9479 {
9480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009483 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 return VOS_STATUS_E_NOMEM;
9485 }
9486 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9487 if(NULL == pWdaParams)
9488 {
9489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009491 VOS_ASSERT(0);
9492 vos_mem_free(wdiExitBmpsReqParams);
9493 return VOS_STATUS_E_NOMEM;
9494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009496
9497 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9498
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9500 wdiExitBmpsReqParams->pUserData = pWdaParams;
9501
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 /* Store param pointer as passed in by caller */
9503 /* store Params pass it to WDI */
9504 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9505 pWdaParams->pWdaContext = pWDA;
9506 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009508 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 if(IS_WDI_STATUS_FAILURE(status))
9510 {
9511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9512 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9514 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009515 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 return CONVERT_WDI2VOS_STATUS(status) ;
9518}
Jeff Johnson295189b2012-06-20 16:38:30 -07009519/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009520 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 * send Enter UAPSD RSP back to PE
9522 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009523void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009524{
9525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309526 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009527 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009529 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 if(NULL == pWdaParams)
9531 {
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009533 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 VOS_ASSERT(0) ;
9535 return ;
9536 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009537
9538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309539 if (NULL == pWDA)
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9542 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309543
9544 if(pWdaParams->wdaWdiApiMsgParam)
9545 {
9546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9547 }
9548 vos_mem_free(pWdaParams);
9549
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309550 VOS_ASSERT(0);
9551 return ;
9552 }
9553
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009554 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9555
9556 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009557 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009558
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9560 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009561 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 return ;
9563}
Jeff Johnson295189b2012-06-20 16:38:30 -07009564/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009565 * FUNCTION: WDA_EnterUapsdReqCallback
9566 * Free memory and send Enter UAPSD RSP back to PE.
9567 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9568 */
9569void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9570{
9571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9572 tWDA_CbContext *pWDA;
9573 tUapsdParams *pEnterUapsdRsqParams;
9574
9575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9576 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9577
9578 if(NULL == pWdaParams)
9579 {
9580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9581 "%s: pWdaParams received NULL", __func__);
9582 VOS_ASSERT(0);
9583 return;
9584 }
9585
9586 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309587 if (NULL == pWDA)
9588 {
9589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9590 "%s:pWDA is NULL", __func__);
9591 VOS_ASSERT(0);
9592 return ;
9593 }
9594
Yue Ma7f44bbe2013-04-12 11:47:39 -07009595 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9596 pEnterUapsdRsqParams->status = wdiStatus;
9597
9598 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9599 {
9600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9601 vos_mem_free(pWdaParams);
9602 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9603 }
9604
9605 return;
9606}
9607/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 * FUNCTION: WDA_ProcessEnterUapsdReq
9609 * Request to WDI to Enter UAPSD power state.
9610 */
9611VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9612 tUapsdParams *pEnterUapsdReqParams)
9613{
9614 WDI_Status status = WDI_STATUS_SUCCESS ;
9615 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9616 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9617 sizeof(WDI_EnterUapsdReqParamsType)) ;
9618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 if(NULL == wdiEnterUapsdReqParams)
9622 {
9623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009625 VOS_ASSERT(0);
9626 return VOS_STATUS_E_NOMEM;
9627 }
9628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9629 if(NULL == pWdaParams)
9630 {
9631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009633 VOS_ASSERT(0);
9634 vos_mem_free(wdiEnterUapsdReqParams);
9635 return VOS_STATUS_E_NOMEM;
9636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9638 pEnterUapsdReqParams->beDeliveryEnabled;
9639 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9640 pEnterUapsdReqParams->beTriggerEnabled;
9641 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9642 pEnterUapsdReqParams->bkDeliveryEnabled;
9643 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9644 pEnterUapsdReqParams->bkTriggerEnabled;
9645 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9646 pEnterUapsdReqParams->viDeliveryEnabled;
9647 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9648 pEnterUapsdReqParams->viTriggerEnabled;
9649 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9650 pEnterUapsdReqParams->voDeliveryEnabled;
9651 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9652 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009653 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009654
Yue Ma7f44bbe2013-04-12 11:47:39 -07009655 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9656 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009657
Jeff Johnson295189b2012-06-20 16:38:30 -07009658 /* Store param pointer as passed in by caller */
9659 /* store Params pass it to WDI */
9660 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9661 pWdaParams->pWdaContext = pWDA;
9662 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009664 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 if(IS_WDI_STATUS_FAILURE(status))
9666 {
9667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9668 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9669 vos_mem_free(pWdaParams->wdaMsgParam) ;
9670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9671 vos_mem_free(pWdaParams) ;
9672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009673 return CONVERT_WDI2VOS_STATUS(status) ;
9674}
Jeff Johnson295189b2012-06-20 16:38:30 -07009675/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009676 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 * send Exit UAPSD RSP back to PE
9678 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009679void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009680{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009681
9682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9683 tWDA_CbContext *pWDA;
9684 tExitUapsdParams *pExitUapsdRspParams;
9685
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009687 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009688 if(NULL == pWdaParams)
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009691 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009692 VOS_ASSERT(0);
9693 return;
9694 }
9695
9696 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9697 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9698
9699 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009700 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009701
9702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9703 vos_mem_free(pWdaParams) ;
9704
9705 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 return ;
9707}
Jeff Johnson295189b2012-06-20 16:38:30 -07009708/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009709 * FUNCTION: WDA_ExitUapsdReqCallback
9710 * Free memory and send Exit UAPSD RSP back to PE.
9711 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9712 */
9713void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9714{
9715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309716 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009717 tExitUapsdParams *pExitUapsdRspParams;
9718
9719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9720 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9721
9722 if(NULL == pWdaParams)
9723 {
9724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9725 "%s: pWdaParams received NULL", __func__);
9726 VOS_ASSERT(0);
9727 return;
9728 }
9729
9730 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309731 if (NULL == pWDA)
9732 {
9733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9734 "%s:pWDA is NULL", __func__);
9735 VOS_ASSERT(0);
9736 return ;
9737 }
9738
Yue Ma7f44bbe2013-04-12 11:47:39 -07009739 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9740 pExitUapsdRspParams->status = wdiStatus;
9741
9742 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9743 {
9744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9745 vos_mem_free(pWdaParams);
9746 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9747 }
9748
9749 return;
9750}
9751/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 * FUNCTION: WDA_ProcessExitUapsdReq
9753 * Request to WDI to Exit UAPSD power state.
9754 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009755VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9756 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009757{
9758 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009759 tWDA_ReqParams *pWdaParams ;
9760 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9761 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9762 sizeof(WDI_ExitUapsdReqParamsType)) ;
9763
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009765 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009766
9767 if(NULL == wdiExitUapsdReqParams)
9768 {
9769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009770 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009771 VOS_ASSERT(0);
9772 return VOS_STATUS_E_NOMEM;
9773 }
9774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9775 if(NULL == pWdaParams)
9776 {
9777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009778 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009779 VOS_ASSERT(0);
9780 vos_mem_free(wdiExitUapsdReqParams);
9781 return VOS_STATUS_E_NOMEM;
9782 }
9783
9784 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009785 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9786 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009787
9788 /* Store param pointer as passed in by caller */
9789 /* store Params pass it to WDI */
9790 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9791 pWdaParams->pWdaContext = pWDA;
9792 pWdaParams->wdaMsgParam = pExitUapsdParams;
9793
Yue Ma7f44bbe2013-04-12 11:47:39 -07009794 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 if(IS_WDI_STATUS_FAILURE(status))
9796 {
9797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9798 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009799 vos_mem_free(pWdaParams->wdaMsgParam) ;
9800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9801 vos_mem_free(pWdaParams) ;
9802
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009804 return CONVERT_WDI2VOS_STATUS(status) ;
9805}
9806
Jeff Johnson295189b2012-06-20 16:38:30 -07009807/*
9808 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9809 *
9810 */
9811void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9812{
9813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 if(NULL == pWdaParams)
9817 {
9818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 VOS_ASSERT(0) ;
9821 return ;
9822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 if( pWdaParams != NULL )
9824 {
9825 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9826 {
9827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9828 }
9829 if( pWdaParams->wdaMsgParam != NULL )
9830 {
9831 vos_mem_free(pWdaParams->wdaMsgParam) ;
9832 }
9833 vos_mem_free(pWdaParams) ;
9834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009835 return ;
9836}
Jeff Johnson295189b2012-06-20 16:38:30 -07009837/*
9838 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9839 * Request to WDI to set the power save params at start.
9840 */
9841VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9842 tSirPowerSaveCfg *pPowerSaveCfg)
9843{
9844 WDI_Status status = WDI_STATUS_SUCCESS ;
9845 tHalCfg *tlvStruct = NULL ;
9846 tANI_U8 *tlvStructStart = NULL ;
9847 v_PVOID_t *configParam;
9848 tANI_U32 configParamSize;
9849 tANI_U32 *configDataValue;
9850 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9851 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9855 {
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009857 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009858 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009859 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 return VOS_STATUS_E_FAILURE;
9861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9863 if (NULL == wdiPowerSaveCfg)
9864 {
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009867 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009868 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 return VOS_STATUS_E_NOMEM;
9870 }
9871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9872 if(NULL == pWdaParams)
9873 {
9874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 VOS_ASSERT(0);
9877 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009878 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 return VOS_STATUS_E_NOMEM;
9880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9882 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 if(NULL == configParam)
9884 {
9885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009886 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009887 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 vos_mem_free(pWdaParams);
9889 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009890 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 return VOS_STATUS_E_NOMEM;
9892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 vos_mem_set(configParam, configParamSize, 0);
9894 wdiPowerSaveCfg->pConfigBuffer = configParam;
9895 tlvStruct = (tHalCfg *)configParam;
9896 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9898 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9899 tlvStruct->length = sizeof(tANI_U32);
9900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9901 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9903 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9905 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9906 tlvStruct->length = sizeof(tANI_U32);
9907 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9908 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9910 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9912 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9913 tlvStruct->length = sizeof(tANI_U32);
9914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9915 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9917 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9919 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9920 tlvStruct->length = sizeof(tANI_U32);
9921 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9922 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9924 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9926 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9927 tlvStruct->length = sizeof(tANI_U32);
9928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9929 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9931 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9933 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9934 tlvStruct->length = sizeof(tANI_U32);
9935 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9936 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9938 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9940 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9941 tlvStruct->length = sizeof(tANI_U32);
9942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9943 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9945 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009946 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9947 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9948 tlvStruct->length = sizeof(tANI_U32);
9949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9950 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9951 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9952 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9954 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9955 tlvStruct->length = sizeof(tANI_U32);
9956 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9957 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9958 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9959 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9961 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9962 tlvStruct->length = sizeof(tANI_U32);
9963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9964 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9966 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9968 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9969 tlvStruct->length = sizeof(tANI_U32);
9970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9971 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9973 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009976 /* store Params pass it to WDI */
9977 pWdaParams->wdaMsgParam = configParam;
9978 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9979 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9981 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 if(IS_WDI_STATUS_FAILURE(status))
9983 {
9984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9985 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9986 vos_mem_free(pWdaParams->wdaMsgParam);
9987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9988 vos_mem_free(pWdaParams);
9989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009990 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 return CONVERT_WDI2VOS_STATUS(status);
9992}
Jeff Johnson295189b2012-06-20 16:38:30 -07009993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009994 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 *
9996 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009997void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009998{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10000
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010002 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010003
10004 if(NULL == pWdaParams)
10005 {
10006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10007 "%s: pWdaParams received NULL", __func__);
10008 VOS_ASSERT(0);
10009 return ;
10010 }
10011
10012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 vos_mem_free(pWdaParams);
10014
Jeff Johnson295189b2012-06-20 16:38:30 -070010015 return ;
10016}
Jeff Johnson295189b2012-06-20 16:38:30 -070010017/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010018 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10019 * Free memory.
10020 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10021 */
10022void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10023{
10024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10025
10026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10027 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10028
10029 if(NULL == pWdaParams)
10030 {
10031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10032 "%s: pWdaParams received NULL", __func__);
10033 VOS_ASSERT(0);
10034 return;
10035 }
10036
10037 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10038 {
10039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10040 vos_mem_free(pWdaParams);
10041 }
10042
10043 return;
10044}
10045/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 * FUNCTION: WDA_SetUapsdAcParamsReq
10047 * Request to WDI to set the UAPSD params for an ac (sta mode).
10048 */
10049VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10050 tUapsdInfo *pUapsdInfo)
10051{
10052 WDI_Status status = WDI_STATUS_SUCCESS;
10053 tWDA_CbContext *pWDA = NULL ;
10054 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10055 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10056 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10057 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 if(NULL == wdiUapsdParams)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 VOS_ASSERT(0);
10065 return VOS_STATUS_E_NOMEM;
10066 }
10067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10068 if(NULL == pWdaParams)
10069 {
10070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 VOS_ASSERT(0);
10073 vos_mem_free(wdiUapsdParams);
10074 return VOS_STATUS_E_NOMEM;
10075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10077 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10078 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10079 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10080 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10081 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010082 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10083 wdiUapsdParams->pUserData = pWdaParams;
10084
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010086 pWdaParams->pWdaContext = pWDA;
10087 /* Store param pointer as passed in by caller */
10088 pWdaParams->wdaMsgParam = pUapsdInfo;
10089 /* store Params pass it to WDI */
10090 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010092 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 if(IS_WDI_STATUS_FAILURE(status))
10095 {
10096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10097 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10099 vos_mem_free(pWdaParams);
10100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10102 return VOS_STATUS_SUCCESS;
10103 else
10104 return VOS_STATUS_E_FAILURE;
10105
Jeff Johnson295189b2012-06-20 16:38:30 -070010106}
10107/*
10108 * FUNCTION: WDA_ClearUapsdAcParamsReq
10109 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10110 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10111 * and again enter the UPASD with the modified params. Hence the disable
10112 * function was kept empty.
10113 *
10114 */
10115VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10116{
10117 /* do nothing */
10118 return VOS_STATUS_SUCCESS;
10119}
Jeff Johnson295189b2012-06-20 16:38:30 -070010120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 *
10123 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010124void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010125{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10127
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010129 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010130
10131 if(NULL == pWdaParams)
10132 {
10133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010134 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010135 VOS_ASSERT(0) ;
10136 return ;
10137 }
10138
10139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10140 vos_mem_free(pWdaParams->wdaMsgParam);
10141 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010142
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 //print a msg, nothing else to do
10144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010145 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 return ;
10147}
Jeff Johnson295189b2012-06-20 16:38:30 -070010148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010149 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10150 * Free memory.
10151 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10152 */
10153void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10154{
10155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10156
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10158 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10159
10160 if(NULL == pWdaParams)
10161 {
10162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10163 "%s: pWdaParams received NULL", __func__);
10164 VOS_ASSERT(0);
10165 return;
10166 }
10167
10168 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10169 {
10170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10171 vos_mem_free(pWdaParams->wdaMsgParam);
10172 vos_mem_free(pWdaParams);
10173 }
10174
10175 return;
10176}
10177/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 * FUNCTION: WDA_UpdateUapsdParamsReq
10179 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10180 */
10181VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10182 tUpdateUapsdParams* pUpdateUapsdInfo)
10183{
10184 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010185 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10187 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10188 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010189 tWDA_ReqParams *pWdaParams = NULL;
10190
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010192 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 if(NULL == wdiUpdateUapsdParams)
10194 {
10195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010197 VOS_ASSERT(0);
10198 return VOS_STATUS_E_NOMEM;
10199 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10201 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10202 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010203 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10204 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010205
10206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10207 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 {
10209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010212 vos_mem_free(pUpdateUapsdInfo);
10213 vos_mem_free(wdiUpdateUapsdParams);
10214 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010217 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010219 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10220 pWdaParams->pWdaContext = pWDA;
10221
Jeff Johnson43971f52012-07-17 12:26:56 -070010222 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010223 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010224 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010225
Jeff Johnson43971f52012-07-17 12:26:56 -070010226 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 {
10228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10229 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010230 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10232 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010233 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010235 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236}
Jeff Johnson295189b2012-06-20 16:38:30 -070010237/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010238 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 *
10240 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010241void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010242{
10243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 if(WDI_STATUS_SUCCESS != wdiStatus)
10247 {
10248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010249 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 if(NULL == pWdaParams)
10252 {
10253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010254 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 VOS_ASSERT(0) ;
10256 return ;
10257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10259 vos_mem_free(pWdaParams->wdaMsgParam);
10260 vos_mem_free(pWdaParams);
10261 return ;
10262}
Jeff Johnson295189b2012-06-20 16:38:30 -070010263/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010264 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10265 * Free memory.
10266 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10267 */
10268void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10269{
10270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10271
10272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10273 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10274
10275 if(NULL == pWdaParams)
10276 {
10277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10278 "%s: pWdaParams received NULL", __func__);
10279 VOS_ASSERT(0);
10280 return;
10281 }
10282
10283 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10284 {
10285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10286 vos_mem_free(pWdaParams->wdaMsgParam);
10287 vos_mem_free(pWdaParams);
10288 }
10289
10290 return;
10291}
10292/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10294 *
10295 */
10296VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10297 tSirWlanSetRxpFilters *pWlanSuspendParam)
10298{
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010300 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010301 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010303 /* Sanity Check
10304 * This is very unlikely and add assert to collect more info next time */
10305 if(NULL == pWlanSuspendParam)
10306 {
10307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10308 "%s: pWlanSuspendParam received NULL", __func__);
10309 VOS_ASSERT(0) ;
10310 return VOS_STATUS_E_FAULT;
10311 }
10312 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10313 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010315 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010316 if(NULL == wdiRxpFilterParams)
10317 {
10318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010320 VOS_ASSERT(0);
10321 vos_mem_free(pWlanSuspendParam);
10322 return VOS_STATUS_E_NOMEM;
10323 }
10324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10325 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 VOS_ASSERT(0);
10330 vos_mem_free(wdiRxpFilterParams);
10331 vos_mem_free(pWlanSuspendParam);
10332 return VOS_STATUS_E_NOMEM;
10333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10335 pWlanSuspendParam->setMcstBcstFilter;
10336 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10337 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10338
Yue Ma7f44bbe2013-04-12 11:47:39 -070010339 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10340 wdiRxpFilterParams->pUserData = pWdaParams;
10341
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 pWdaParams->pWdaContext = pWDA;
10343 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10344 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010345 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010346 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010348 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10351 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010352 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10354 vos_mem_free(pWdaParams->wdaMsgParam);
10355 vos_mem_free(pWdaParams);
10356 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010357 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010358}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010359
10360/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010361 * FUNCTION: WDA_ProcessGetFrameLogReq
10362 * Request to WDI to get the Frame Log.
10363 */
10364VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10365 tAniGetFrameLogReq *pGetFrameLog)
10366{
10367 VOS_STATUS status = VOS_STATUS_SUCCESS;
10368 WDI_Status wstatus;
10369 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10370 tWDA_ReqParams *pWdaParams ;
10371
10372 /* Sanity Check*/
10373 if(NULL == pGetFrameLog)
10374 {
10375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010376 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010377 VOS_ASSERT(0) ;
10378 return VOS_STATUS_E_FAULT;
10379 }
10380
10381 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10382 sizeof(WDI_GetFrameLogReqInfoType));
10383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10384 "------> %s " ,__func__);
10385
10386 if(NULL == wdiGetFrameLogInfo)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10389 "%s: VOS MEM Alloc Failure", __func__);
10390 VOS_ASSERT(0);
10391 vos_mem_free(pGetFrameLog);
10392 return VOS_STATUS_E_NOMEM;
10393 }
10394
10395 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10396 if(NULL == pWdaParams)
10397 {
10398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10399 "%s: VOS MEM Alloc Failure", __func__);
10400 VOS_ASSERT(0);
10401 vos_mem_free(wdiGetFrameLogInfo);
10402 vos_mem_free(pGetFrameLog);
10403 return VOS_STATUS_E_NOMEM;
10404 }
10405
10406 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10407
10408 pWdaParams->pWdaContext = pWDA;
10409 pWdaParams->wdaMsgParam = pGetFrameLog;
10410 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10411
10412 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10413 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10414 pWdaParams);
10415 if(IS_WDI_STATUS_FAILURE(wstatus))
10416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10418 "Failure in get frame log REQ WDI API, free all the memory" );
10419 status = CONVERT_WDI2VOS_STATUS(wstatus);
10420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10421 vos_mem_free(pWdaParams->wdaMsgParam);
10422 vos_mem_free(pWdaParams);
10423 }
10424 return status;
10425}
10426
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010427
10428/*
10429 * FUNCTION: WDA_FatalEventLogsRspCallback
10430 * recieves Flush Logs response from FW
10431 */
10432
10433void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10434 void* pUserData)
10435{
10436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10437
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10439 "<------ %s,wdiStatus:%d " ,
10440 __func__, wdiRsp->wdiStatus);
10441 if(NULL == pWdaParams)
10442 {
10443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10444 "%s: pWdaParams received NULL", __func__);
10445 VOS_ASSERT(0);
10446 return ;
10447 }
10448
10449 if(NULL == pWdaParams->wdaMsgParam)
10450 {
10451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10452 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10453 VOS_ASSERT(0);
10454 vos_mem_free(pWdaParams);
10455 return ;
10456 }
10457
10458 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10459 {
10460 /*
10461 * If it is failure, it means JOb is already posted by FW
10462 * for logging, so for failure scenario also we will get the
10463 * done indication
10464 */
10465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10466 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10467 __func__, wdiRsp->wdiStatus);
10468 }
10469
10470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10471 vos_mem_free(pWdaParams->wdaMsgParam);
10472 vos_mem_free(pWdaParams);
10473
10474 return;
10475
10476}
10477
10478/*
10479 * FUNCTION: WDA_ProcessFatalEventLogsReq
10480 * Request to WDI to send the fatal Event Logs Req.
10481 */
10482
10483VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10484 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10485{
10486 VOS_STATUS status = VOS_STATUS_SUCCESS;
10487 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10488 tWDA_ReqParams *pWdaParams ;
10489 WDI_Status wstatus;
10490
10491
10492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10493 "------> %s " ,__func__);
10494 if (NULL == pFatalEventLogsReqParam)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10497 "%s: pMgmtLoggingInitParam received NULL", __func__);
10498 VOS_ASSERT(0) ;
10499 return VOS_STATUS_E_FAULT;
10500 }
10501 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10502 sizeof(WDI_FatalEventLogsReqInfoType));
10503 if(NULL == wdiFatalEventLogsReqInfo)
10504 {
10505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10506 "%s: VOS MEM Alloc Failure", __func__);
10507 VOS_ASSERT(0);
10508 vos_mem_free(pFatalEventLogsReqParam);
10509 return VOS_STATUS_E_NOMEM;
10510 }
10511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10512 if(NULL == pWdaParams)
10513 {
10514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10515 "%s: VOS MEM Alloc Failure", __func__);
10516 VOS_ASSERT(0);
10517 vos_mem_free(wdiFatalEventLogsReqInfo);
10518 vos_mem_free(pFatalEventLogsReqParam);
10519 return VOS_STATUS_E_NOMEM;
10520 }
10521 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10522 pWdaParams->pWdaContext = pWDA;
10523 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10524 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10525
10526 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10527 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10528 pWdaParams);
10529 if(IS_WDI_STATUS_FAILURE(wstatus))
10530 {
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10532 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10533 status = CONVERT_WDI2VOS_STATUS(wstatus);
10534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10535 vos_mem_free(pWdaParams->wdaMsgParam);
10536 vos_mem_free(pWdaParams);
10537 }
10538
10539 return status;
10540
10541}
10542
Siddharth Bhal64246172015-02-27 01:04:37 +053010543/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010544 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010545 *
10546 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010547VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10548 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010549{
10550 VOS_STATUS status = VOS_STATUS_SUCCESS;
10551 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010552 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010553 tWDA_ReqParams *pWdaParams ;
10554
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10556 "------> %s " ,__func__);
10557
10558 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010559 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010560 {
10561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010562 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010563 VOS_ASSERT(0) ;
10564 return VOS_STATUS_E_FAULT;
10565 }
10566
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010567 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10568 sizeof(WDI_FWLoggingInitReqInfoType));
10569 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10572 "%s: VOS MEM Alloc Failure", __func__);
10573 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010574 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010575 return VOS_STATUS_E_NOMEM;
10576 }
10577
10578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10579 if(NULL == pWdaParams)
10580 {
10581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10582 "%s: VOS MEM Alloc Failure", __func__);
10583 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010584 vos_mem_free(wdiFWLoggingInitInfo);
10585 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010586 return VOS_STATUS_E_NOMEM;
10587 }
10588
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010589 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10590 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10591 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10592 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10593 wdiFWLoggingInitInfo->continuousFrameLogging =
10594 pFWLoggingInitParam->continuousFrameLogging;
10595 wdiFWLoggingInitInfo->minLogBufferSize=
10596 pFWLoggingInitParam->minLogBufferSize;
10597 wdiFWLoggingInitInfo->maxLogBufferSize=
10598 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010599
10600 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010601 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10602 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010603
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010604 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10605 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010606 pWdaParams);
10607 if(IS_WDI_STATUS_FAILURE(wstatus))
10608 {
10609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10610 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10611 status = CONVERT_WDI2VOS_STATUS(wstatus);
10612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10613 vos_mem_free(pWdaParams->wdaMsgParam);
10614 vos_mem_free(pWdaParams);
10615 }
10616
10617 return status;
10618}
10619
Jeff Johnson295189b2012-06-20 16:38:30 -070010620/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010621 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10622 *
10623 */
10624VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10625 tSirRssiMonitorReq *pRssiMonitorReqParam)
10626{
10627 VOS_STATUS status = VOS_STATUS_SUCCESS;
10628 WDI_Status wstatus;
10629 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10630 tWDA_ReqParams *pWdaParams ;
10631
10632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10633 "------> %s " ,__func__);
10634
10635 /* Sanity Check*/
10636 if(NULL == pRssiMonitorReqParam)
10637 {
10638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10639 "%s: pRssiMonitorReqParam received NULL", __func__);
10640 VOS_ASSERT(0) ;
10641 return VOS_STATUS_E_FAULT;
10642 }
10643
10644 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10645 sizeof(WDI_RssiMonitorReqInfoType));
10646 if(NULL == wdiRssiMonitorInfo)
10647 {
10648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10649 "%s: VOS MEM Alloc Failure", __func__);
10650 VOS_ASSERT(0);
10651 vos_mem_free(pRssiMonitorReqParam);
10652 return VOS_STATUS_E_NOMEM;
10653 }
10654
10655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10656 if(NULL == pWdaParams)
10657 {
10658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10659 "%s: VOS MEM Alloc Failure", __func__);
10660 VOS_ASSERT(0);
10661 vos_mem_free(wdiRssiMonitorInfo);
10662 vos_mem_free(pRssiMonitorReqParam);
10663 return VOS_STATUS_E_NOMEM;
10664 }
10665
10666 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10667 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10668 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10669 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10670 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10671
10672 pWdaParams->pWdaContext = pWDA;
10673 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10674 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10675
10676 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10677 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10678 pWdaParams);
10679 if(IS_WDI_STATUS_FAILURE(wstatus))
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10682 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10683 status = CONVERT_WDI2VOS_STATUS(wstatus);
10684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10685 vos_mem_free(pWdaParams->wdaMsgParam);
10686 vos_mem_free(pWdaParams);
10687 }
10688
10689 return status;
10690}
10691
10692/*
10693 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10694 *
10695 */
10696VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10697 tSirRssiMonitorReq *pRssiMonitorReqParam)
10698{
10699 VOS_STATUS status = VOS_STATUS_SUCCESS;
10700 WDI_Status wstatus;
10701 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10702 tWDA_ReqParams *pWdaParams ;
10703
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10705 "------> %s " ,__func__);
10706
10707 /* Sanity Check*/
10708 if(NULL == pRssiMonitorReqParam)
10709 {
10710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10711 "%s: pRssiMonitorReqParam received NULL", __func__);
10712 VOS_ASSERT(0) ;
10713 return VOS_STATUS_E_FAULT;
10714 }
10715
10716 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10717 sizeof(WDI_RssiMonitorReqInfoType));
10718 if(NULL == wdiRssiMonitorInfo)
10719 {
10720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10721 "%s: VOS MEM Alloc Failure", __func__);
10722 VOS_ASSERT(0);
10723 vos_mem_free(pRssiMonitorReqParam);
10724 return VOS_STATUS_E_NOMEM;
10725 }
10726
10727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10728 if(NULL == pWdaParams)
10729 {
10730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10731 "%s: VOS MEM Alloc Failure", __func__);
10732 VOS_ASSERT(0);
10733 vos_mem_free(wdiRssiMonitorInfo);
10734 vos_mem_free(pRssiMonitorReqParam);
10735 return VOS_STATUS_E_NOMEM;
10736 }
10737
10738 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10739 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10740 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10741
10742 pWdaParams->pWdaContext = pWDA;
10743 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10744 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10745
10746 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10747 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10748 pWdaParams);
10749 if(IS_WDI_STATUS_FAILURE(wstatus))
10750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10752 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10753 status = CONVERT_WDI2VOS_STATUS(wstatus);
10754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10755 vos_mem_free(pWdaParams->wdaMsgParam);
10756 vos_mem_free(pWdaParams);
10757 }
10758
10759 return status;
10760}
10761
10762
10763/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 * FUNCTION: WDA_WdiIndicationCallback
10765 *
10766 */
10767void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10768 void* pUserData)
10769{
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010771 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772}
Jeff Johnson295189b2012-06-20 16:38:30 -070010773/*
10774 * FUNCTION: WDA_ProcessWlanSuspendInd
10775 *
10776 */
10777VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10778 tSirWlanSuspendParam *pWlanSuspendParam)
10779{
10780 WDI_Status wdiStatus;
10781 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010783 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10785 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10786 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10787 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010789 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10790 if(WDI_STATUS_PENDING == wdiStatus)
10791 {
10792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010793 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 }
10795 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10796 {
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 vos_mem_free(pWlanSuspendParam);
10801 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10802}
10803
Chet Lanctot186b5732013-03-18 10:26:30 -070010804#ifdef WLAN_FEATURE_11W
10805/*
10806 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10807 *
10808 */
10809VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10810 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10811{
10812 WDI_Status wdiStatus;
10813 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10815 "------> %s ", __func__);
10816
10817 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10818 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10819 sizeof(tSirMacAddr));
10820
10821 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10822 wdiExclUnencryptParams.pUserData = pWDA;
10823
10824 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10825 if(WDI_STATUS_PENDING == wdiStatus)
10826 {
10827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10828 "Pending received for %s:%d ", __func__, __LINE__ );
10829 }
10830 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10831 {
10832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10833 "Failure in %s:%d ", __func__, __LINE__ );
10834 }
10835 vos_mem_free(pExclUnencryptParam);
10836 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10837}
10838#endif
10839
Jeff Johnson295189b2012-06-20 16:38:30 -070010840/*
10841 * FUNCTION: WDA_ProcessWlanResumeCallback
10842 *
10843 */
10844void WDA_ProcessWlanResumeCallback(
10845 WDI_SuspendResumeRspParamsType *resumeRspParams,
10846 void* pUserData)
10847{
10848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010850 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 if(NULL == pWdaParams)
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010854 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 VOS_ASSERT(0) ;
10856 return ;
10857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10859 {
10860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010861 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10864 vos_mem_free(pWdaParams->wdaMsgParam);
10865 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010866 return ;
10867}
Jeff Johnson295189b2012-06-20 16:38:30 -070010868/*
10869 * FUNCTION: WDA_ProcessWlanResumeReq
10870 *
10871 */
10872VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10873 tSirWlanResumeParam *pWlanResumeParam)
10874{
10875 WDI_Status wdiStatus;
10876 WDI_ResumeParamsType *wdiResumeParams =
10877 (WDI_ResumeParamsType *)vos_mem_malloc(
10878 sizeof(WDI_ResumeParamsType) ) ;
10879 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010881 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 if(NULL == wdiResumeParams)
10883 {
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 VOS_ASSERT(0);
10887 return VOS_STATUS_E_NOMEM;
10888 }
10889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10890 if(NULL == pWdaParams)
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 VOS_ASSERT(0);
10895 vos_mem_free(wdiResumeParams);
10896 return VOS_STATUS_E_NOMEM;
10897 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10899 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010901 wdiResumeParams->wdiReqStatusCB = NULL;
10902 pWdaParams->wdaMsgParam = pWlanResumeParam;
10903 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10904 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10906 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10907 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10911 "Failure in Host Resume REQ WDI API, free all the memory " );
10912 VOS_ASSERT(0);
10913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10914 vos_mem_free(pWdaParams->wdaMsgParam);
10915 vos_mem_free(pWdaParams);
10916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10918}
10919
Jeff Johnson295189b2012-06-20 16:38:30 -070010920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 *
10923 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010924void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010925{
10926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 if(NULL == pWdaParams)
10930 {
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010932 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010933 VOS_ASSERT(0) ;
10934 return ;
10935 }
10936
10937 vos_mem_free(pWdaParams->wdaMsgParam) ;
10938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10939 vos_mem_free(pWdaParams) ;
10940 /*
10941 * No respone required for SetBeaconFilter req so just free the request
10942 * param here
10943 */
10944
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 return ;
10946}
Jeff Johnson295189b2012-06-20 16:38:30 -070010947/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010948 * FUNCTION: WDA_SetBeaconFilterReqCallback
10949 * Free memory.
10950 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10951 */
10952void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10953{
10954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10955
10956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10957 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10958
10959 if(NULL == pWdaParams)
10960 {
10961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10962 "%s: pWdaParams received NULL", __func__);
10963 VOS_ASSERT(0);
10964 return;
10965 }
10966
10967 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10968 {
10969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10970 vos_mem_free(pWdaParams->wdaMsgParam);
10971 vos_mem_free(pWdaParams);
10972 }
10973
10974 return;
10975}
10976/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 * FUNCTION: WDA_SetBeaconFilterReq
10978 * Request to WDI to send the beacon filtering related information.
10979 */
10980VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
10981 tBeaconFilterMsg* pBeaconFilterInfo)
10982{
10983 WDI_Status status = WDI_STATUS_SUCCESS;
10984 tANI_U8 *dstPtr, *srcPtr;
10985 tANI_U8 filterLength;
10986 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
10987 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
10988 sizeof(WDI_BeaconFilterReqParamsType) ) ;
10989 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010992 if(NULL == wdiBeaconFilterInfo)
10993 {
10994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 VOS_ASSERT(0);
10997 return VOS_STATUS_E_NOMEM;
10998 }
10999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11000 if(NULL == pWdaParams)
11001 {
11002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 VOS_ASSERT(0);
11005 vos_mem_free(wdiBeaconFilterInfo);
11006 return VOS_STATUS_E_NOMEM;
11007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11009 pBeaconFilterInfo->beaconInterval;
11010 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11011 pBeaconFilterInfo->capabilityInfo;
11012 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11013 pBeaconFilterInfo->capabilityMask;
11014 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011015
11016 //Fill the BssIdx
11017 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11018
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 //Fill structure with info contained in the beaconFilterTable
11020 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11021 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11022 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11023 if(WDI_BEACON_FILTER_LEN < filterLength)
11024 {
11025 filterLength = WDI_BEACON_FILTER_LEN;
11026 }
11027 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011028 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11029 wdiBeaconFilterInfo->pUserData = pWdaParams;
11030
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 /* Store param pointer as passed in by caller */
11032 /* store Params pass it to WDI */
11033 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11034 pWdaParams->pWdaContext = pWDA;
11035 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11036
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011038 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011039 if(IS_WDI_STATUS_FAILURE(status))
11040 {
11041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11042 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11043 vos_mem_free(pWdaParams->wdaMsgParam) ;
11044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11045 vos_mem_free(pWdaParams) ;
11046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 return CONVERT_WDI2VOS_STATUS(status) ;
11048}
Jeff Johnson295189b2012-06-20 16:38:30 -070011049/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011050 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 *
11052 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011053void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011054{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11056
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011058 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011059
11060 if(NULL == pWdaParams)
11061 {
11062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011063 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011064 VOS_ASSERT(0) ;
11065 return ;
11066 }
11067
11068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11069 vos_mem_free(pWdaParams->wdaMsgParam);
11070 vos_mem_free(pWdaParams);
11071
Jeff Johnson295189b2012-06-20 16:38:30 -070011072 //print a msg, nothing else to do
11073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011074 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 return ;
11076}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011077/*
11078 * FUNCTION: WDA_RemBeaconFilterReqCallback
11079 * Free memory.
11080 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11081 */
11082void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11083{
11084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11085
11086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11087 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11088
11089 if(NULL == pWdaParams)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11092 "%s: pWdaParams received NULL", __func__);
11093 VOS_ASSERT(0);
11094 return;
11095 }
11096
11097 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11098 {
11099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11100 vos_mem_free(pWdaParams->wdaMsgParam);
11101 vos_mem_free(pWdaParams);
11102 }
11103
11104 return;
11105}
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 // TODO: PE does not have this feature for now implemented,
11107 // but the support for removing beacon filter exists between
11108 // HAL and FW. This function can be called whenever PE defines
11109 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011110/*
11111 * FUNCTION: WDA_RemBeaconFilterReq
11112 * Request to WDI to send the removal of beacon filtering related information.
11113 */
11114VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11115 tRemBeaconFilterMsg* pBeaconFilterInfo)
11116{
11117 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011118 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11120 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11121 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011122 tWDA_ReqParams *pWdaParams ;
11123
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 if(NULL == wdiBeaconFilterInfo)
11127 {
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 VOS_ASSERT(0);
11131 return VOS_STATUS_E_NOMEM;
11132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11134 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011135 {
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011139 vos_mem_free(wdiBeaconFilterInfo);
11140 vos_mem_free(pBeaconFilterInfo);
11141 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011143
11144 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11145 pBeaconFilterInfo->ucIeCount;
11146 //Fill structure with info contained in the ucRemIeId
11147 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11148 pBeaconFilterInfo->ucRemIeId,
11149 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11150 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11151 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011152
11153 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011154 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011155 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011156 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11157
11158 pWdaParams->pWdaContext = pWDA;
11159
Jeff Johnson43971f52012-07-17 12:26:56 -070011160 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011161 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011162 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011163 {
11164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11165 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011166 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11168 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011169 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011171 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011172}
Jeff Johnson295189b2012-06-20 16:38:30 -070011173/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011174 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 *
11176 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011177void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011178{
11179 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 if(NULL == pWdaParams)
11183 {
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011186 VOS_ASSERT(0) ;
11187 return ;
11188 }
11189
11190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11191 vos_mem_free(pWdaParams) ;
11192
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 return ;
11194}
Jeff Johnson295189b2012-06-20 16:38:30 -070011195/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011196 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11197 * Free memory.
11198 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11199 */
11200void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11201{
11202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11203
11204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11205 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11206
11207 if(NULL == pWdaParams)
11208 {
11209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11210 "%s: pWdaParams received NULL", __func__);
11211 VOS_ASSERT(0);
11212 return;
11213 }
11214
11215 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11216 {
11217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11218 vos_mem_free(pWdaParams);
11219 }
11220
11221 return;
11222}
11223/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 * FUNCTION: WDA_SetRSSIThresholdsReq
11225 * Request to WDI to set the RSSI thresholds (sta mode).
11226 */
11227VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11228{
11229 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011230 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 tWDA_CbContext *pWDA = NULL ;
11232 v_PVOID_t pVosContext = NULL;
11233 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11234 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11235 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11236 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 if(NULL == wdiRSSIThresholdsInfo)
11240 {
11241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 VOS_ASSERT(0);
11244 return VOS_STATUS_E_NOMEM;
11245 }
11246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11247 if(NULL == pWdaParams)
11248 {
11249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 VOS_ASSERT(0);
11252 vos_mem_free(wdiRSSIThresholdsInfo);
11253 return VOS_STATUS_E_NOMEM;
11254 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011255 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11257 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11258 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11260 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11261 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11263 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11264 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011265 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11266 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11268 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11269
Jeff Johnson295189b2012-06-20 16:38:30 -070011270 /* Store param pointer as passed in by caller */
11271 /* store Params pass it to WDI */
11272 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11273 pWdaParams->pWdaContext = pWDA;
11274 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011275 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011276 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011277 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 {
11279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11280 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011281 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11283 vos_mem_free(pWdaParams) ;
11284 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011285 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011286
11287}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011288/*
Yue Madb90ac12013-04-04 13:39:13 -070011289 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011290 *
11291 */
Yue Madb90ac12013-04-04 13:39:13 -070011292void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011293{
11294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11295
11296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 if(NULL == pWdaParams)
11299 {
11300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 VOS_ASSERT(0) ;
11303 return ;
11304 }
11305
11306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11307 vos_mem_free(pWdaParams->wdaMsgParam);
11308 vos_mem_free(pWdaParams) ;
11309
11310 //print a msg, nothing else to do
11311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011312 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011313 return ;
11314}
Jeff Johnson295189b2012-06-20 16:38:30 -070011315/*
Yue Madb90ac12013-04-04 13:39:13 -070011316 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011317 * Free memory.
11318 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011319 */
11320void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11321{
11322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11323
11324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11325 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11326
11327 if(NULL == pWdaParams)
11328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11330 "%s: Invalid pWdaParams pointer", __func__);
11331 VOS_ASSERT(0);
11332 return;
11333 }
11334
11335 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11336 {
11337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11338 vos_mem_free(pWdaParams->wdaMsgParam);
11339 vos_mem_free(pWdaParams);
11340 }
11341
11342 return;
11343}
11344/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 * FUNCTION: WDA_ProcessHostOffloadReq
11346 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11347 * to broadcast traffic (sta mode).
11348 */
11349VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11350 tSirHostOffloadReq *pHostOffloadParams)
11351{
11352 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011353 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11355 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11356 sizeof(WDI_HostOffloadReqParamsType)) ;
11357 tWDA_ReqParams *pWdaParams ;
11358
11359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011360 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011361
11362 if(NULL == wdiHostOffloadInfo)
11363 {
11364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011366 VOS_ASSERT(0);
11367 return VOS_STATUS_E_NOMEM;
11368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11370 if(NULL == pWdaParams)
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 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011376 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011377 return VOS_STATUS_E_NOMEM;
11378 }
11379
11380 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11381 pHostOffloadParams->offloadType;
11382 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11383 pHostOffloadParams->enableOrDisable;
11384
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011385 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11386 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11387
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11389 {
11390 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11391 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11392 pHostOffloadParams->params.hostIpv4Addr,
11393 4);
11394 break;
11395 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11396 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11397 pHostOffloadParams->params.hostIpv6Addr,
11398 16);
11399 break;
11400 case SIR_IPV6_NS_OFFLOAD:
11401 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11402 pHostOffloadParams->params.hostIpv6Addr,
11403 16);
11404
11405#ifdef WLAN_NS_OFFLOAD
11406 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11407 {
11408 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11409 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11410 16);
11411 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11412 }
11413 else
11414 {
11415 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11416 }
11417
11418 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11419 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11420 16);
11421 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11422 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11423 6);
11424
11425 //Only two are supported so let's go through them without a loop
11426 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11427 {
11428 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11429 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11430 16);
11431 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11432 }
11433 else
11434 {
11435 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11436 }
11437
11438 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11439 {
11440 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11441 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11442 16);
11443 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11444 }
11445 else
11446 {
11447 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11448 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011449 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11450 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 break;
11452#endif //WLAN_NS_OFFLOAD
11453 default:
11454 {
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11456 "No Handling for Offload Type %x in WDA "
11457 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11458 //WDA_VOS_ASSERT(0) ;
11459 }
11460 }
Yue Madb90ac12013-04-04 13:39:13 -070011461 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11462 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011463
Jeff Johnson295189b2012-06-20 16:38:30 -070011464 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011465 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 /* store Params pass it to WDI */
11467 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11468 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011469
Jeff Johnson295189b2012-06-20 16:38:30 -070011470
Jeff Johnson43971f52012-07-17 12:26:56 -070011471 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011472 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011473
Jeff Johnson43971f52012-07-17 12:26:56 -070011474 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 {
11476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011477 "Failure in host offload REQ WDI API, free all the memory %d",
11478 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011479 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11481 vos_mem_free(pWdaParams->wdaMsgParam);
11482 vos_mem_free(pWdaParams) ;
11483 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011484 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011485
11486}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011487/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011488 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 *
11490 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011491void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011492{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11494
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011496 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011497
11498 if(NULL == pWdaParams)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011501 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011502 VOS_ASSERT(0) ;
11503 return ;
11504 }
11505
11506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11507 vos_mem_free(pWdaParams->wdaMsgParam);
11508 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011509
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 //print a msg, nothing else to do
11511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011512 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 return ;
11514}
Jeff Johnson295189b2012-06-20 16:38:30 -070011515/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011516 * FUNCTION: WDA_KeepAliveReqCallback
11517 * Free memory.
11518 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11519 */
11520void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11521{
11522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11523
11524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11525 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11526
11527 if(NULL == pWdaParams)
11528 {
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11530 "%s: pWdaParams received NULL", __func__);
11531 VOS_ASSERT(0);
11532 return;
11533 }
11534
11535 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11536 {
11537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11538 vos_mem_free(pWdaParams->wdaMsgParam);
11539 vos_mem_free(pWdaParams);
11540 }
11541
11542 return;
11543}
11544/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 * FUNCTION: WDA_ProcessKeepAliveReq
11546 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11547 * wakeup due to broadcast traffic (sta mode).
11548 */
11549VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11550 tSirKeepAliveReq *pKeepAliveParams)
11551{
11552 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011553 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11555 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11556 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011557 tWDA_ReqParams *pWdaParams;
11558
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 if(NULL == wdiKeepAliveInfo)
11562 {
11563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011566 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 return VOS_STATUS_E_NOMEM;
11568 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011569
11570 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11571 if(NULL == pWdaParams)
11572 {
11573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011574 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011575 VOS_ASSERT(0);
11576 vos_mem_free(wdiKeepAliveInfo);
11577 vos_mem_free(pKeepAliveParams);
11578 return VOS_STATUS_E_NOMEM;
11579 }
11580
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11582 pKeepAliveParams->packetType;
11583 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11584 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011585
11586 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11587 pKeepAliveParams->bssId,
11588 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011589
11590 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11591 {
11592 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11593 pKeepAliveParams->hostIpv4Addr,
11594 SIR_IPV4_ADDR_LEN);
11595 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11596 pKeepAliveParams->destIpv4Addr,
11597 SIR_IPV4_ADDR_LEN);
11598 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11599 pKeepAliveParams->destMacAddr,
11600 SIR_MAC_ADDR_LEN);
11601 }
11602 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11603 {
11604 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11605 SIR_IPV4_ADDR_LEN,
11606 0);
11607 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11608 SIR_IPV4_ADDR_LEN,
11609 0);
11610 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11611 SIR_MAC_ADDR_LEN,
11612 0);
11613 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011614 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11615 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011616
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011618 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11621 pWdaParams->pWdaContext = pWDA;
11622
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11624 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11625 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11626 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11627 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11629 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11630 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11631 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11632 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11634 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11635 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11636 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11637 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11638 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11639 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11640 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11642 "TimePeriod %d PacketType %d",
11643 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11644 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011645 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011646 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011647
Jeff Johnson43971f52012-07-17 12:26:56 -070011648 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 {
11650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11651 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011652 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11654 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011655 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011657 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658
11659}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011660/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011661 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 *
11663 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011664void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011665 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11666 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011667{
11668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 if(NULL == pWdaParams)
11672 {
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 VOS_ASSERT(0) ;
11676 return ;
11677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11679 vos_mem_free(pWdaParams->wdaMsgParam);
11680 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011681 return ;
11682}
Jeff Johnson295189b2012-06-20 16:38:30 -070011683/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011684 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11685 * Free memory.
11686 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11687 */
11688void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11689{
11690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11691
11692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11693 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11694
11695 if(NULL == pWdaParams)
11696 {
11697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11698 "%s: pWdaParams received NULL", __func__);
11699 VOS_ASSERT(0);
11700 return;
11701 }
11702
11703 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11704 {
11705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11706 vos_mem_free(pWdaParams->wdaMsgParam);
11707 vos_mem_free(pWdaParams);
11708 }
11709
11710 return;
11711}
11712
11713/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11715 * Request to WDI to add WOWL Bcast pattern
11716 */
11717VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11718 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11719{
11720 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011721 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011722 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11723 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11724 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11725 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 if(NULL == wdiWowlAddBcPtrnInfo)
11729 {
11730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 VOS_ASSERT(0);
11733 return VOS_STATUS_E_NOMEM;
11734 }
11735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11736 if(NULL == pWdaParams)
11737 {
11738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 VOS_ASSERT(0);
11741 vos_mem_free(wdiWowlAddBcPtrnInfo);
11742 return VOS_STATUS_E_NOMEM;
11743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011744 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11745 pWowlAddBcPtrnParams->ucPatternId;
11746 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11747 pWowlAddBcPtrnParams->ucPatternByteOffset;
11748 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11749 pWowlAddBcPtrnParams->ucPatternMaskSize;
11750 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11751 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11753 {
11754 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11755 pWowlAddBcPtrnParams->ucPattern,
11756 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11757 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11758 pWowlAddBcPtrnParams->ucPatternMask,
11759 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11760 }
11761 else
11762 {
11763 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11764 pWowlAddBcPtrnParams->ucPattern,
11765 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11766 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11767 pWowlAddBcPtrnParams->ucPatternMask,
11768 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11769
11770 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11771 pWowlAddBcPtrnParams->ucPatternExt,
11772 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11773 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11774 pWowlAddBcPtrnParams->ucPatternMaskExt,
11775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11776 }
11777
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011778 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11779 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11780
Yue Ma7f44bbe2013-04-12 11:47:39 -070011781 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11782 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011783 /* Store param pointer as passed in by caller */
11784 /* store Params pass it to WDI */
11785 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11786 pWdaParams->pWdaContext = pWDA;
11787 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011788 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011789 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011790 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 {
11792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11793 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011794 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011795 vos_mem_free(pWdaParams->wdaMsgParam) ;
11796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11797 vos_mem_free(pWdaParams) ;
11798 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011799 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011800
11801}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011803 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 *
11805 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011806void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011807 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11808 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011809{
11810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 if(NULL == pWdaParams)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011817 VOS_ASSERT(0) ;
11818 return ;
11819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11821 vos_mem_free(pWdaParams->wdaMsgParam);
11822 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011823 return ;
11824}
Jeff Johnson295189b2012-06-20 16:38:30 -070011825/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011826 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11827 * Free memory.
11828 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11829 */
11830void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11831{
11832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11833
11834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11835 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11836
11837 if(NULL == pWdaParams)
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11840 "%s: pWdaParams received NULL", __func__);
11841 VOS_ASSERT(0);
11842 return;
11843 }
11844
11845 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11846 {
11847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11848 vos_mem_free(pWdaParams->wdaMsgParam);
11849 vos_mem_free(pWdaParams);
11850 }
11851
11852 return;
11853}
11854/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11856 * Request to WDI to delete WOWL Bcast pattern
11857 */
11858VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11859 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11860{
11861 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011862 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011863 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11864 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11865 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11866 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 if(NULL == wdiWowlDelBcPtrnInfo)
11870 {
11871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 VOS_ASSERT(0);
11874 return VOS_STATUS_E_NOMEM;
11875 }
11876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11877 if(NULL == pWdaParams)
11878 {
11879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011881 VOS_ASSERT(0);
11882 vos_mem_free(wdiWowlDelBcPtrnInfo);
11883 return VOS_STATUS_E_NOMEM;
11884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11886 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011887
11888 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11889 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11890
Yue Ma7f44bbe2013-04-12 11:47:39 -070011891 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11892 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 /* Store param pointer as passed in by caller */
11894 /* store Params pass it to WDI */
11895 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11896 pWdaParams->pWdaContext = pWDA;
11897 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011898 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011899 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011900 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 {
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11903 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011904 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 vos_mem_free(pWdaParams->wdaMsgParam) ;
11906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11907 vos_mem_free(pWdaParams) ;
11908 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011909 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011910
11911}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011912/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011913 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 *
11915 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011916void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011917{
11918 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011919 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011920 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 if(NULL == pWdaParams)
11924 {
11925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011926 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011927 VOS_ASSERT(0) ;
11928 return ;
11929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011931 if (NULL == pWDA)
11932 {
11933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11934 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011935
11936 if(pWdaParams->wdaWdiApiMsgParam)
11937 {
11938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11939 }
11940 vos_mem_free(pWdaParams);
11941
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011942 VOS_ASSERT(0);
11943 return ;
11944 }
11945
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11947
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011948 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11949
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11951 vos_mem_free(pWdaParams) ;
11952
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011953 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011954 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011956 return ;
11957}
Jeff Johnson295189b2012-06-20 16:38:30 -070011958/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011959 * FUNCTION: WDA_WowlEnterReqCallback
11960 * Free memory and send WOWL Enter RSP back to PE.
11961 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11962 */
11963void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11964{
11965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011966 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011967 tSirHalWowlEnterParams *pWowlEnterParams;
11968
11969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11970 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11971
11972 if(NULL == pWdaParams)
11973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11975 "%s: pWdaParams received NULL", __func__);
11976 VOS_ASSERT(0);
11977 return;
11978 }
11979
11980 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011981 if (NULL == pWDA)
11982 {
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11984 "%s:pWDA is NULL", __func__);
11985 VOS_ASSERT(0);
11986 return ;
11987 }
11988
Yue Ma7f44bbe2013-04-12 11:47:39 -070011989 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
11990 pWowlEnterParams->status = wdiStatus;
11991
11992 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11993 {
11994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11995 vos_mem_free(pWdaParams);
11996 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
11997 }
11998
11999 return;
12000}
12001/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012002 * FUNCTION: WDA_ProcessWowlEnterReq
12003 * Request to WDI to enter WOWL
12004 */
12005VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12006 tSirHalWowlEnterParams *pWowlEnterParams)
12007{
12008 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012009 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12011 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12012 sizeof(WDI_WowlEnterReqParamsType)) ;
12013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 if(NULL == wdiWowlEnterInfo)
12017 {
12018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012020 VOS_ASSERT(0);
12021 return VOS_STATUS_E_NOMEM;
12022 }
12023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12024 if(NULL == pWdaParams)
12025 {
12026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 VOS_ASSERT(0);
12029 vos_mem_free(wdiWowlEnterInfo);
12030 return VOS_STATUS_E_NOMEM;
12031 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012032
12033 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12034
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12036 pWowlEnterParams->magicPtrn,
12037 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012038 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12039 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12041 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12043 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12045 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12047 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12049 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12051 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012052 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12053 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012054#ifdef WLAN_WAKEUP_EVENTS
12055 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12056 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12057
12058 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12059 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12060
12061 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12062 pWowlEnterParams->ucWowNetScanOffloadMatch;
12063
12064 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12065 pWowlEnterParams->ucWowGTKRekeyError;
12066
12067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12068 pWowlEnterParams->ucWoWBSSConnLoss;
12069#endif // WLAN_WAKEUP_EVENTS
12070
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012071 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12072 pWowlEnterParams->bssIdx;
12073
Yue Ma7f44bbe2013-04-12 11:47:39 -070012074 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12075 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012076 /* Store param pointer as passed in by caller */
12077 /* store Params pass it to WDI */
12078 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12079 pWdaParams->pWdaContext = pWDA;
12080 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012081 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012082 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012083 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 {
12085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12086 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012087 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 vos_mem_free(pWdaParams->wdaMsgParam) ;
12089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12090 vos_mem_free(pWdaParams) ;
12091 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012092 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012093
12094}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012095/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012096 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 *
12098 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012099void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012100{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012102 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012103 tSirHalWowlExitParams *pWowlExitParams;
12104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012105 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012106 if(NULL == pWdaParams)
12107 {
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012109 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012110 VOS_ASSERT(0) ;
12111 return ;
12112 }
12113 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012114 if (NULL == pWDA)
12115 {
12116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12117 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012118
12119 if(pWdaParams->wdaWdiApiMsgParam)
12120 {
12121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12122 }
12123 vos_mem_free(pWdaParams);
12124
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012125 VOS_ASSERT(0);
12126 return ;
12127 }
12128
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012129 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12130
12131 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012132 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012133
12134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12135 vos_mem_free(pWdaParams) ;
12136
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012138 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012139 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 return ;
12141}
Jeff Johnson295189b2012-06-20 16:38:30 -070012142/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012143 * FUNCTION: WDA_WowlExitReqCallback
12144 * Free memory and send WOWL Exit RSP back to PE.
12145 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12146 */
12147void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12148{
12149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012150 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012151 tSirHalWowlExitParams *pWowlExitParams;
12152
12153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12154 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12155
12156 if(NULL == pWdaParams)
12157 {
12158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12159 "%s: pWdaParams received NULL", __func__);
12160 VOS_ASSERT(0);
12161 return;
12162 }
12163
12164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012165 if (NULL == pWDA)
12166 {
12167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12168 "%s:pWDA is NULL", __func__);
12169 VOS_ASSERT(0);
12170 return ;
12171 }
12172
Yue Ma7f44bbe2013-04-12 11:47:39 -070012173 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12174 pWowlExitParams->status = wdiStatus;
12175
12176 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12177 {
12178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12179 vos_mem_free(pWdaParams);
12180 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12181 }
12182
12183 return;
12184}
12185/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 * FUNCTION: WDA_ProcessWowlExitReq
12187 * Request to WDI to add WOWL Bcast pattern
12188 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012189VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12190 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012191{
12192 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012193 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012194 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12195 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12196 sizeof(WDI_WowlExitReqParamsType)) ;
12197 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012199 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012200 if(NULL == wdiWowlExitInfo)
12201 {
12202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012203 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012204 VOS_ASSERT(0);
12205 return VOS_STATUS_E_NOMEM;
12206 }
12207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12208 if(NULL == pWdaParams)
12209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012211 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012212 VOS_ASSERT(0);
12213 vos_mem_free(wdiWowlExitInfo);
12214 return VOS_STATUS_E_NOMEM;
12215 }
12216
12217 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12218 pWowlExitParams->bssIdx;
12219
Yue Ma7f44bbe2013-04-12 11:47:39 -070012220 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12221 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012222
12223 /* Store param pointer as passed in by caller */
12224 /* store Params pass it to WDI */
12225 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12226 pWdaParams->pWdaContext = pWDA;
12227 pWdaParams->wdaMsgParam = pWowlExitParams;
12228
12229 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012230 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012231
Jeff Johnson43971f52012-07-17 12:26:56 -070012232 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012233 {
12234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12235 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012236 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12238 vos_mem_free(pWdaParams->wdaMsgParam);
12239 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012240 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012241 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012242}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012243/*
12244 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12245 * Request to WDI to determine whether a given station is capable of
12246 * using HW-based frame translation
12247 */
12248v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12249 tANI_U8 staIdx)
12250{
12251 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12252}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012253
12254/*
12255 * FUNCTION: WDA_IsSelfSTA
12256 * Request to WDI to determine whether a given STAID is self station
12257 * index.
12258 */
12259v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12260{
12261
12262 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12263
Girish Gowli05cf44e2014-06-12 21:53:37 +053012264 if (NULL != pWDA)
12265 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12266 else
12267 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012268}
Jeff Johnson295189b2012-06-20 16:38:30 -070012269/*
12270 * FUNCTION: WDA_NvDownloadReqCallback
12271 * send NV Download RSP back to PE
12272 */
12273void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12274 void* pUserData)
12275{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012276
12277 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012278 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012279
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012281 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012282
12283 if(NULL == pWdaParams)
12284 {
12285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012286 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012287 VOS_ASSERT(0) ;
12288 return ;
12289 }
12290
12291 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012292 if (NULL == pWDA)
12293 {
12294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12295 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012296
12297 if(pWdaParams->wdaWdiApiMsgParam)
12298 {
12299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12300 }
12301 vos_mem_free(pWdaParams);
12302
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012303 VOS_ASSERT(0);
12304 return ;
12305 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012306
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12309 vos_mem_free(pWdaParams);
12310
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012312 return ;
12313}
Jeff Johnson295189b2012-06-20 16:38:30 -070012314/*
12315 * FUNCTION: WDA_ProcessNvDownloadReq
12316 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12317 */
12318VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12319{
12320 /* Initialize the local Variables*/
12321 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12322 v_VOID_t *pNvBuffer=NULL;
12323 v_SIZE_t bufferSize = 0;
12324 WDI_Status status = WDI_STATUS_E_FAILURE;
12325 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012326 tWDA_ReqParams *pWdaParams ;
12327
Jeff Johnson295189b2012-06-20 16:38:30 -070012328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012329 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012330 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012333 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012334 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 return VOS_STATUS_E_FAILURE;
12336 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012337
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012339 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12340
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12342 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012343 if(NULL == wdiNvDownloadReqParam)
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 VOS_ASSERT(0);
12348 return VOS_STATUS_E_NOMEM;
12349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012350 /* Copy Params to wdiNvDownloadReqParam*/
12351 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12352 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012353
12354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12355 if(NULL == pWdaParams)
12356 {
12357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012358 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012359 VOS_ASSERT(0);
12360 vos_mem_free(wdiNvDownloadReqParam);
12361 return VOS_STATUS_E_NOMEM;
12362 }
12363
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012365 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12366 pWdaParams->wdaMsgParam = NULL;
12367 pWdaParams->pWdaContext = pWDA;
12368
12369
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012371
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012373 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12374
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 if(IS_WDI_STATUS_FAILURE(status))
12376 {
12377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12378 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12380 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012381 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012382 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012383}
12384/*
12385 * FUNCTION: WDA_FlushAcReqCallback
12386 * send Flush AC RSP back to TL
12387 */
12388void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12389{
12390 vos_msg_t wdaMsg = {0} ;
12391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12392 tFlushACReq *pFlushACReqParams;
12393 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012395 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 if(NULL == pWdaParams)
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012399 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 VOS_ASSERT(0) ;
12401 return ;
12402 }
12403
12404 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12405 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12406 if(NULL == pFlushACRspParams)
12407 {
12408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012410 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012411 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012412 return ;
12413 }
12414 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12415 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12416 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12417 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12418 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012419 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 vos_mem_free(pWdaParams->wdaMsgParam) ;
12421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12422 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12424 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12425 // POST message to TL
12426 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12427
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 return ;
12429}
Jeff Johnson295189b2012-06-20 16:38:30 -070012430/*
12431 * FUNCTION: WDA_ProcessFlushAcReq
12432 * Request to WDI to Update the DELBA REQ params.
12433 */
12434VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12435 tFlushACReq *pFlushAcReqParams)
12436{
12437 WDI_Status status = WDI_STATUS_SUCCESS ;
12438 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12439 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12440 sizeof(WDI_FlushAcReqParamsType)) ;
12441 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012442 if(NULL == wdiFlushAcReqParam)
12443 {
12444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 VOS_ASSERT(0);
12447 return VOS_STATUS_E_NOMEM;
12448 }
12449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12450 if(NULL == pWdaParams)
12451 {
12452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012454 VOS_ASSERT(0);
12455 vos_mem_free(wdiFlushAcReqParam);
12456 return VOS_STATUS_E_NOMEM;
12457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012459 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12461 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12462 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12463 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012464 /* Store Flush AC pointer, as this will be used for response */
12465 /* store Params pass it to WDI */
12466 pWdaParams->pWdaContext = pWDA;
12467 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12468 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12470 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 if(IS_WDI_STATUS_FAILURE(status))
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12475 vos_mem_free(pWdaParams->wdaMsgParam) ;
12476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12477 vos_mem_free(pWdaParams) ;
12478 //TODO: respond to TL with failure
12479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012480 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012481}
Jeff Johnson295189b2012-06-20 16:38:30 -070012482/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012483 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012484 *
12485 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012486void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012487{
12488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012489 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012490 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012491
12492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012493 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012494 if(NULL == pWdaParams)
12495 {
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012497 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 VOS_ASSERT(0) ;
12499 return ;
12500 }
12501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012502 if (NULL == pWDA)
12503 {
12504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12505 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012506 vos_mem_free(pWdaParams->wdaMsgParam) ;
12507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12508 vos_mem_free(pWdaParams) ;
12509
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012510 VOS_ASSERT(0);
12511 return ;
12512 }
12513
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12515 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12516 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12517 {
12518 pWDA->wdaAmpSessionOn = VOS_FALSE;
12519 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012520 vos_mem_free(pWdaParams->wdaMsgParam) ;
12521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12522 vos_mem_free(pWdaParams) ;
12523 /*
12524 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12525 * param here
12526 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 return ;
12528}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012529/*
12530 * FUNCTION: WDA_BtAmpEventReqCallback
12531 * Free memory.
12532 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12533 */
12534void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12535{
12536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012537 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012538 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012539
Yue Ma7f44bbe2013-04-12 11:47:39 -070012540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12541 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12542
12543 if(NULL == pWdaParams)
12544 {
12545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12546 "%s: pWdaParams received NULL", __func__);
12547 VOS_ASSERT(0);
12548 return;
12549 }
12550
12551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012552 if (NULL == pWDA)
12553 {
12554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12555 "%s:pWDA is NULL", __func__);
12556 VOS_ASSERT(0);
12557 return ;
12558 }
12559
Yue Ma7f44bbe2013-04-12 11:47:39 -070012560 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12561
12562 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12563 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12564 {
12565 pWDA->wdaAmpSessionOn = VOS_FALSE;
12566 }
12567
12568 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12569 {
12570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12571 vos_mem_free(pWdaParams->wdaMsgParam);
12572 vos_mem_free(pWdaParams);
12573 }
12574
12575 return;
12576}
Jeff Johnson295189b2012-06-20 16:38:30 -070012577/*
12578 * FUNCTION: WDA_ProcessBtAmpEventReq
12579 * Request to WDI to Update with BT AMP events.
12580 */
12581VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12582 tSmeBtAmpEvent *pBtAmpEventParams)
12583{
12584 WDI_Status status = WDI_STATUS_SUCCESS ;
12585 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12586 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12587 sizeof(WDI_BtAmpEventParamsType)) ;
12588 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012591 if(NULL == wdiBtAmpEventParam)
12592 {
12593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012595 VOS_ASSERT(0);
12596 return VOS_STATUS_E_NOMEM;
12597 }
12598 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12599 if(NULL == pWdaParams)
12600 {
12601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012603 VOS_ASSERT(0);
12604 vos_mem_free(wdiBtAmpEventParam);
12605 return VOS_STATUS_E_NOMEM;
12606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012607 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12608 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012609 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12610 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012611 /* Store BT AMP event pointer, as this will be used for response */
12612 /* store Params pass it to WDI */
12613 pWdaParams->pWdaContext = pWDA;
12614 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12615 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012617 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 if(IS_WDI_STATUS_FAILURE(status))
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12621 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12622 vos_mem_free(pWdaParams->wdaMsgParam) ;
12623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12624 vos_mem_free(pWdaParams) ;
12625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012626 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12627 {
12628 pWDA->wdaAmpSessionOn = VOS_TRUE;
12629 }
12630 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012631}
12632
Jeff Johnson295189b2012-06-20 16:38:30 -070012633/*
12634 * FUNCTION: WDA_FTMCommandReqCallback
12635 * Handle FTM CMD response came from HAL
12636 * Route responce to HDD FTM
12637 */
12638void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12639 void *usrData)
12640{
12641 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12643 {
12644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012645 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012646 return;
12647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 /* Release Current FTM Command Request */
12649 vos_mem_free(pWDA->wdaFTMCmdReq);
12650 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012651 /* Post FTM Responce to HDD FTM */
12652 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 return;
12654}
Jeff Johnson295189b2012-06-20 16:38:30 -070012655/*
12656 * FUNCTION: WDA_ProcessFTMCommand
12657 * Send FTM command to WDI
12658 */
12659VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12660 tPttMsgbuffer *pPTTFtmCmd)
12661{
12662 WDI_Status status = WDI_STATUS_SUCCESS;
12663 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 ftmCMDReq = (WDI_FTMCommandReqType *)
12665 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12666 if(NULL == ftmCMDReq)
12667 {
12668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12669 "WDA FTM Command buffer alloc fail");
12670 return VOS_STATUS_E_NOMEM;
12671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12673 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 /* Send command to WDI */
12676 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 return status;
12678}
Jeff Johnsone7245742012-09-05 17:12:55 -070012679#ifdef FEATURE_OEM_DATA_SUPPORT
12680/*
12681 * FUNCTION: WDA_StartOemDataReqCallback
12682 *
12683 */
12684void WDA_StartOemDataReqCallback(
12685 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12686 void* pUserData)
12687{
12688 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012690 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012691 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692
Jeff Johnsone7245742012-09-05 17:12:55 -070012693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012694 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012695
12696 if(NULL == pWdaParams)
12697 {
12698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012699 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012700 VOS_ASSERT(0) ;
12701 return ;
12702 }
12703 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12704
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012705 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012706 {
12707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012708 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012709 VOS_ASSERT(0);
12710 return ;
12711 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012712
Jeff Johnsone7245742012-09-05 17:12:55 -070012713 /*
12714 * Allocate memory for response params sent to PE
12715 */
12716 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12717
12718 // Check if memory is allocated for OemdataMeasRsp Params.
12719 if(NULL == pOemDataRspParams)
12720 {
12721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12722 "OEM DATA WDA callback alloc fail");
12723 VOS_ASSERT(0) ;
12724 return;
12725 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012726
Jeff Johnsone7245742012-09-05 17:12:55 -070012727 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12729 vos_mem_free(pWdaParams->wdaMsgParam);
12730 vos_mem_free(pWdaParams) ;
12731
Jeff Johnsone7245742012-09-05 17:12:55 -070012732 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012733 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012734 * Also, here success always means that we have atleast one BSSID.
12735 */
12736 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12737
12738 //enable Tx
12739 status = WDA_ResumeDataTx(pWDA);
12740 if(status != VOS_STATUS_SUCCESS)
12741 {
12742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12743 }
12744 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12745 return ;
12746}
12747/*
12748 * FUNCTION: WDA_ProcessStartOemDataReq
12749 * Send Start Oem Data Req to WDI
12750 */
12751VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12752 tStartOemDataReq *pOemDataReqParams)
12753{
12754 WDI_Status status = WDI_STATUS_SUCCESS;
12755 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012756 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012757
12758 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12759
12760 if(NULL == wdiOemDataReqParams)
12761 {
12762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012764 VOS_ASSERT(0);
12765 return VOS_STATUS_E_NOMEM;
12766 }
12767
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012768 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12769 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12770 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12771 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012772
12773 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12774
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12776 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012777 {
12778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012780 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012781 vos_mem_free(pOemDataReqParams);
12782 VOS_ASSERT(0);
12783 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012784 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012785
Bernald44a1ae2013-01-09 08:30:39 -080012786 pWdaParams->pWdaContext = (void*)pWDA;
12787 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12788 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012789
12790 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12791 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012792
12793 if(IS_WDI_STATUS_FAILURE(status))
12794 {
12795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12796 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12798 vos_mem_free(pWdaParams->wdaMsgParam);
12799 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012800 }
12801 return CONVERT_WDI2VOS_STATUS(status) ;
12802}
12803#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012805 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012806 *
12807 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012808void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012809{
12810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012813 if(NULL == pWdaParams)
12814 {
12815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012817 VOS_ASSERT(0) ;
12818 return ;
12819 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012820
12821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12822 vos_mem_free(pWdaParams->wdaMsgParam);
12823 vos_mem_free(pWdaParams);
12824
12825 return ;
12826}
12827/*
12828 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12829 * Free memory.
12830 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12831 */
12832void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12833{
12834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12835
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12837 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12838
12839 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012840 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12842 "%s: pWdaParams received NULL", __func__);
12843 VOS_ASSERT(0);
12844 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012846
12847 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 {
12849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012850 vos_mem_free(pWdaParams->wdaMsgParam);
12851 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012852 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012853
12854 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012855}
Jeff Johnson295189b2012-06-20 16:38:30 -070012856#ifdef WLAN_FEATURE_GTK_OFFLOAD
12857/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012858 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012859 *
12860 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012861void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012862 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012863{
12864 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12865
12866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012867 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012868 if(NULL == pWdaParams)
12869 {
12870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12871 "%s: pWdaParams received NULL", __func__);
12872 VOS_ASSERT(0);
12873 return;
12874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012875
Jeff Johnson295189b2012-06-20 16:38:30 -070012876 vos_mem_free(pWdaParams->wdaMsgParam) ;
12877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12878 vos_mem_free(pWdaParams) ;
12879
12880 //print a msg, nothing else to do
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012882 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012883
12884 return ;
12885}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012886/*
12887 * FUNCTION: WDA_GTKOffloadReqCallback
12888 * Free memory.
12889 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12890 */
12891void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12892{
12893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012894
Yue Ma7f44bbe2013-04-12 11:47:39 -070012895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12897
12898 if(NULL == pWdaParams)
12899 {
12900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12901 "%s: pWdaParams received NULL", __func__);
12902 VOS_ASSERT(0);
12903 return;
12904 }
12905
12906 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12907 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012908 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12909 sizeof(WDI_GtkOffloadReqMsg));
12910 vos_mem_zero(pWdaParams->wdaMsgParam,
12911 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12913 vos_mem_free(pWdaParams->wdaMsgParam);
12914 vos_mem_free(pWdaParams);
12915 }
12916
12917 return;
12918}
Jeff Johnson295189b2012-06-20 16:38:30 -070012919/*
12920 * FUNCTION: WDA_ProcessGTKOffloadReq
12921 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12922 * to broadcast traffic (sta mode).
12923 */
12924VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12925 tpSirGtkOffloadParams pGtkOffloadParams)
12926{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012927 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012928 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12929 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12930 sizeof(WDI_GtkOffloadReqMsg)) ;
12931 tWDA_ReqParams *pWdaParams ;
12932
12933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012934 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012935
12936 if(NULL == wdiGtkOffloadReqMsg)
12937 {
12938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012940 VOS_ASSERT(0);
12941 return VOS_STATUS_E_NOMEM;
12942 }
12943
12944 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12945 if(NULL == pWdaParams)
12946 {
12947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012949 VOS_ASSERT(0);
12950 vos_mem_free(wdiGtkOffloadReqMsg);
12951 return VOS_STATUS_E_NOMEM;
12952 }
12953
12954 //
12955 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12956 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012957
12958 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012959 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012960
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12962 // Copy KCK
12963 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12964 // Copy KEK
12965 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12966 // Copy KeyReplayCounter
12967 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12968 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12969
Yue Ma7f44bbe2013-04-12 11:47:39 -070012970 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12971 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012972
Jeff Johnson295189b2012-06-20 16:38:30 -070012973
12974 /* Store Params pass it to WDI */
12975 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
12976 pWdaParams->pWdaContext = pWDA;
12977 /* Store param pointer as passed in by caller */
12978 pWdaParams->wdaMsgParam = pGtkOffloadParams;
12979
Yue Ma7f44bbe2013-04-12 11:47:39 -070012980 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012981
12982 if(IS_WDI_STATUS_FAILURE(status))
12983 {
12984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12985 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012986 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
12987 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12989 vos_mem_free(pWdaParams->wdaMsgParam);
12990 vos_mem_free(pWdaParams);
12991 }
12992
12993 return CONVERT_WDI2VOS_STATUS(status) ;
12994}
12995
12996/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012997 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 *
12999 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013000void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013001 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013002{
13003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13004 tWDA_CbContext *pWDA;
13005 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013006 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013007 vos_msg_t vosMsg;
13008
13009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013010 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013011
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013012 if(NULL == pWdaParams)
13013 {
13014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13015 "%s: pWdaParams received NULL", __func__);
13016 VOS_ASSERT(0);
13017 return;
13018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013019
Nirav Shah374de6e2014-02-13 16:40:01 +053013020 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13021 if(NULL == pGtkOffloadGetInfoRsp)
13022 {
13023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13024 "%s: vos_mem_malloc failed ", __func__);
13025 VOS_ASSERT(0);
13026 return;
13027 }
13028
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13030 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13031
13032 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13033 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13034
13035 /* Message Header */
13036 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013037 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013038
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013039 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13040 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13041 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13042 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13043 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013044
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013045 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13046 pwdiGtkOffloadGetInfoRsparams->bssId,
13047 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 /* VOS message wrapper */
13049 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13050 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13051 vosMsg.bodyval = 0;
13052
13053 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13054 {
13055 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013056 vos_mem_zero(pGtkOffloadGetInfoRsp,
13057 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13059 }
13060
13061 vos_mem_free(pWdaParams->wdaMsgParam) ;
13062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13063 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013064
13065 return;
13066}
13067/*
13068 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13069 * Free memory and send RSP back to SME.
13070 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13071 */
13072void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13073{
13074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13075 vos_msg_t vosMsg;
13076
13077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13078 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13079
13080 if(NULL == pWdaParams)
13081 {
13082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13083 "%s: pWdaParams received NULL", __func__);
13084 VOS_ASSERT(0);
13085 return;
13086 }
13087
13088 /* VOS message wrapper */
13089 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13090 vosMsg.bodyptr = NULL;
13091 vosMsg.bodyval = 0;
13092
13093 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13094 {
13095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13096 vos_mem_free(pWdaParams->wdaMsgParam);
13097 vos_mem_free(pWdaParams);
13098 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13099 }
13100
13101 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013102}
13103#endif
13104
13105/*
13106 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13107 * Request to WDI to set Tx Per Tracking configurations
13108 */
13109VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13110{
13111 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013112 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13114 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13115 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 if(NULL == pwdiSetTxPerTrackingReqParams)
13120 {
13121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 vos_mem_free(pTxPerTrackingParams);
13124 VOS_ASSERT(0);
13125 return VOS_STATUS_E_NOMEM;
13126 }
13127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13128 if(NULL == pWdaParams)
13129 {
13130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13133 vos_mem_free(pTxPerTrackingParams);
13134 VOS_ASSERT(0);
13135 return VOS_STATUS_E_NOMEM;
13136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13138 pTxPerTrackingParams->ucTxPerTrackingEnable;
13139 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13140 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13141 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13142 pTxPerTrackingParams->ucTxPerTrackingRatio;
13143 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13144 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013145 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13146 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013147 /* Store param pointer as passed in by caller */
13148 /* store Params pass it to WDI
13149 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13150 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13151 pWdaParams->pWdaContext = pWDA;
13152 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013153 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013154 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013155 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013156 {
13157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13158 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013159 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 vos_mem_free(pWdaParams->wdaMsgParam) ;
13161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13162 vos_mem_free(pWdaParams) ;
13163 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013164 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013165
13166}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013167/*
13168 * FUNCTION: WDA_HALDumpCmdCallback
13169 * Send the VOS complete .
13170 */
13171void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13172 void* pUserData)
13173{
13174 tANI_U8 *buffer = NULL;
13175 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013176 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 if(NULL == pWdaParams)
13178 {
13179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013180 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013181 VOS_ASSERT(0) ;
13182 return ;
13183 }
13184
13185 pWDA = pWdaParams->pWdaContext;
13186 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 if(wdiRspParams->usBufferLen > 0)
13188 {
13189 /*Copy the Resp data to UMAC supplied buffer*/
13190 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13191 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013192
13193 if (!pWdaParams->wdaHALDumpAsync)
13194 {/* Indicate VOSS about the start complete */
13195 vos_WDAComplete_cback(pWDA->pVosContext);
13196 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13198 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013199 return ;
13200}
13201
Jeff Johnson295189b2012-06-20 16:38:30 -070013202/*
13203 * FUNCTION: WDA_ProcessHALDumpCmdReq
13204 * Send Dump command to WDI
13205 */
13206VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13207 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013208 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013209{
13210 WDI_Status status = WDI_STATUS_SUCCESS;
13211 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13212 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013213 tWDA_HalDumpReqParams *pWdaParams ;
13214
Jeff Johnson295189b2012-06-20 16:38:30 -070013215 pVosContextType pVosContext = NULL;
13216 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013217 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13218 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013219 if(pVosContext)
13220 {
13221 if (pVosContext->isLogpInProgress)
13222 {
13223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13224 "%s:LOGP in Progress. Ignore!!!", __func__);
13225 return VOS_STATUS_E_BUSY;
13226 }
13227 }
13228 else
13229 {
13230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13231 "%s: VOS Context Null", __func__);
13232 return VOS_STATUS_E_RESOURCES;
13233 }
13234
Siddharth Bhal68115602015-01-18 20:44:55 +053013235 if (NULL == pVosContext->pWDAContext)
13236 {
13237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13238 "%s: WDA Context Null", __func__);
13239 return VOS_STATUS_E_RESOURCES;
13240 }
13241 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 if(NULL == pWdaParams)
13243 {
13244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013246 return VOS_STATUS_E_NOMEM;
13247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013248 /* Allocate memory WDI request structure*/
13249 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13250 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13251 if(NULL == wdiHALDumpCmdReqParam)
13252 {
13253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13254 "WDA HAL DUMP Command buffer alloc fail");
13255 vos_mem_free(pWdaParams);
13256 return WDI_STATUS_E_FAILURE;
13257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013259 /* Extract the arguments */
13260 wdiHalDumpCmdInfo->command = cmd;
13261 wdiHalDumpCmdInfo->argument1 = arg1;
13262 wdiHalDumpCmdInfo->argument2 = arg2;
13263 wdiHalDumpCmdInfo->argument3 = arg3;
13264 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013265 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013266 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013267 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013268
13269 /* Response message will be passed through the buffer */
13270 pWdaParams->wdaMsgParam = (void *)pBuffer;
13271
13272 /* store Params pass it to WDI */
13273 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013275 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13276 pWdaParams);
13277 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13278 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013280 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13281 WDA_DUMPCMD_WAIT_TIMEOUT );
13282 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013283 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013284 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13285 {
13286 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13287 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13288 }
13289 else
13290 {
13291 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13292 "%s: WDA_HALDUMP reporting other error",__func__);
13293 }
13294 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013296 }
13297 return status;
13298}
Jeff Johnson295189b2012-06-20 16:38:30 -070013299#ifdef WLAN_FEATURE_GTK_OFFLOAD
13300/*
13301 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13302 * Request to WDI to get GTK Offload Information
13303 */
13304VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13305 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13306{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013307 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13309 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13310 tWDA_ReqParams *pWdaParams ;
13311
13312 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13313 {
13314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013316 VOS_ASSERT(0);
13317 return VOS_STATUS_E_NOMEM;
13318 }
13319
13320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13321 if(NULL == pWdaParams)
13322 {
13323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 VOS_ASSERT(0);
13326 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13327 return VOS_STATUS_E_NOMEM;
13328 }
13329
Yue Ma7f44bbe2013-04-12 11:47:39 -070013330 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13331 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013332
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 /* Store Params pass it to WDI */
13334 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13335 pWdaParams->pWdaContext = pWDA;
13336 /* Store param pointer as passed in by caller */
13337 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13338
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013339 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013340 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013341
Yue Ma7f44bbe2013-04-12 11:47:39 -070013342 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013343
13344 if(IS_WDI_STATUS_FAILURE(status))
13345 {
13346 /* failure returned by WDI API */
13347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13348 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13350 vos_mem_free(pWdaParams) ;
13351 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13352 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13353 }
13354
13355 return CONVERT_WDI2VOS_STATUS(status) ;
13356}
13357#endif // WLAN_FEATURE_GTK_OFFLOAD
13358
13359/*
Yue Mab9c86f42013-08-14 15:59:08 -070013360 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13361 *
13362 */
13363VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13364 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13365{
13366 WDI_Status wdiStatus;
13367 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13368
13369 addPeriodicTxPtrnParams =
13370 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13371
13372 if (NULL == addPeriodicTxPtrnParams)
13373 {
13374 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13375 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13376 __func__);
13377
13378 return VOS_STATUS_E_NOMEM;
13379 }
13380
13381 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13382 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13383
13384 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13385 addPeriodicTxPtrnParams->pUserData = pWDA;
13386
13387 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13388
13389 if (WDI_STATUS_PENDING == wdiStatus)
13390 {
13391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13392 "Pending received for %s:%d", __func__, __LINE__ );
13393 }
13394 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13395 {
13396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13397 "Failure in %s:%d", __func__, __LINE__ );
13398 }
13399
13400 vos_mem_free(addPeriodicTxPtrnParams);
13401
13402 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13403}
13404
13405/*
13406 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13407 *
13408 */
13409VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13410 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13411{
13412 WDI_Status wdiStatus;
13413 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13414
13415 delPeriodicTxPtrnParams =
13416 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13417
13418 if (NULL == delPeriodicTxPtrnParams)
13419 {
13420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13421 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13422 __func__);
13423
13424 return VOS_STATUS_E_NOMEM;
13425 }
13426
13427 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13428 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13429
13430 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13431 delPeriodicTxPtrnParams->pUserData = pWDA;
13432
13433 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13434
13435 if (WDI_STATUS_PENDING == wdiStatus)
13436 {
13437 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13438 "Pending received for %s:%d", __func__, __LINE__ );
13439 }
13440 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13441 {
13442 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13443 "Failure in %s:%d", __func__, __LINE__ );
13444 }
13445
13446 vos_mem_free(delPeriodicTxPtrnParams);
13447
13448 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13449}
13450
Rajeev79dbe4c2013-10-05 11:03:42 +053013451#ifdef FEATURE_WLAN_BATCH_SCAN
13452/*
13453 * FUNCTION: WDA_ProcessStopBatchScanInd
13454 *
13455 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13456 *
13457 * PARAM:
13458 * pWDA: pointer to WDA context
13459 * pReq: pointer to stop batch scan request
13460 */
13461VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13462 tSirStopBatchScanInd *pReq)
13463{
13464 WDI_Status wdiStatus;
13465 WDI_StopBatchScanIndType wdiReq;
13466
13467 wdiReq.param = pReq->param;
13468
13469 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13470
13471 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13472 {
13473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13474 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13475 }
13476
13477 vos_mem_free(pReq);
13478
13479 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13480}
13481/*==========================================================================
13482 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13483
13484 DESCRIPTION
13485 API to pull batch scan result from FW
13486
13487 PARAMETERS
13488 pWDA: Pointer to WDA context
13489 pGetBatchScanReq: Pointer to get batch scan result indication
13490
13491 RETURN VALUE
13492 NONE
13493
13494===========================================================================*/
13495VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13496 tSirTriggerBatchScanResultInd *pReq)
13497{
13498 WDI_Status wdiStatus;
13499 WDI_TriggerBatchScanResultIndType wdiReq;
13500
13501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13502 "------> %s " ,__func__);
13503
13504 wdiReq.param = pReq->param;
13505
13506 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13507
13508 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13509 {
13510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13511 "Trigger batch scan result ind failed %s:%d",
13512 __func__, wdiStatus);
13513 }
13514
13515 vos_mem_free(pReq);
13516
13517 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13518}
13519
13520/*==========================================================================
13521 FUNCTION WDA_SetBatchScanRespCallback
13522
13523 DESCRIPTION
13524 API to process set batch scan response from FW
13525
13526 PARAMETERS
13527 pRsp: Pointer to set batch scan response
13528 pUserData: Pointer to user data
13529
13530 RETURN VALUE
13531 NONE
13532
13533===========================================================================*/
13534void WDA_SetBatchScanRespCallback
13535(
13536 WDI_SetBatchScanRspType *pRsp,
13537 void* pUserData
13538)
13539{
13540 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13541 tpAniSirGlobal pMac;
13542 void *pCallbackContext;
13543 tWDA_CbContext *pWDA = NULL ;
13544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13545
13546
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13548 "<------ %s " ,__func__);
13549 if (NULL == pWdaParams)
13550 {
13551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13552 "%s: pWdaParams received NULL", __func__);
13553 VOS_ASSERT(0) ;
13554 return ;
13555 }
13556
13557 /*extract WDA context*/
13558 pWDA = pWdaParams->pWdaContext;
13559 if (NULL == pWDA)
13560 {
13561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13562 "%s:pWDA is NULL can't invole HDD callback",
13563 __func__);
13564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13565 vos_mem_free(pWdaParams->wdaMsgParam);
13566 vos_mem_free(pWdaParams);
13567 VOS_ASSERT(0);
13568 return;
13569 }
13570
13571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13572 vos_mem_free(pWdaParams->wdaMsgParam);
13573 vos_mem_free(pWdaParams);
13574
13575 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13576 if (NULL == pMac)
13577 {
13578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13579 "%s:pMac is NULL", __func__);
13580 VOS_ASSERT(0);
13581 return;
13582 }
13583
13584 pHddSetBatchScanRsp =
13585 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13586 if (NULL == pHddSetBatchScanRsp)
13587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13589 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13590 VOS_ASSERT(0);
13591 return;
13592 }
13593
13594 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13595
13596 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13597 /*call hdd callback with set batch scan response data*/
13598 if(pMac->pmc.setBatchScanReqCallback)
13599 {
13600 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13601 }
13602 else
13603 {
13604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13605 "%s:HDD callback is null", __func__);
13606 VOS_ASSERT(0);
13607 }
13608
13609 vos_mem_free(pHddSetBatchScanRsp);
13610 return ;
13611}
13612
13613/*==========================================================================
13614 FUNCTION WDA_ProcessSetBatchScanReq
13615
13616 DESCRIPTION
13617 API to send set batch scan request to WDI
13618
13619 PARAMETERS
13620 pWDA: Pointer to WDA context
13621 pSetBatchScanReq: Pointer to set batch scan req
13622
13623 RETURN VALUE
13624 NONE
13625
13626===========================================================================*/
13627VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13628 tSirSetBatchScanReq *pSetBatchScanReq)
13629{
13630 WDI_Status status;
13631 tWDA_ReqParams *pWdaParams ;
13632 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13633
13634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13635 "------> %s " ,__func__);
13636
13637 pWdiSetBatchScanReq =
13638 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13639 if (NULL == pWdiSetBatchScanReq)
13640 {
13641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13642 "%s: VOS MEM Alloc Failure", __func__);
13643 vos_mem_free(pSetBatchScanReq);
13644 VOS_ASSERT(0);
13645 return VOS_STATUS_E_NOMEM;
13646 }
13647
13648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13649 if (NULL == pWdaParams)
13650 {
13651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13652 "%s: VOS MEM Alloc Failure", __func__);
13653 VOS_ASSERT(0);
13654 vos_mem_free(pSetBatchScanReq);
13655 vos_mem_free(pWdiSetBatchScanReq);
13656 return VOS_STATUS_E_NOMEM;
13657 }
13658
13659 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13660 pWdiSetBatchScanReq->numberOfScansToBatch =
13661 pSetBatchScanReq->numberOfScansToBatch;
13662 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13663 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13664 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13665
13666 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13667 pWdaParams->pWdaContext = pWDA;
13668 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13669
13670 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13671 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13672 if (IS_WDI_STATUS_FAILURE(status))
13673 {
13674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13675 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13677 vos_mem_free(pWdaParams->wdaMsgParam);
13678 vos_mem_free(pWdaParams);
13679 }
13680 return CONVERT_WDI2VOS_STATUS(status);
13681}
13682
13683#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013684/*
13685 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13686 *
13687 * DESCRIPTION: This function sends start/update OBSS scan
13688 * inidcation message to WDI
13689 *
13690 * PARAM:
13691 * pWDA: pointer to WDA context
13692 * pReq: pointer to start OBSS scan request
13693 */
13694VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13695 tSirHT40OBSSScanInd *pReq)
13696{
13697 WDI_Status status;
13698 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13699 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013700
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13702 "------> %s " ,__func__);
13703 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13704 wdiOBSSScanParams.pUserData = pWDA;
13705
13706 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13707 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13708 pWdiOBSSScanInd->scanType = pReq->scanType;
13709 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13710 pReq->OBSSScanActiveDwellTime;
13711 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13712 pReq->OBSSScanPassiveDwellTime;
13713 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13714 pReq->BSSChannelWidthTriggerScanInterval;
13715 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13716 pReq->BSSWidthChannelTransitionDelayFactor;
13717 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13718 pReq->OBSSScanActiveTotalPerChannel;
13719 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13720 pReq->OBSSScanPassiveTotalPerChannel;
13721 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13722 pReq->OBSSScanActivityThreshold;
13723 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13724 vos_mem_copy(pWdiOBSSScanInd->channels,
13725 pReq->channels,
13726 pReq->channelCount);
13727 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13728 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13729 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13730 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13731 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13732
13733 vos_mem_copy(pWdiOBSSScanInd->ieField,
13734 pReq->ieField,
13735 pReq->ieFieldLen);
13736
13737 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13738 if (WDI_STATUS_PENDING == status)
13739 {
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13741 "Pending received for %s:%d ",__func__,__LINE__ );
13742 }
13743 else if (WDI_STATUS_SUCCESS_SYNC != status)
13744 {
13745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13746 "Failure in %s:%d ",__func__,__LINE__ );
13747 }
13748 return CONVERT_WDI2VOS_STATUS(status) ;
13749}
13750/*
13751 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13752 *
13753 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13754 *
13755 * PARAM:
13756 * pWDA: pointer to WDA context
13757 * pReq: pointer to stop batch scan request
13758 */
13759VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13760 tANI_U8 *bssIdx)
13761{
13762 WDI_Status status;
13763
13764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13765 "------> %s " ,__func__);
13766
13767 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13768 if (WDI_STATUS_PENDING == status)
13769 {
13770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13771 "Pending received for %s:%d ",__func__,__LINE__ );
13772 }
13773 else if (WDI_STATUS_SUCCESS_SYNC != status)
13774 {
13775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13776 "Failure in %s:%d ",__func__,__LINE__ );
13777 }
13778 return CONVERT_WDI2VOS_STATUS(status) ;
13779}
Yue Mab9c86f42013-08-14 15:59:08 -070013780/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013781 * FUNCTION: WDA_ProcessRateUpdateInd
13782 *
13783 */
13784VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13785 tSirRateUpdateInd *pRateUpdateParams)
13786{
13787 WDI_Status wdiStatus;
13788 WDI_RateUpdateIndParams rateUpdateParams;
13789
13790 vos_mem_copy(rateUpdateParams.bssid,
13791 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13792
13793 rateUpdateParams.ucastDataRateTxFlag =
13794 pRateUpdateParams->ucastDataRateTxFlag;
13795 rateUpdateParams.reliableMcastDataRateTxFlag =
13796 pRateUpdateParams->reliableMcastDataRateTxFlag;
13797 rateUpdateParams.mcastDataRate24GHzTxFlag =
13798 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13799 rateUpdateParams.mcastDataRate5GHzTxFlag =
13800 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13801
13802 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13803 rateUpdateParams.reliableMcastDataRate =
13804 pRateUpdateParams->reliableMcastDataRate;
13805 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13806 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13807
13808 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13809 rateUpdateParams.pUserData = pWDA;
13810
13811 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13812
13813 if (WDI_STATUS_PENDING == wdiStatus)
13814 {
13815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13816 "Pending received for %s:%d", __func__, __LINE__ );
13817 }
13818 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13819 {
13820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13821 "Failure in %s:%d", __func__, __LINE__ );
13822 }
13823
13824 vos_mem_free(pRateUpdateParams);
13825
13826 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13827}
13828
13829/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 * -------------------------------------------------------------------------
13831 * DATA interface with WDI for Mgmt Frames
13832 * -------------------------------------------------------------------------
13833 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013834/*
13835 * FUNCTION: WDA_TxComplete
13836 * Callback function for the WDA_TxPacket
13837 */
13838VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13839 VOS_STATUS status )
13840{
13841
13842 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13843 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013844 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013845
Mihir Shete63341222015-03-24 15:39:18 +053013846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13847
Jeff Johnson295189b2012-06-20 16:38:30 -070013848 if(NULL == wdaContext)
13849 {
13850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13851 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013852 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013854 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 return VOS_STATUS_E_FAILURE;
13856 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013857
13858 /*Check if frame was timed out or not*/
13859 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13860 (v_PVOID_t)&uUserData);
13861
13862 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13863 {
13864 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13866 "%s: MGMT Frame Tx timed out",
13867 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013868 vos_pkt_return_packet(pData);
13869 return VOS_STATUS_SUCCESS;
13870 }
13871
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13873 if( NULL!=wdaContext->pTxCbFunc)
13874 {
13875 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013876 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 {
13878 wdaContext->pTxCbFunc(pMac, pData);
13879 }
13880 else
13881 {
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013883 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013884 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013885 //Return from here since we reaching here because the packet already timeout
13886 return status;
13887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013888 }
13889
13890 /*
13891 * Trigger the event to bring the HAL TL Tx complete function to come
13892 * out of wait
13893 * Let the coe above to complete the packet first. When this event is set,
13894 * the thread waiting for the event may run and set Vospacket_freed causing the original
13895 * packet not being freed.
13896 */
13897 status = vos_event_set(&wdaContext->txFrameEvent);
13898 if(!VOS_IS_STATUS_SUCCESS(status))
13899 {
13900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013901 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013903 return status;
13904}
Jeff Johnson295189b2012-06-20 16:38:30 -070013905/*
13906 * FUNCTION: WDA_TxPacket
13907 * Forward TX management frame to WDI
13908 */
13909VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13910 void *pFrmBuf,
13911 tANI_U16 frmLen,
13912 eFrameType frmType,
13913 eFrameTxDir txDir,
13914 tANI_U8 tid,
13915 pWDATxRxCompFunc pCompFunc,
13916 void *pData,
13917 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013918 tANI_U32 txFlag,
13919 tANI_U32 txBdToken
13920 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013921{
13922 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13923 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13924 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13925 tANI_U8 eventIdx = 0;
13926 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13927 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013928 tpSirTxBdStatus txBdStatus = {0};
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013929
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 if((NULL == pWDA)||(NULL == pFrmBuf))
13931 {
13932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013933 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013934 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 VOS_ASSERT(0);
13936 return VOS_STATUS_E_FAILURE;
13937 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013938
Jeff Johnson295189b2012-06-20 16:38:30 -070013939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013940 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13941 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013942 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13943 if(NULL == pMac)
13944 {
13945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013946 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 VOS_ASSERT(0);
13948 return VOS_STATUS_E_FAILURE;
13949 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013950
Jeff Johnson295189b2012-06-20 16:38:30 -070013951 /* store the call back function in WDA context */
13952 pWDA->pTxCbFunc = pCompFunc;
13953 /* store the call back for the function of ackTxComplete */
13954 if( pAckTxComp )
13955 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013956 if( NULL != pWDA->pAckTxCbFunc )
13957 {
13958 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013960 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013961 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013962 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013963
Jeff Johnsone7245742012-09-05 17:12:55 -070013964 if( VOS_STATUS_SUCCESS !=
13965 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13966 {
13967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13968 "Tx Complete timeout Timer Stop Failed ");
13969 }
13970 else
13971 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013973 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070013974 }
13975 }
13976
13977 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
13978 pWDA->pAckTxCbFunc = pAckTxComp;
13979 if( VOS_STATUS_SUCCESS !=
13980 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
13981 {
13982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13983 "Tx Complete Timer Start Failed ");
13984 pWDA->pAckTxCbFunc = NULL;
13985 return eHAL_STATUS_FAILURE;
13986 }
13987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013988 /* Reset the event to be not signalled */
13989 status = vos_event_reset(&pWDA->txFrameEvent);
13990 if(!VOS_IS_STATUS_SUCCESS(status))
13991 {
13992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013993 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
13995 if( pAckTxComp )
13996 {
13997 pWDA->pAckTxCbFunc = NULL;
13998 if( VOS_STATUS_SUCCESS !=
13999 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14000 {
14001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14002 "Tx Complete timeout Timer Stop Failed ");
14003 }
14004 }
14005 return VOS_STATUS_E_FAILURE;
14006 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014007
14008 /* If Peer Sta mask is set don't overwrite to self sta */
14009 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014011 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014013 else
14014 {
Ganesh K08bce952012-12-13 15:04:41 -080014015 /* Get system role, use the self station if in unknown role or STA role */
14016 systemRole = wdaGetGlobalSystemRole(pMac);
14017 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14018 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014019#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014020 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014021#endif
Ganesh K08bce952012-12-13 15:04:41 -080014022 ))
14023 {
14024 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14025 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014027
Jeff Johnsone7245742012-09-05 17:12:55 -070014028 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14029 disassoc frame reaches the HW, HAL has already deleted the peer station */
14030 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014031 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014032 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014033 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014034 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 /*Send Probe request frames on self sta idx*/
14036 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014038 /* Since we donot want probe responses to be retried, send probe responses
14039 through the NO_ACK queues */
14040 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14041 {
14042 //probe response is sent out using self station and no retries options.
14043 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14044 }
14045 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14046 {
14047 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14048 }
14049 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014050#ifdef FEATURE_WLAN_TDLS
14051 /* TDLS Management frames are sent using Peer Sta mask */
14052 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14053 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14054 {
14055 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14056
14057 }
14058#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014059 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014060
14061 /*Set frame tag to 0
14062 We will use the WDA user data in order to tag a frame as expired*/
14063 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14064 (v_PVOID_t)0);
14065
14066
14067 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014068 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14069 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014070 {
14071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014072 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014073 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014074 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 -070014075 if( pAckTxComp )
14076 {
14077 pWDA->pAckTxCbFunc = NULL;
14078 if( VOS_STATUS_SUCCESS !=
14079 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14080 {
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14082 "Tx Complete timeout Timer Stop Failed ");
14083 }
14084 }
14085 return VOS_STATUS_E_FAILURE;
14086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 /*
14088 * Wait for the event to be set by the TL, to get the response of TX
14089 * complete, this event should be set by the Callback function called by TL
14090 */
14091 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14092 &eventIdx);
14093 if(!VOS_IS_STATUS_SUCCESS(status))
14094 {
14095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14096 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014097 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014098
14099 /*Tag Frame as timed out for later deletion*/
14100 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14101 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014102 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14103 after the packet gets completed(packet freed once)*/
14104
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014105 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014106 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014107
Jeff Johnson295189b2012-06-20 16:38:30 -070014108 /* check whether the packet was freed already,so need not free again when
14109 * TL calls the WDA_Txcomplete routine
14110 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014111 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14112 /*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 -070014113 {
14114 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014115 } */
Abhishek Singh837adf22015-10-01 17:37:37 +053014116 if (vos_isFatalEventEnabled())
14117 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14118 WLAN_LOG_INDICATOR_HOST_DRIVER,
14119 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14120 FALSE, TRUE);
14121 else
Abhishek Singh84fc7512015-10-06 14:27:25 +053014122 vos_wlanRestart();
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014123
Jeff Johnson295189b2012-06-20 16:38:30 -070014124 if( pAckTxComp )
14125 {
14126 pWDA->pAckTxCbFunc = NULL;
14127 if( VOS_STATUS_SUCCESS !=
14128 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14129 {
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14131 "Tx Complete timeout Timer Stop Failed ");
14132 }
14133 }
14134 status = VOS_STATUS_E_FAILURE;
14135 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014136#ifdef WLAN_DUMP_MGMTFRAMES
14137 if (VOS_IS_STATUS_SUCCESS(status))
14138 {
14139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14140 "%s() TX packet : SubType %d", __func__,pFc->subType);
14141 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14142 pData, frmLen);
14143 }
14144#endif
14145
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014146 if (VOS_IS_STATUS_SUCCESS(status))
14147 {
14148 if (pMac->fEnableDebugLog & 0x1)
14149 {
14150 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14151 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14152 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14153 {
14154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14155 pFc->type, pFc->subType);
14156 }
14157 }
14158 }
14159
14160
Jeff Johnson295189b2012-06-20 16:38:30 -070014161 return status;
14162}
Jeff Johnson295189b2012-06-20 16:38:30 -070014163/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014164 * FUNCTION: WDA_ProcessDHCPStartInd
14165 * Forward DHCP Start to WDI
14166 */
14167static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14168 tAniDHCPInd *dhcpStartInd)
14169{
14170 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014171 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014172
c_hpothu0b0cab72014-02-13 21:52:40 +053014173 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14174 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014175 sizeof(tSirMacAddr));
14176
c_hpothu0b0cab72014-02-13 21:52:40 +053014177 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014178
c_hpothu0b0cab72014-02-13 21:52:40 +053014179 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014180 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14182 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014183 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014184 else if (WDI_STATUS_SUCCESS_SYNC != status)
14185 {
14186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14187 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14188 }
14189
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014190 vos_mem_free(dhcpStartInd);
14191 return CONVERT_WDI2VOS_STATUS(status) ;
14192}
14193
14194 /*
14195 * FUNCTION: WDA_ProcessDHCPStopInd
14196 * Forward DHCP Stop to WDI
14197 */
14198 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14199 tAniDHCPInd *dhcpStopInd)
14200 {
14201 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014202 WDI_DHCPInd wdiDHCPInd;
14203
14204 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14205 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14206
14207 status = WDI_dhcpStopInd(&wdiDHCPInd);
14208
14209 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014210 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14212 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014213 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014214 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014215 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14217 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014218 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014219
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014220 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014221
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014222 return CONVERT_WDI2VOS_STATUS(status) ;
14223 }
14224
14225/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014226 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14227 *
14228 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14229 *
14230 * PARAM:
14231 * pWDA: pointer to WDA context
14232 * pReq: pointer to stop batch scan request
14233 */
14234VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14235 tpSpoofMacAddrReqParams pReq)
14236{
14237 WDI_Status wdiStatus;
14238 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14239 tWDA_ReqParams *pWdaParams;
14240
14241 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14242 sizeof(WDI_SpoofMacAddrInfoType));
14243 if(NULL == WDI_SpoofMacAddrInfoParams) {
14244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14245 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14246 VOS_ASSERT(0);
14247 return VOS_STATUS_E_NOMEM;
14248 }
14249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14250 if(NULL == pWdaParams) {
14251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14252 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014253 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014254 VOS_ASSERT(0);
14255 return VOS_STATUS_E_NOMEM;
14256 }
14257
14258 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14259 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14260
14261 pWdaParams->pWdaContext = pWDA;
14262 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014263 pWdaParams->wdaMsgParam = (void *)pReq;
14264
14265 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14266 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14267
Siddharth Bhal171788a2014-09-29 21:02:40 +053014268 /* store Params pass it to WDI */
14269 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14270
14271 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014272 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14273 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014274
14275 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14276 {
14277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14278 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14280 vos_mem_free(pWdaParams->wdaMsgParam);
14281 vos_mem_free(pWdaParams);
14282 }
14283
14284 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14285}
14286
c_manjeecfd1efb2015-09-25 19:32:34 +053014287
14288/*
14289 * FUNCTION: WDA_FwrMemDumpRespCallback
14290 * recieves Mgmt Logging init response from FW
14291 */
14292 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14293 void* pUserData)
14294{
14295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14296 tAniFwrDumpReq *pFwrMemDumpReq;
14297 tAniFwrDumpRsp *pFwrMemDumpRsp;
14298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14299 "<------ %s " ,__func__);
14300
14301 if(NULL == pWdaParams)
14302 {
14303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14304 "%s: pWdaParams received NULL", __func__);
14305 VOS_ASSERT(0);
14306 return ;
14307 }
14308
14309 if(NULL == pWdaParams->wdaMsgParam)
14310 {
14311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14312 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14313 VOS_ASSERT(0);
14314 vos_mem_free(pWdaParams);
14315 return ;
14316 }
14317
14318 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14319 if(pFwrMemDumpRsp == NULL)
14320 {
14321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14322 "%s: pFwrMemDumpRsp is NULL", __func__);
14323 VOS_ASSERT(0);
14324 vos_mem_free(pWdaParams);
14325 return ;
14326 }
14327
14328 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14329 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14330
14331 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14332 {
14333 pFwrMemDumpReq->fwMemDumpReqCallback(
14334 pFwrMemDumpReq->fwMemDumpReqContext,
14335 pFwrMemDumpRsp);
14336 }
14337 else
14338 {
14339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14340 "%s: FwrMemDump callback is NULL", __func__);
14341 }
14342
14343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14344 vos_mem_free(pWdaParams->wdaMsgParam);
14345 vos_mem_free(pWdaParams);
14346 vos_mem_free(pFwrMemDumpRsp);
14347
14348 return ;
14349}
14350
14351VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14352 tAniFwrDumpReq* pFwrMemDumpReq)
14353{
14354 VOS_STATUS status = VOS_STATUS_SUCCESS;
14355 WDI_Status wstatus;
14356 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14357 tWDA_ReqParams *pWdaParams ;
14358
14359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14360 "------> %s " ,__func__);
14361 /* Sanity Check*/
14362 if(NULL == pFwrMemDumpReq)
14363 {
14364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14365 "%s: pFwrMemDumpReq received NULL", __func__);
14366 VOS_ASSERT(0) ;
14367 return VOS_STATUS_E_FAULT;
14368 }
14369
14370 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14371 if(NULL == pWdiFwrMemDumpReq)
14372 {
14373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14374 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14375 VOS_ASSERT(0);
14376 return VOS_STATUS_E_NOMEM;
14377 }
14378
14379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14380 if(NULL == pWdaParams)
14381 {
14382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14383 "%s: pWdaParams Alloc Failure", __func__);
14384 VOS_ASSERT(0);
14385 vos_mem_free(pWdiFwrMemDumpReq);
14386 return VOS_STATUS_E_NOMEM;
14387 }
14388
14389 /* Store Params pass it to WDI */
14390 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14391 pWdaParams->pWdaContext = pWDA;
14392 /* Store param pointer as passed in by caller */
14393 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14394
14395 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14396 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14397 pWdaParams);
14398
14399 if(IS_WDI_STATUS_FAILURE(wstatus))
14400 {
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14402 FL("Fwr Mem Dump Req failed, free all the memory"));
14403 status = CONVERT_WDI2VOS_STATUS(wstatus);
14404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14405 vos_mem_free(pWdaParams->wdaMsgParam);
14406 vos_mem_free(pWdaParams);
14407 pWdaParams->wdaWdiApiMsgParam = NULL;
14408 pWdaParams->wdaMsgParam = NULL;
14409 }
14410
14411 return status;
14412
14413}
14414
14415
14416
Siddharth Bhal171788a2014-09-29 21:02:40 +053014417/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 * FUNCTION: WDA_McProcessMsg
14419 * Trigger DAL-AL to start CFG download
14420 */
14421VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14422{
14423 VOS_STATUS status = VOS_STATUS_SUCCESS;
14424 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014425 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014426 {
14427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014428 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014429 VOS_ASSERT(0);
14430 return VOS_STATUS_E_FAILURE;
14431 }
14432
14433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014434 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070014435
14436 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
14437 if(NULL == pWDA )
14438 {
14439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014440 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070014442 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014443 return VOS_STATUS_E_FAILURE;
14444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014445 /* Process all the WDA messages.. */
14446 switch( pMsg->type )
14447 {
14448 case WNI_CFG_DNLD_REQ:
14449 {
14450 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 /* call WDA complete event if config download success */
14452 if( VOS_IS_STATUS_SUCCESS(status) )
14453 {
14454 vos_WDAComplete_cback(pVosContext);
14455 }
14456 else
14457 {
14458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14459 "WDA Config Download failure" );
14460 }
14461 break ;
14462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014463 /*
14464 * Init SCAN request from PE, convert it into DAL format
14465 * and send it to DAL
14466 */
14467 case WDA_INIT_SCAN_REQ:
14468 {
14469 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
14470 break ;
14471 }
14472 /* start SCAN request from PE */
14473 case WDA_START_SCAN_REQ:
14474 {
14475 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
14476 break ;
14477 }
14478 /* end SCAN request from PE */
14479 case WDA_END_SCAN_REQ:
14480 {
14481 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
14482 break ;
14483 }
14484 /* end SCAN request from PE */
14485 case WDA_FINISH_SCAN_REQ:
14486 {
14487 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
14488 break ;
14489 }
14490 /* join request from PE */
14491 case WDA_CHNL_SWITCH_REQ:
14492 {
14493 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
14494 {
14495 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
14496 }
14497 else
14498 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080014499 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
14500 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
14501 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
14502 {
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14504 "call ProcessChannelSwitchReq_V1" );
14505 WDA_ProcessChannelSwitchReq_V1(pWDA,
14506 (tSwitchChannelParams*)pMsg->bodyptr) ;
14507 }
14508 else
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14511 "call ProcessChannelSwitchReq" );
14512 WDA_ProcessChannelSwitchReq(pWDA,
14513 (tSwitchChannelParams*)pMsg->bodyptr) ;
14514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 }
14516 break ;
14517 }
14518 /* ADD BSS request from PE */
14519 case WDA_ADD_BSS_REQ:
14520 {
14521 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
14522 break ;
14523 }
14524 case WDA_ADD_STA_REQ:
14525 {
14526 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
14527 break ;
14528 }
14529 case WDA_DELETE_BSS_REQ:
14530 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
14532 break ;
14533 }
14534 case WDA_DELETE_STA_REQ:
14535 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014536 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
14537 break ;
14538 }
14539 case WDA_CONFIG_PARAM_UPDATE_REQ:
14540 {
14541 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
14542 break ;
14543 }
14544 case WDA_SET_BSSKEY_REQ:
14545 {
14546 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
14547 break ;
14548 }
14549 case WDA_SET_STAKEY_REQ:
14550 {
14551 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14552 break ;
14553 }
14554 case WDA_SET_STA_BCASTKEY_REQ:
14555 {
14556 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14557 break ;
14558 }
14559 case WDA_REMOVE_BSSKEY_REQ:
14560 {
14561 WDA_ProcessRemoveBssKeyReq(pWDA,
14562 (tRemoveBssKeyParams *)pMsg->bodyptr);
14563 break ;
14564 }
14565 case WDA_REMOVE_STAKEY_REQ:
14566 {
14567 WDA_ProcessRemoveStaKeyReq(pWDA,
14568 (tRemoveStaKeyParams *)pMsg->bodyptr);
14569 break ;
14570 }
14571 case WDA_REMOVE_STA_BCASTKEY_REQ:
14572 {
14573 /* TODO: currently UMAC is not sending this request, Add the code for
14574 handling this request when UMAC supports */
14575 break;
14576 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014577#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 case WDA_TSM_STATS_REQ:
14579 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070014580 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014581 break;
14582 }
14583#endif
14584 case WDA_UPDATE_EDCA_PROFILE_IND:
14585 {
14586 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
14587 break;
14588 }
14589 case WDA_ADD_TS_REQ:
14590 {
14591 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
14592 break;
14593 }
14594 case WDA_DEL_TS_REQ:
14595 {
14596 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
14597 break;
14598 }
14599 case WDA_ADDBA_REQ:
14600 {
14601 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
14602 break;
14603 }
14604 case WDA_DELBA_IND:
14605 {
14606 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
14607 break;
14608 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080014609 case WDA_UPDATE_CHAN_LIST_REQ:
14610 {
14611 WDA_ProcessUpdateChannelList(pWDA,
14612 (tSirUpdateChanList *)pMsg->bodyptr);
14613 break;
14614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014615 case WDA_SET_LINK_STATE:
14616 {
14617 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
14618 break;
14619 }
14620 case WDA_GET_STATISTICS_REQ:
14621 {
14622 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
14623 break;
14624 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014625#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080014626 case WDA_GET_ROAM_RSSI_REQ:
14627 {
14628 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
14629 break;
14630 }
14631#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014632 case WDA_PWR_SAVE_CFG:
14633 {
14634 if(pWDA->wdaState == WDA_READY_STATE)
14635 {
14636 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
14637 }
14638 else
14639 {
14640 if(NULL != pMsg->bodyptr)
14641 {
14642 vos_mem_free(pMsg->bodyptr);
14643 }
14644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14645 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
14646 }
14647 break;
14648 }
14649 case WDA_ENTER_IMPS_REQ:
14650 {
14651 if(pWDA->wdaState == WDA_READY_STATE)
14652 {
14653 WDA_ProcessEnterImpsReq(pWDA);
14654 }
14655 else
14656 {
14657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14658 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14659 }
14660 break;
14661 }
14662 case WDA_EXIT_IMPS_REQ:
14663 {
14664 if(pWDA->wdaState == WDA_READY_STATE)
14665 {
14666 WDA_ProcessExitImpsReq(pWDA);
14667 }
14668 else
14669 {
14670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14671 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14672 }
14673 break;
14674 }
14675 case WDA_ENTER_BMPS_REQ:
14676 {
14677 if(pWDA->wdaState == WDA_READY_STATE)
14678 {
14679 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
14680 }
14681 else
14682 {
14683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14684 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14685 }
14686 break;
14687 }
14688 case WDA_EXIT_BMPS_REQ:
14689 {
14690 if(pWDA->wdaState == WDA_READY_STATE)
14691 {
14692 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
14693 }
14694 else
14695 {
14696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14697 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14698 }
14699 break;
14700 }
14701 case WDA_ENTER_UAPSD_REQ:
14702 {
14703 if(pWDA->wdaState == WDA_READY_STATE)
14704 {
14705 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
14706 }
14707 else
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14710 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14711 }
14712 break;
14713 }
14714 case WDA_EXIT_UAPSD_REQ:
14715 {
14716 if(pWDA->wdaState == WDA_READY_STATE)
14717 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014718 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 }
14720 else
14721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14723 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14724 }
14725 break;
14726 }
14727 case WDA_UPDATE_UAPSD_IND:
14728 {
14729 if(pWDA->wdaState == WDA_READY_STATE)
14730 {
14731 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14732 }
14733 else
14734 {
14735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14736 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14737 }
14738 break;
14739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 case WDA_REGISTER_PE_CALLBACK :
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14743 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14744 /*TODO: store the PE callback */
14745 /* Do Nothing? MSG Body should be freed at here */
14746 if(NULL != pMsg->bodyptr)
14747 {
14748 vos_mem_free(pMsg->bodyptr);
14749 }
14750 break;
14751 }
14752 case WDA_SYS_READY_IND :
14753 {
14754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14755 "Handling msg type WDA_SYS_READY_IND " );
14756 pWDA->wdaState = WDA_READY_STATE;
14757 if(NULL != pMsg->bodyptr)
14758 {
14759 vos_mem_free(pMsg->bodyptr);
14760 }
14761 break;
14762 }
14763 case WDA_BEACON_FILTER_IND :
14764 {
14765 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14766 break;
14767 }
14768 case WDA_BTC_SET_CFG:
14769 {
14770 /*TODO: handle this while dealing with BTC */
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14772 "Handling msg type WDA_BTC_SET_CFG " );
14773 /* Do Nothing? MSG Body should be freed at here */
14774 if(NULL != pMsg->bodyptr)
14775 {
14776 vos_mem_free(pMsg->bodyptr);
14777 }
14778 break;
14779 }
14780 case WDA_SIGNAL_BT_EVENT:
14781 {
14782 /*TODO: handle this while dealing with BTC */
14783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14784 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14785 /* Do Nothing? MSG Body should be freed at here */
14786 if(NULL != pMsg->bodyptr)
14787 {
14788 vos_mem_free(pMsg->bodyptr);
14789 }
14790 break;
14791 }
14792 case WDA_CFG_RXP_FILTER_REQ:
14793 {
14794 WDA_ProcessConfigureRxpFilterReq(pWDA,
14795 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14796 break;
14797 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014798 case WDA_MGMT_LOGGING_INIT_REQ:
14799 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014800 WDA_ProcessFWLoggingInitReq(pWDA,
14801 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014802 break;
14803 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014804 case WDA_GET_FRAME_LOG_REQ:
14805 {
14806 WDA_ProcessGetFrameLogReq(pWDA,
14807 (tAniGetFrameLogReq *)pMsg->bodyptr);
14808 break;
14809 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053014810 case WDA_START_RSSI_MONITOR_REQ:
14811 {
14812 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14813 break;
14814 }
14815 case WDA_STOP_RSSI_MONITOR_REQ:
14816 {
14817 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14818 break;
14819 }
Karthick Sa35b0692015-08-21 15:57:05 +053014820 case WDA_SEND_LOG_DONE_IND:
14821 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014822 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014823 break;
14824 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014825 case WDA_FATAL_EVENT_LOGS_REQ:
14826 {
14827 WDA_ProcessFatalEventLogsReq(pWDA,
14828 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14829 break;
14830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014831 case WDA_SET_HOST_OFFLOAD:
14832 {
14833 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14834 break;
14835 }
14836 case WDA_SET_KEEP_ALIVE:
14837 {
14838 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14839 break;
14840 }
14841#ifdef WLAN_NS_OFFLOAD
14842 case WDA_SET_NS_OFFLOAD:
14843 {
14844 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14845 break;
14846 }
14847#endif //WLAN_NS_OFFLOAD
14848 case WDA_ADD_STA_SELF_REQ:
14849 {
14850 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14851 break;
14852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 case WDA_DEL_STA_SELF_REQ:
14854 {
14855 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14856 break;
14857 }
14858 case WDA_WOWL_ADD_BCAST_PTRN:
14859 {
14860 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14861 break;
14862 }
14863 case WDA_WOWL_DEL_BCAST_PTRN:
14864 {
14865 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14866 break;
14867 }
14868 case WDA_WOWL_ENTER_REQ:
14869 {
14870 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14871 break;
14872 }
14873 case WDA_WOWL_EXIT_REQ:
14874 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014875 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014876 break;
14877 }
14878 case WDA_TL_FLUSH_AC_REQ:
14879 {
14880 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14881 break;
14882 }
14883 case WDA_SIGNAL_BTAMP_EVENT:
14884 {
14885 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14886 break;
14887 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014888 case WDA_FW_STATS_GET_REQ:
14889 {
14890 WDA_ProcessFWStatsGetReq(pWDA,
14891 (tSirFWStatsGetReq *)pMsg->bodyptr);
14892 break;
14893 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014894#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14895 case WDA_LINK_LAYER_STATS_SET_REQ:
14896 {
14897 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14898 break;
14899 }
14900 case WDA_LINK_LAYER_STATS_GET_REQ:
14901 {
14902 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14903 break;
14904 }
14905 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14906 {
14907 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14908 break;
14909 }
14910#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014911#ifdef WLAN_FEATURE_EXTSCAN
14912 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14913 {
14914 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14915 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14916 break;
14917 }
14918 case WDA_EXTSCAN_START_REQ:
14919 {
14920 WDA_ProcessEXTScanStartReq(pWDA,
14921 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14922 break;
14923 }
14924 case WDA_EXTSCAN_STOP_REQ:
14925 {
14926 WDA_ProcessEXTScanStopReq(pWDA,
14927 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14928 break;
14929 }
14930 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14931 {
14932 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
14933 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
14934 break;
14935 }
14936 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
14937 {
14938 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
14939 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
14940 break;
14941 }
14942 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
14943 {
14944 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
14945 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
14946 break;
14947 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053014948 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
14949 {
14950 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
14951 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
14952 break;
14953 }
14954 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
14955 {
14956 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
14957 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
14958 break;
14959 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053014960 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
14961 {
14962 WDA_ProcessHighPriorityDataInfoInd(pWDA,
14963 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
14964 break;
14965 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014966#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070014967#ifdef WDA_UT
14968 case WDA_WDI_EVENT_MSG:
14969 {
14970 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
14971 break ;
14972 }
14973#endif
14974 case WDA_UPDATE_BEACON_IND:
14975 {
14976 WDA_ProcessUpdateBeaconParams(pWDA,
14977 (tUpdateBeaconParams *)pMsg->bodyptr);
14978 break;
14979 }
14980 case WDA_SEND_BEACON_REQ:
14981 {
14982 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
14983 break;
14984 }
14985 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
14986 {
14987 WDA_ProcessUpdateProbeRspTemplate(pWDA,
14988 (tSendProbeRespParams *)pMsg->bodyptr);
14989 break;
14990 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014991#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070014992 case WDA_SET_MAX_TX_POWER_REQ:
14993 {
14994 WDA_ProcessSetMaxTxPowerReq(pWDA,
14995 (tMaxTxPowerParams *)pMsg->bodyptr);
14996 break;
14997 }
14998#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070014999 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15000 {
15001 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15002 pMsg->bodyptr);
15003 break;
15004 }
schang86c22c42013-03-13 18:41:24 -070015005 case WDA_SET_TX_POWER_REQ:
15006 {
15007 WDA_ProcessSetTxPowerReq(pWDA,
15008 (tSirSetTxPowerReq *)pMsg->bodyptr);
15009 break;
15010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 case WDA_SET_P2P_GO_NOA_REQ:
15012 {
15013 WDA_ProcessSetP2PGONOAReq(pWDA,
15014 (tP2pPsParams *)pMsg->bodyptr);
15015 break;
15016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015017 /* timer related messages */
15018 case WDA_TIMER_BA_ACTIVITY_REQ:
15019 {
15020 WDA_BaCheckActivity(pWDA) ;
15021 break ;
15022 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015023
15024 /* timer related messages */
15025 case WDA_TIMER_TRAFFIC_STATS_IND:
15026 {
15027 WDA_TimerTrafficStatsInd(pWDA);
15028 break;
15029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015030#ifdef WLAN_FEATURE_VOWIFI_11R
15031 case WDA_AGGR_QOS_REQ:
15032 {
15033 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15034 break;
15035 }
15036#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015037 case WDA_FTM_CMD_REQ:
15038 {
15039 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15040 break ;
15041 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015042#ifdef FEATURE_OEM_DATA_SUPPORT
15043 case WDA_START_OEM_DATA_REQ:
15044 {
15045 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15046 break;
15047 }
15048#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 /* Tx Complete Time out Indication */
15050 case WDA_TX_COMPLETE_TIMEOUT_IND:
15051 {
15052 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15053 break;
15054 }
15055 case WDA_WLAN_SUSPEND_IND:
15056 {
15057 WDA_ProcessWlanSuspendInd(pWDA,
15058 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15059 break;
15060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015061 case WDA_WLAN_RESUME_REQ:
15062 {
15063 WDA_ProcessWlanResumeReq(pWDA,
15064 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15065 break;
15066 }
15067
15068 case WDA_UPDATE_CF_IND:
15069 {
15070 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15071 pMsg->bodyptr = NULL;
15072 break;
15073 }
15074#ifdef FEATURE_WLAN_SCAN_PNO
15075 case WDA_SET_PNO_REQ:
15076 {
15077 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15078 break;
15079 }
15080 case WDA_UPDATE_SCAN_PARAMS_REQ:
15081 {
15082 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15083 break;
15084 }
15085 case WDA_SET_RSSI_FILTER_REQ:
15086 {
15087 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15088 break;
15089 }
15090#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015091#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015092 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015093 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015094 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015095 break;
15096 }
15097#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015098 case WDA_SET_TX_PER_TRACKING_REQ:
15099 {
15100 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15101 break;
15102 }
15103
15104#ifdef WLAN_FEATURE_PACKET_FILTERING
15105 case WDA_8023_MULTICAST_LIST_REQ:
15106 {
15107 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15108 break;
15109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015110 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15111 {
15112 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15113 break;
15114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015115 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15116 {
15117 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15118 break;
15119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015120 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15121 {
15122 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15123 break;
15124 }
15125#endif // WLAN_FEATURE_PACKET_FILTERING
15126
15127
15128 case WDA_TRANSMISSION_CONTROL_IND:
15129 {
15130 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15131 break;
15132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015133 case WDA_SET_POWER_PARAMS_REQ:
15134 {
15135 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15136 break;
15137 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015138 case WDA_FW_MEM_DUMP_REQ:
15139 {
15140 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15141 break;
15142 }
15143
Jeff Johnson295189b2012-06-20 16:38:30 -070015144#ifdef WLAN_FEATURE_GTK_OFFLOAD
15145 case WDA_GTK_OFFLOAD_REQ:
15146 {
15147 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15148 break;
15149 }
15150
15151 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15152 {
15153 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15154 break;
15155 }
15156#endif //WLAN_FEATURE_GTK_OFFLOAD
15157
15158 case WDA_SET_TM_LEVEL_REQ:
15159 {
15160 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15161 break;
15162 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015163
Mohit Khanna4a70d262012-09-11 16:30:12 -070015164 case WDA_UPDATE_OP_MODE:
15165 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015166 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15167 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15168 {
15169 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15170 }
15171 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015172 {
15173 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15174 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15175 else
15176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015177 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015178 }
15179 else
15180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015181 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015182 break;
15183 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015184#ifdef WLAN_FEATURE_11W
15185 case WDA_EXCLUDE_UNENCRYPTED_IND:
15186 {
15187 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15188 break;
15189 }
15190#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015191#ifdef FEATURE_WLAN_TDLS
15192 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15193 {
15194 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15195 break;
15196 }
15197#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015198 case WDA_DHCP_START_IND:
15199 {
15200 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15201 break;
15202 }
15203 case WDA_DHCP_STOP_IND:
15204 {
15205 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15206 break;
15207 }
Leo Chang9056f462013-08-01 19:21:11 -070015208#ifdef FEATURE_WLAN_LPHB
15209 case WDA_LPHB_CONF_REQ:
15210 {
15211 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15212 break;
15213 }
15214#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015215 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15216 {
15217 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15218 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15219 break;
15220 }
15221 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15222 {
15223 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15224 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15225 break;
15226 }
15227
Rajeev79dbe4c2013-10-05 11:03:42 +053015228#ifdef FEATURE_WLAN_BATCH_SCAN
15229 case WDA_SET_BATCH_SCAN_REQ:
15230 {
15231 WDA_ProcessSetBatchScanReq(pWDA,
15232 (tSirSetBatchScanReq *)pMsg->bodyptr);
15233 break;
15234 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070015235 case WDA_RATE_UPDATE_IND:
15236 {
15237 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15238 break;
15239 }
Rajeev79dbe4c2013-10-05 11:03:42 +053015240 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15241 {
15242 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15243 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15244 break;
15245 }
15246 case WDA_STOP_BATCH_SCAN_IND:
15247 {
15248 WDA_ProcessStopBatchScanInd(pWDA,
15249 (tSirStopBatchScanInd *)pMsg->bodyptr);
15250 break;
15251 }
c_hpothu92367912014-05-01 15:18:17 +053015252 case WDA_GET_BCN_MISS_RATE_REQ:
15253 WDA_ProcessGetBcnMissRateReq(pWDA,
15254 (tSirBcnMissRateReq *)pMsg->bodyptr);
15255 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015256#endif
15257
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015258 case WDA_HT40_OBSS_SCAN_IND:
15259 {
15260 WDA_ProcessHT40OBSSScanInd(pWDA,
15261 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15262 break;
15263 }
15264 case WDA_HT40_OBSS_STOP_SCAN_IND:
15265 {
15266 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15267 (tANI_U8*)pMsg->bodyptr);
15268 break;
15269 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015270// tdlsoffchan
15271#ifdef FEATURE_WLAN_TDLS
15272 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15273 {
15274 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15275 break;
15276 }
15277#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015278 case WDA_SPOOF_MAC_ADDR_REQ:
15279 {
15280 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15281 break;
15282 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015283 case WDA_ENCRYPT_MSG_REQ:
15284 {
15285 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15286 break;
15287 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015288
15289 case WDA_NAN_REQUEST:
15290 {
15291 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15292 break;
15293 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015294 case WDA_SET_RTS_CTS_HTVHT:
15295 {
15296 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15297 break;
15298 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015299
15300 case WDA_MON_START_REQ:
15301 {
15302 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15303 break;
15304 }
15305 case WDA_MON_STOP_REQ:
15306 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015307 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015308 break;
15309 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015310 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15311 {
15312 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15313 break;
15314 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015315 case WDA_WIFI_CONFIG_REQ:
15316 {
15317 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15318 break;
15319 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015320#ifdef FEATURE_OEM_DATA_SUPPORT
15321 case WDA_START_OEM_DATA_REQ_IND_NEW:
15322 {
15323 WDA_ProcessStartOemDataReqIndNew(pWDA,
15324 (tOemDataReqNewConfig *)pMsg->bodyptr);
15325 break;
15326 }
15327#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015328 default:
15329 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 "No Handling for msg type %x in WDA "
15332 ,pMsg->type);
15333 /* Do Nothing? MSG Body should be freed at here */
15334 if(NULL != pMsg->bodyptr)
15335 {
15336 vos_mem_free(pMsg->bodyptr);
15337 }
15338 //WDA_VOS_ASSERT(0) ;
15339 }
15340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015341 return status ;
15342}
15343
Jeff Johnson295189b2012-06-20 16:38:30 -070015344/*
15345 * FUNCTION: WDA_LowLevelIndCallback
15346 * IND API callback from WDI, send Ind to PE
15347 */
15348void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15349 void* pUserData )
15350{
15351 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15352#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15353 tSirRSSINotification rssiNotification;
15354#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015355 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015356 {
15357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015358 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015359 VOS_ASSERT(0);
15360 return ;
15361 }
15362
15363 switch(wdiLowLevelInd->wdiIndicationType)
15364 {
15365 case WDI_RSSI_NOTIFICATION_IND:
15366 {
15367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15368 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015369#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15370 rssiNotification.bReserved =
15371 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15372 rssiNotification.bRssiThres1NegCross =
15373 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15374 rssiNotification.bRssiThres1PosCross =
15375 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15376 rssiNotification.bRssiThres2NegCross =
15377 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15378 rssiNotification.bRssiThres2PosCross =
15379 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15380 rssiNotification.bRssiThres3NegCross =
15381 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15382 rssiNotification.bRssiThres3PosCross =
15383 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015384 rssiNotification.avgRssi = (v_S7_t)
15385 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015386 WLANTL_BMPSRSSIRegionChangedNotification(
15387 pWDA->pVosContext,
15388 &rssiNotification);
15389#endif
15390 break ;
15391 }
15392 case WDI_MISSED_BEACON_IND:
15393 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015394 tpSirSmeMissedBeaconInd pMissBeacInd =
15395 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15397 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015398 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015399 if(NULL == pMissBeacInd)
15400 {
15401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15402 "%s: VOS MEM Alloc Failure", __func__);
15403 break;
15404 }
15405 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
15406 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
15407 pMissBeacInd->bssIdx =
15408 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
15409 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015410 break ;
15411 }
15412 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
15413 {
15414 /* TODO: Decode Ind and send Ind to PE */
15415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15416 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
15417 break ;
15418 }
15419
15420 case WDI_MIC_FAILURE_IND:
15421 {
15422 tpSirSmeMicFailureInd pMicInd =
15423 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
15424
15425 if(NULL == pMicInd)
15426 {
15427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015429 break;
15430 }
15431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15432 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015433 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
15434 pMicInd->length = sizeof(tSirSmeMicFailureInd);
15435 vos_mem_copy(pMicInd->bssId,
15436 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
15437 sizeof(tSirMacAddr));
15438 vos_mem_copy(pMicInd->info.srcMacAddr,
15439 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
15440 sizeof(tSirMacAddr));
15441 vos_mem_copy(pMicInd->info.taMacAddr,
15442 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
15443 sizeof(tSirMacAddr));
15444 vos_mem_copy(pMicInd->info.dstMacAddr,
15445 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
15446 sizeof(tSirMacAddr));
15447 vos_mem_copy(pMicInd->info.rxMacAddr,
15448 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
15449 sizeof(tSirMacAddr));
15450 pMicInd->info.multicast =
15451 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
15452 pMicInd->info.keyId=
15453 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
15454 pMicInd->info.IV1=
15455 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
15456 vos_mem_copy(pMicInd->info.TSC,
15457 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070015458 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
15459 (void *)pMicInd , 0) ;
15460 break ;
15461 }
15462 case WDI_FATAL_ERROR_IND:
15463 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070015464 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 /* TODO: Decode Ind and send Ind to PE */
15466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15467 "Received WDI_FATAL_ERROR_IND from WDI ");
15468 break ;
15469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015470 case WDI_DEL_STA_IND:
15471 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015472 tpDeleteStaContext pDelSTACtx =
15473 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
15474
15475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15476 "Received WDI_DEL_STA_IND from WDI ");
15477 if(NULL == pDelSTACtx)
15478 {
15479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015481 break;
15482 }
15483 vos_mem_copy(pDelSTACtx->addr2,
15484 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
15485 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015486 vos_mem_copy(pDelSTACtx->bssId,
15487 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
15488 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015489 pDelSTACtx->assocId =
15490 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
15491 pDelSTACtx->reasonCode =
15492 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
15493 pDelSTACtx->staId =
15494 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015495 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
15496 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015497 break ;
15498 }
15499 case WDI_COEX_IND:
15500 {
15501 tANI_U32 index;
15502 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053015503 tSirSmeCoexInd *pSmeCoexInd;
15504
15505 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
15506 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
15507 {
15508 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
15509 {
15510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15511 FL("Coex state: 0x%x coex feature: 0x%x"),
15512 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
15513 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
15514
15515 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
15516 {
15517 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
15518 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
15519 }
15520 }
15521 break;
15522 }
15523
15524 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015525 if(NULL == pSmeCoexInd)
15526 {
15527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015528 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 break;
15530 }
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15532 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015533 /* Message Header */
15534 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
15535 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 /* Info from WDI Indication */
15537 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
15538 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
15539 {
15540 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
15541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015542 /* VOS message wrapper */
15543 vosMsg.type = eWNI_SME_COEX_IND;
15544 vosMsg.bodyptr = (void *)pSmeCoexInd;
15545 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015546 /* Send message to SME */
15547 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15548 {
15549 /* free the mem and return */
15550 vos_mem_free((v_VOID_t *)pSmeCoexInd);
15551 }
15552 else
15553 {
15554 /* DEBUG */
15555 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15556 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
15557 pSmeCoexInd->coexIndType,
15558 pSmeCoexInd->coexIndData[0],
15559 pSmeCoexInd->coexIndData[1],
15560 pSmeCoexInd->coexIndData[2],
15561 pSmeCoexInd->coexIndData[3]);
15562 }
15563 break;
15564 }
15565 case WDI_TX_COMPLETE_IND:
15566 {
15567 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
15568 /* Calling TxCompleteAck Indication from wda context*/
15569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15570 "Complete Indication received from HAL");
15571 if( pWDA->pAckTxCbFunc )
15572 {
15573 if( VOS_STATUS_SUCCESS !=
15574 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15575 {
15576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15577 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015578 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053015579 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015580 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
15581 else
15582 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015583 pWDA->pAckTxCbFunc = NULL;
15584 }
15585 else
15586 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053015587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 "Tx Complete Indication is received after timeout ");
15589 }
15590 break;
15591 }
Viral Modid86bde22012-12-10 13:09:21 -080015592 case WDI_P2P_NOA_START_IND :
15593 {
15594 tSirP2PNoaStart *pP2pNoaStart =
15595 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
15596
15597 if (NULL == pP2pNoaStart)
15598 {
15599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15600 "Memory allocation failure, "
15601 "WDI_P2P_NOA_START_IND not forwarded");
15602 break;
15603 }
15604 pP2pNoaStart->status =
15605 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
15606 pP2pNoaStart->bssIdx =
15607 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
15608 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
15609 (void *)pP2pNoaStart , 0) ;
15610 break;
15611 }
15612
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015613#ifdef FEATURE_WLAN_TDLS
15614 case WDI_TDLS_IND :
15615 {
15616 tSirTdlsInd *pTdlsInd =
15617 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
15618
15619 if (NULL == pTdlsInd)
15620 {
15621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15622 "Memory allocation failure, "
15623 "WDI_TDLS_IND not forwarded");
15624 break;
15625 }
15626 pTdlsInd->status =
15627 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
15628 pTdlsInd->assocId =
15629 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
15630 pTdlsInd->staIdx =
15631 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
15632 pTdlsInd->reasonCode =
15633 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
15634 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
15635 (void *)pTdlsInd , 0) ;
15636 break;
15637 }
15638#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015639 case WDI_P2P_NOA_ATTR_IND :
15640 {
15641 tSirP2PNoaAttr *pP2pNoaAttr =
15642 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15644 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015645 if (NULL == pP2pNoaAttr)
15646 {
15647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15648 "Memory allocation failure, "
15649 "WDI_P2P_NOA_ATTR_IND not forwarded");
15650 break;
15651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015652 pP2pNoaAttr->index =
15653 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
15654 pP2pNoaAttr->oppPsFlag =
15655 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
15656 pP2pNoaAttr->ctWin =
15657 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
15658
15659 pP2pNoaAttr->uNoa1IntervalCnt =
15660 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
15661 pP2pNoaAttr->uNoa1Duration =
15662 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
15663 pP2pNoaAttr->uNoa1Interval =
15664 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
15665 pP2pNoaAttr->uNoa1StartTime =
15666 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015667 pP2pNoaAttr->uNoa2IntervalCnt =
15668 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
15669 pP2pNoaAttr->uNoa2Duration =
15670 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
15671 pP2pNoaAttr->uNoa2Interval =
15672 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
15673 pP2pNoaAttr->uNoa2StartTime =
15674 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015675 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
15676 (void *)pP2pNoaAttr , 0) ;
15677 break;
15678 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015679#ifdef FEATURE_WLAN_SCAN_PNO
15680 case WDI_PREF_NETWORK_FOUND_IND:
15681 {
15682 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015683 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
15684 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15685 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
15686 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
15687
Jeff Johnson295189b2012-06-20 16:38:30 -070015688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15689 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015690 if (NULL == pPrefNetworkFoundInd)
15691 {
15692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15693 "Memory allocation failure, "
15694 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053015695 if (NULL !=
15696 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15697 {
15698 wpalMemoryFree(
15699 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
15700 );
15701 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015703 break;
15704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015705 /* Message Header */
15706 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015707 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070015708
15709 /* Info from WDI Indication */
15710 pPrefNetworkFoundInd->ssId.length =
15711 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070015712 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070015713 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
15714 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
15715 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070015716 if (NULL !=
15717 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15718 {
15719 pPrefNetworkFoundInd->frameLength =
15720 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15721 vos_mem_copy( pPrefNetworkFoundInd->data,
15722 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
15723 pPrefNetworkFoundInd->frameLength);
15724 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
15725 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15726 }
15727 else
15728 {
15729 pPrefNetworkFoundInd->frameLength = 0;
15730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015731 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 /* VOS message wrapper */
15733 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
15734 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
15735 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015736 /* Send message to SME */
15737 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15738 {
15739 /* free the mem and return */
15740 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
15741 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015742 break;
15743 }
15744#endif // FEATURE_WLAN_SCAN_PNO
15745
15746#ifdef WLAN_WAKEUP_EVENTS
15747 case WDI_WAKE_REASON_IND:
15748 {
15749 vos_msg_t vosMsg;
15750 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15751 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15752 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15753
15754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015755 "[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 -070015756 wdiLowLevelInd->wdiIndicationType,
15757 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15758 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15759 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15760
15761 if (NULL == pWakeReasonInd)
15762 {
15763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15764 "Memory allocation failure, "
15765 "WDI_WAKE_REASON_IND not forwarded");
15766 break;
15767 }
15768
15769 vos_mem_zero(pWakeReasonInd, allocSize);
15770
15771 /* Message Header */
15772 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15773 pWakeReasonInd->mesgLen = allocSize;
15774
15775 /* Info from WDI Indication */
15776 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15777 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15778 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15779 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15780 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15781 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15782 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15783 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15784
15785 /* VOS message wrapper */
15786 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15787 vosMsg.bodyptr = (void *) pWakeReasonInd;
15788 vosMsg.bodyval = 0;
15789
15790 /* Send message to SME */
15791 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15792 {
15793 /* free the mem and return */
15794 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15795 }
15796
15797 break;
15798 }
15799#endif // WLAN_WAKEUP_EVENTS
15800
15801 case WDI_TX_PER_HIT_IND:
15802 {
15803 vos_msg_t vosMsg;
15804 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15805 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15806 /* VOS message wrapper */
15807 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15808 vosMsg.bodyptr = NULL;
15809 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015810 /* Send message to SME */
15811 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15812 {
15813 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15814 }
15815 break;
15816 }
15817
Leo Chang9056f462013-08-01 19:21:11 -070015818#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015819 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015820 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015821 vos_msg_t vosMsg;
15822 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015823
Leo Changd9df8aa2013-09-26 13:32:26 -070015824 lphbInd =
15825 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15826 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015827 {
15828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15829 "%s: LPHB IND buffer alloc Fail", __func__);
15830 return ;
15831 }
15832
Leo Changd9df8aa2013-09-26 13:32:26 -070015833 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015834 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015835 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015836 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015837 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015838 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15839
15840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015841 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015842 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15843
Leo Changd9df8aa2013-09-26 13:32:26 -070015844 vosMsg.type = eWNI_SME_LPHB_IND;
15845 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015846 vosMsg.bodyval = 0;
15847 /* Send message to SME */
15848 if (VOS_STATUS_SUCCESS !=
15849 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15850 {
15851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15852 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015853 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015854 }
15855 break;
15856 }
15857#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015858 case WDI_PERIODIC_TX_PTRN_FW_IND:
15859 {
15860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15861 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15862 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15863 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15864 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15865 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15866 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15867
15868 break;
15869 }
Leo Chang9056f462013-08-01 19:21:11 -070015870
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015871 case WDI_IBSS_PEER_INACTIVITY_IND:
15872 {
15873 tSirIbssPeerInactivityInd *pIbssInd =
15874 (tSirIbssPeerInactivityInd *)
15875 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15876
15877 if (NULL == pIbssInd)
15878 {
15879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15880 "Memory allocation failure, "
15881 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15882 break;
15883 }
15884
15885 pIbssInd->bssIdx =
15886 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15887 pIbssInd->staIdx =
15888 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15889 vos_mem_copy(pIbssInd->peerAddr,
15890 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15891 sizeof(tSirMacAddr));
15892 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15893 break;
15894 }
15895
Rajeev79dbe4c2013-10-05 11:03:42 +053015896#ifdef FEATURE_WLAN_BATCH_SCAN
15897 case WDI_BATCH_SCAN_RESULT_IND:
15898 {
15899 void *pBatchScanResult;
15900 void *pCallbackContext;
15901 tpAniSirGlobal pMac;
15902
15903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15904 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15905
15906 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015907 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015908 {
15909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15910 "%s:pWDA is NULL", __func__);
15911 VOS_ASSERT(0);
15912 return;
15913 }
15914
15915 pBatchScanResult =
15916 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15917 if (NULL == pBatchScanResult)
15918 {
15919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15920 "%s:Batch scan result from FW is null can't invoke HDD callback",
15921 __func__);
15922 VOS_ASSERT(0);
15923 return;
15924 }
15925
15926 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15927 if (NULL == pMac)
15928 {
15929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15930 "%s:pMac is NULL", __func__);
15931 VOS_ASSERT(0);
15932 return;
15933 }
15934
15935 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
15936 /*call hdd callback with set batch scan response data*/
15937 if(pMac->pmc.batchScanResultCallback)
15938 {
15939 pMac->pmc.batchScanResultCallback(pCallbackContext,
15940 pBatchScanResult);
15941 }
15942 else
15943 {
15944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15945 "%s:HDD callback is null", __func__);
15946 VOS_ASSERT(0);
15947 }
15948 break;
15949 }
15950#endif
15951
Leo Chang0b0e45a2013-12-15 15:18:55 -080015952#ifdef FEATURE_WLAN_CH_AVOID
15953 case WDI_CH_AVOID_IND:
15954 {
15955 vos_msg_t vosMsg;
15956 tSirChAvoidIndType *chAvoidInd;
15957
15958 chAvoidInd =
15959 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
15960 if (NULL == chAvoidInd)
15961 {
15962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15963 "%s: CH_AVOID IND buffer alloc Fail", __func__);
15964 return ;
15965 }
15966
15967 chAvoidInd->avoidRangeCount =
15968 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
15969 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
15970 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
15971 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
15972
15973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15974 "%s : WDA CH avoid notification", __func__);
15975
15976 vosMsg.type = eWNI_SME_CH_AVOID_IND;
15977 vosMsg.bodyptr = chAvoidInd;
15978 vosMsg.bodyval = 0;
15979 /* Send message to SME */
15980 if (VOS_STATUS_SUCCESS !=
15981 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15982 {
15983 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15984 "post eWNI_SME_CH_AVOID_IND to SME Failed");
15985 vos_mem_free(chAvoidInd);
15986 }
15987 break;
15988 }
15989#endif /* FEATURE_WLAN_CH_AVOID */
15990
Sunil Duttbd736ed2014-05-26 21:19:41 +053015991#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15992 case WDI_LL_STATS_RESULTS_IND:
15993 {
15994 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053015995 tpAniSirGlobal pMac;
15996
15997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15998 "Received WDI_LL_STATS_RESULTS_IND from FW");
15999
16000 /*sanity check*/
16001 if (NULL == pWDA)
16002 {
16003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16004 "%s:pWDA is NULL", __func__);
16005 VOS_ASSERT(0);
16006 return;
16007 }
16008
16009 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016010 (void *)wdiLowLevelInd->
16011 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016012 if (NULL == pLinkLayerStatsInd)
16013 {
16014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16015 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16016 __func__);
16017 VOS_ASSERT(0);
16018 return;
16019 }
16020
16021 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16022 if (NULL == pMac)
16023 {
16024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16025 "%s:pMac is NULL", __func__);
16026 VOS_ASSERT(0);
16027 return;
16028 }
16029
Dino Mycled3d50022014-07-07 12:58:25 +053016030 /* call hdd callback with Link Layer Statistics.
16031 * vdev_id/ifacId in link_stats_results will be
16032 * used to retrieve the correct HDD context
16033 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016034 if (pMac->sme.pLinkLayerStatsIndCallback)
16035 {
Dino Mycled3d50022014-07-07 12:58:25 +053016036 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016037 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016038 pLinkLayerStatsInd,
16039 wdiLowLevelInd->
16040 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016041 }
16042 else
16043 {
16044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16045 "%s:HDD callback is null", __func__);
16046 }
16047 break;
16048 }
16049#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16050
Dino Mycle41bdc942014-06-10 11:30:24 +053016051#ifdef WLAN_FEATURE_EXTSCAN
16052 case WDI_EXTSCAN_PROGRESS_IND:
16053 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16054 case WDI_EXTSCAN_SCAN_RESULT_IND:
16055 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016056 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016057 {
16058 void *pEXTScanData;
16059 void *pCallbackContext;
16060 tpAniSirGlobal pMac;
16061 tANI_U16 indType;
16062
16063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16064 "Received WDI_EXTSCAN Indications from FW");
16065 /*sanity check*/
16066 if (NULL == pWDA)
16067 {
16068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16069 "%s:pWDA is NULL", __func__);
16070 VOS_ASSERT(0);
16071 return;
16072 }
16073 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16074 {
16075 indType = WDA_EXTSCAN_PROGRESS_IND;
16076
16077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16078 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16079 }
16080 if (wdiLowLevelInd->wdiIndicationType ==
16081 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16082 {
16083 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16084
16085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16086 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16087 }
16088 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16089 {
16090 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16091
16092 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16093 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16094 }
16095 if (wdiLowLevelInd->wdiIndicationType ==
16096 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16097 {
16098 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16099
16100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16101 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16102 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016103 if (wdiLowLevelInd->wdiIndicationType ==
16104 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16105 {
16106 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16107
16108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16109 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16110 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016111
16112 pEXTScanData =
16113 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16114 if (NULL == pEXTScanData)
16115 {
16116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16117 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16118 __func__);
16119 VOS_ASSERT(0);
16120 return;
16121 }
16122
16123 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16124 if (NULL == pMac)
16125 {
16126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16127 "%s:pMac is NULL", __func__);
16128 VOS_ASSERT(0);
16129 return;
16130 }
16131
16132 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16133
16134 if(pMac->sme.pEXTScanIndCb)
16135 {
16136 pMac->sme.pEXTScanIndCb(pCallbackContext,
16137 indType,
16138 pEXTScanData);
16139 }
16140 else
16141 {
16142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16143 "%s:HDD callback is null", __func__);
16144 }
16145 break;
16146 }
16147#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016148 case WDI_DEL_BA_IND:
16149 {
16150 tpBADeleteParams pDelBAInd =
16151 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
16152
16153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16154 "Received WDI_DEL_BA_IND from WDI ");
16155 if(NULL == pDelBAInd)
16156 {
16157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16158 "%s: VOS MEM Alloc Failure", __func__);
16159 break;
16160 }
16161 vos_mem_copy(pDelBAInd->peerMacAddr,
16162 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16163 sizeof(tSirMacAddr));
16164 vos_mem_copy(pDelBAInd->bssId,
16165 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16166 sizeof(tSirMacAddr));
16167 pDelBAInd->staIdx =
16168 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16169 pDelBAInd->baTID =
16170 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16171 pDelBAInd->baDirection =
16172 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16173 pDelBAInd->reasonCode =
16174 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16175
16176 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16177 (void *)pDelBAInd , 0) ;
16178 break;
16179 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016180 case WDI_NAN_EVENT_IND:
16181 {
16182 vos_msg_t vosMsg;
16183 tpSirNanEvent pSirNanEvent = NULL;
16184
16185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16186 "Received WDI_NAN_EVENT");
16187
16188 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16189 - sizeof( pSirNanEvent->event_data)
16190 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16191
16192 if (NULL == pSirNanEvent)
16193 {
16194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16195 "%s: VOS MEM Alloc Failure", __func__);
16196 VOS_ASSERT(0) ;
16197 break;
16198 }
16199
16200 pSirNanEvent->event_data_len =
16201 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16202
16203 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16204 {
16205 vos_mem_copy( pSirNanEvent->event_data,
16206 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16207 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16208 }
16209
16210 /* VOS message wrapper */
16211 vosMsg.type = eWNI_SME_NAN_EVENT;
16212 vosMsg.bodyptr = pSirNanEvent;
16213 vosMsg.bodyval = 0;
16214
16215 /* Send message to SME */
16216 if (VOS_STATUS_SUCCESS
16217 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16218 {
16219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16220 "post eWNI_SME_NAN_EVENT to SME Failed");
16221 vos_mem_free(pSirNanEvent);
16222 }
16223 break;
16224 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016225 case WDI_LOST_LINK_PARAMS_IND:
16226 {
16227 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16228 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016229
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016230 if (NULL == pLostLinkParamInd)
16231 {
16232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16233 "%s: VOS MEM Alloc Failure", __func__);
16234 break;
16235 }
16236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16237 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16238
16239 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16240 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16241 pLostLinkParamInd->info.bssIdx =
16242 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16243 pLostLinkParamInd->info.rssi =
16244 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16245 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16246 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16247 sizeof(tSirMacAddr));
16248 pLostLinkParamInd->info.linkFlCnt =
16249 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16250 pLostLinkParamInd->info.linkFlTx =
16251 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16252 pLostLinkParamInd->info.lastDataRate =
16253 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16254 pLostLinkParamInd->info.rsvd1 =
16255 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16256 pLostLinkParamInd->info.rsvd2 =
16257 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16258 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16259 (void *)pLostLinkParamInd , 0) ;
16260 break;
16261 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016262 case WDI_RSSI_BREACHED_IND:
16263 {
16264 WDI_RssiBreachedIndType *pRssiBreachedInd;
16265 tpAniSirGlobal pMac;
16266
16267 pRssiBreachedInd =
16268 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16270 "Received WDI_RSSI_BREACHED_IND from FW");
16271
16272 vos_mem_copy(pRssiBreachedInd,
16273 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16274 sizeof(WDI_RssiBreachedIndType));
16275
16276 /*sanity check*/
16277 if (NULL == pWDA)
16278 {
16279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16280 "%s:pWDA is NULL", __func__);
16281 vos_mem_free(pRssiBreachedInd);
16282 VOS_ASSERT(0);
16283 return;
16284 }
16285
16286 if (NULL == pRssiBreachedInd)
16287 {
16288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16289 "%s:Breach indication from FW is null can't invoke HDD callback",
16290 __func__);
16291 VOS_ASSERT(0);
16292 return;
16293 }
16294
16295 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16296 if (NULL == pMac)
16297 {
16298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16299 "%s:pMac is NULL", __func__);
16300 VOS_ASSERT(0);
16301 vos_mem_free(pRssiBreachedInd);
16302 return;
16303 }
16304
16305 if (pMac->sme.rssiThresholdBreachedCb)
16306 {
16307 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16308 }
16309 else
16310 {
16311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16312 "%s:HDD callback is null", __func__);
16313 }
16314 vos_mem_free(pRssiBreachedInd);
16315 break;
16316 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016317#ifdef FEATURE_OEM_DATA_SUPPORT
16318 case WDI_START_OEM_DATA_RSP_IND_NEW:
16319 {
16320 void *pCallbackContext;
16321 tpAniSirGlobal pMac;
16322 tANI_U16 indType;
16323 void *pOemRspNewIndData;
16324
16325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16326 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
16327
16328 /*sanity check*/
16329 if (NULL == pWDA)
16330 {
16331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16332 "%s:pWDA is NULL", __func__);
16333 VOS_ASSERT(0);
16334 return;
16335 }
16336
16337 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
16338 pOemRspNewIndData =
16339 (void *)wdiLowLevelInd->wdiIndicationData.pOemRspNewIndData;
16340 if (NULL == pOemRspNewIndData)
16341 {
16342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16343 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
16344 __func__);
16345 VOS_ASSERT(0);
16346 return;
16347 }
16348
16349 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16350 if (NULL == pMac)
16351 {
16352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16353 "%s:pMac is NULL", __func__);
16354 VOS_ASSERT(0);
16355 return;
16356 }
16357
16358 pCallbackContext = pMac->sme.pOemDataCallbackContext;
16359
16360 if(pMac->sme.pOemDataIndCb)
16361 {
16362 pMac->sme.pOemDataIndCb(pCallbackContext,
16363 indType,
16364 pOemRspNewIndData);
16365 }
16366 else
16367 {
16368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16369 "%s:HDD callback is null", __func__);
16370 }
16371 break;
16372 }
16373#endif /* FEATURE_OEM_DATA_SUPPORT */
16374
Jeff Johnson295189b2012-06-20 16:38:30 -070016375 default:
16376 {
16377 /* TODO error */
16378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16379 "Received UNKNOWN Indication from WDI ");
16380 }
16381 }
16382 return ;
16383}
16384
Jeff Johnson295189b2012-06-20 16:38:30 -070016385/*
16386 * BA related processing in WDA.
16387 */
Jeff Johnson295189b2012-06-20 16:38:30 -070016388void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
16389 void* pUserData)
16390{
16391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16392 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070016393 if(NULL == pWdaParams)
16394 {
16395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016397 VOS_ASSERT(0) ;
16398 return ;
16399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016400 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070016401 vos_mem_free(pWdaParams->wdaMsgParam) ;
16402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16403 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016406 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
16407 {
16408 tANI_U8 i = 0 ;
16409 tBaActivityInd *baActivityInd = NULL ;
16410 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
16411 tANI_U8 allocSize = sizeof(tBaActivityInd)
16412 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
16413 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
16414 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016415 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016416 if(NULL == baActivityInd)
16417 {
16418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016420 VOS_ASSERT(0) ;
16421 return;
16422 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016423 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
16424 sizeof(tSirMacAddr)) ;
16425 baActivityInd->baCandidateCnt = baCandidateCount ;
16426
16427 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
16428 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
16429
16430 for(i = 0 ; i < baCandidateCount ; i++)
16431 {
16432 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016433 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
16434 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016435 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
16436 {
16437 baCandidate->baInfo[tid].fBaEnable =
16438 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
16439 baCandidate->baInfo[tid].startingSeqNum =
16440 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
16441 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016442 wdiBaCandidate++ ;
16443 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016445 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
16446 }
16447 else
16448 {
16449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16450 "BA Trigger RSP with Failure received ");
16451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016452 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016453}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016454
16455
16456/*
16457 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
16458 * during MCC
16459 */
16460void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
16461{
16462 wpt_uint32 enabled;
16463 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
16464 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
16465 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
16466
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016467 if (NULL == pMac )
16468 {
16469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16470 "%s: Invoked with invalid MAC context ", __func__ );
16471 VOS_ASSERT(0);
16472 return;
16473 }
16474
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016475 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16476 != eSIR_SUCCESS)
16477 {
16478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16479 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16480 return;
16481 }
16482
16483 if(!enabled)
16484 {
16485 return;
16486 }
16487
16488 if(NULL == pWDA)
16489 {
16490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16491 "%s:WDA context is NULL", __func__);
16492 VOS_ASSERT(0);
16493 return;
16494 }
16495
16496 if(activate)
16497 {
16498 if( VOS_STATUS_SUCCESS !=
16499 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16500 {
16501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16502 "Traffic Stats Timer Start Failed ");
16503 return;
16504 }
16505 WDI_DS_ActivateTrafficStats();
16506 }
16507 else
16508 {
16509 WDI_DS_DeactivateTrafficStats();
16510 WDI_DS_ClearTrafficStats();
16511
16512 if( VOS_STATUS_SUCCESS !=
16513 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16514 {
16515 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16516 "Traffic Stats Timer Stop Failed ");
16517 return;
16518 }
16519 }
16520}
16521
16522/*
16523 * Traffic Stats Timer handler
16524 */
16525void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
16526{
16527 WDI_Status wdiStatus;
16528 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
16529 WDI_TrafficStatsIndType trafficStatsIndParams;
16530 wpt_uint32 length, enabled;
16531 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16532
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016533 if (NULL == pMac )
16534 {
16535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16536 "%s: Invoked with invalid MAC context ", __func__ );
16537 VOS_ASSERT(0);
16538 return;
16539 }
16540
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016541 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16542 != eSIR_SUCCESS)
16543 {
16544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16545 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16546 return;
16547 }
16548
16549 if(!enabled)
16550 {
16551 WDI_DS_DeactivateTrafficStats();
16552 return;
16553 }
16554
16555 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
16556
16557 if(pWdiTrafficStats != NULL)
16558 {
16559 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
16560 trafficStatsIndParams.length = length;
16561 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080016562 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016563 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
16564 trafficStatsIndParams.pUserData = pWDA;
16565
16566 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
16567
16568 if(WDI_STATUS_PENDING == wdiStatus)
16569 {
16570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16571 "Pending received for %s:%d ",__func__,__LINE__ );
16572 }
16573 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
16574 {
16575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16576 "Failure in %s:%d ",__func__,__LINE__ );
16577 }
16578
16579 WDI_DS_ClearTrafficStats();
16580 }
16581 else
16582 {
16583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16584 "pWdiTrafficStats is Null");
16585 }
16586
16587 if( VOS_STATUS_SUCCESS !=
16588 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16589 {
16590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16591 "Traffic Stats Timer Start Failed ");
16592 return;
16593 }
16594}
16595
Jeff Johnson295189b2012-06-20 16:38:30 -070016596/*
16597 * BA Activity check timer handler
16598 */
16599void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
16600{
16601 tANI_U8 curSta = 0 ;
16602 tANI_U8 tid = 0 ;
16603 tANI_U8 size = 0 ;
16604 tANI_U8 baCandidateCount = 0 ;
16605 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016606 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070016607 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016608 tpAniSirGlobal pMac;
16609
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016610 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016611 {
16612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016613 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016614 VOS_ASSERT(0);
16615 return ;
16616 }
16617 if(WDA_MAX_STA < pWDA->wdaMaxSta)
16618 {
16619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16620 "Inconsistent STA entries in WDA");
16621 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016622 }
16623 if(NULL == pWDA->pVosContext)
16624 {
16625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16626 "%s: pVosContext is NULL",__func__);
16627 VOS_ASSERT(0);
16628 return ;
16629 }
16630 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053016631 if(NULL == pMac)
16632 {
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16634 "%s: pMac is NULL",__func__);
16635 VOS_ASSERT(0);
16636 return ;
16637 }
16638
Abhishek Singh0644e482014-10-06 18:38:23 +053016639 if (wlan_cfgGetInt(pMac,
16640 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
16641 eSIR_SUCCESS)
16642 {
16643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16644 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
16645 val = 0;
16646 }
16647
Jeff Johnson295189b2012-06-20 16:38:30 -070016648 /* walk through all STA entries and find out TX packet count */
16649 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
16650 {
Abhishek Singh0644e482014-10-06 18:38:23 +053016651 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016652#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016653 // We can only do BA on "hard" STAs.
16654 if (!(IS_HWSTA_IDX(curSta)))
16655 {
16656 continue;
16657 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016658#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016659 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
16660 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016661 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016662 tANI_U32 txPktCount = 0 ;
16663 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016664 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016665 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
16666 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070016667 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
16668 curSta, tid, &txPktCount)))
16669 {
16670#if 0
16671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16672 "************* %d:%d, %d ",curSta, txPktCount,
16673 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
16674#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053016675 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
16676 (currentOperChan <= SIR_11B_CHANNEL_END)))
16677 {
16678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16679 "%s: BTC disabled aggregation - dont start "
16680 "TX ADDBA req",__func__);
16681 }
16682 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016683 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053016684 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
16685 pWDA->wdaGlobalSystemRole) && txPktCount )
16686 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
16687 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070016688 {
16689 /* get prepare for sending message to HAL */
16690 //baCandidate[baCandidateCount].staIdx = curSta ;
16691 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
16692 newBaCandidate = WDA_ENABLE_BA ;
16693 }
16694 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
16695 }
16696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 /* fill the entry for all the sta with given TID's */
16698 if(WDA_ENABLE_BA == newBaCandidate)
16699 {
16700 /* move to next BA candidate */
16701 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
16702 size += sizeof(WDI_TriggerBAReqCandidateType) ;
16703 baCandidateCount++ ;
16704 newBaCandidate = WDA_DISABLE_BA ;
16705 }
16706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016707 /* prepare and send message to hal */
16708 if( 0 < baCandidateCount)
16709 {
16710 WDI_Status status = WDI_STATUS_SUCCESS ;
16711 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
16712 tWDA_ReqParams *pWdaParams =
16713 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016714 if(NULL == pWdaParams)
16715 {
16716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 VOS_ASSERT(0) ;
16719 return;
16720 }
16721 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
16722 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
16723 if(NULL == wdiTriggerBaReq)
16724 {
16725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016727 VOS_ASSERT(0) ;
16728 vos_mem_free(pWdaParams);
16729 return;
16730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016731 do
16732 {
16733 WDI_TriggerBAReqinfoType *triggerBaInfo =
16734 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
16735 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
16736 /* TEMP_FIX: Need to see if WDI need check for assoc session for
16737 * for each request */
16738 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
16739 triggerBaInfo->ucBASessionID = 0;
16740 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
16741 } while(0) ;
16742 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
16743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016744 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016745 pWdaParams->pWdaContext = pWDA;
16746 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
16747 pWdaParams->wdaMsgParam = NULL;
16748 status = WDI_TriggerBAReq(wdiTriggerBaReq,
16749 WDA_TriggerBaReqCallback, pWdaParams) ;
16750 if(IS_WDI_STATUS_FAILURE(status))
16751 {
16752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16753 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
16754 vos_mem_free(pWdaParams->wdaMsgParam) ;
16755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16756 vos_mem_free(pWdaParams) ;
16757 }
16758 }
16759 else
16760 {
16761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16762 "There is no TID for initiating BA");
16763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016764 if( VOS_STATUS_SUCCESS !=
16765 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16766 {
16767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16768 "BA Activity Timer Stop Failed ");
16769 return ;
16770 }
16771 if( VOS_STATUS_SUCCESS !=
16772 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16773 {
16774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16775 "BA Activity Timer Start Failed ");
16776 return;
16777 }
16778 return ;
16779}
Jeff Johnson295189b2012-06-20 16:38:30 -070016780/*
16781 * WDA common routine to create timer used by WDA.
16782 */
16783static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
16784{
Jeff Johnson295189b2012-06-20 16:38:30 -070016785 VOS_STATUS status = VOS_STATUS_SUCCESS ;
16786 tANI_U32 val = 0 ;
16787 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16788
16789 if(NULL == pMac)
16790 {
16791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016792 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016793 VOS_ASSERT(0);
16794 return VOS_STATUS_E_FAILURE;
16795 }
16796 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
16797 != eSIR_SUCCESS)
16798 {
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16800 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
16801 return VOS_STATUS_E_FAILURE;
16802 }
16803 val = SYS_MS_TO_TICKS(val) ;
16804
16805 /* BA activity check timer */
16806 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
16807 "BA Activity Check timer", WDA_TimerHandler,
16808 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
16809 if(status != TX_SUCCESS)
16810 {
16811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16812 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016813 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016815 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016816 /* Tx Complete Timeout timer */
16817 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
16818 "Tx Complete Check timer", WDA_TimerHandler,
16819 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 if(status != TX_SUCCESS)
16821 {
16822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16823 "Unable to create Tx Complete Timeout timer");
16824 /* Destroy timer of BA activity check timer */
16825 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16826 if(status != TX_SUCCESS)
16827 {
16828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16829 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016830 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016831 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016832 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016833 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016834
16835 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
16836
16837 /* Traffic Stats timer */
16838 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
16839 "Traffic Stats timer", WDA_TimerHandler,
16840 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
16841 if(status != TX_SUCCESS)
16842 {
16843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16844 "Unable to create traffic stats timer");
16845 /* Destroy timer of BA activity check timer */
16846 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16847 if(status != TX_SUCCESS)
16848 {
16849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16850 "Unable to Destroy BA activity timer");
16851 }
16852 /* Destroy timer of tx complete timer */
16853 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16854 if(status != TX_SUCCESS)
16855 {
16856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16857 "Unable to Tx complete timer");
16858 }
16859 return VOS_STATUS_E_FAILURE ;
16860 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016861 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016862}
Jeff Johnson295189b2012-06-20 16:38:30 -070016863/*
16864 * WDA common routine to destroy timer used by WDA.
16865 */
16866static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16867{
16868 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016869 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16870 if(status != TX_SUCCESS)
16871 {
16872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16873 "Unable to Destroy Tx Complete Timeout timer");
16874 return eSIR_FAILURE ;
16875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016876 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16877 if(status != TX_SUCCESS)
16878 {
16879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16880 "Unable to Destroy BA activity timer");
16881 return eSIR_FAILURE ;
16882 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016883 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16884 if(status != TX_SUCCESS)
16885 {
16886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16887 "Unable to Destroy traffic stats timer");
16888 return eSIR_FAILURE ;
16889 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016890 return eSIR_SUCCESS ;
16891}
Jeff Johnson295189b2012-06-20 16:38:30 -070016892/*
16893 * WDA timer handler.
16894 */
16895void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16896{
16897 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16898 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016899 /*
16900 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16901 */
16902 wdaMsg.type = timerInfo ;
16903 wdaMsg.bodyptr = NULL;
16904 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016905 /* post the message.. */
16906 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16907 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16908 {
16909 vosStatus = VOS_STATUS_E_BADMSG;
16910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016911}
Jeff Johnson295189b2012-06-20 16:38:30 -070016912/*
16913 * WDA Tx Complete timeout Indication.
16914 */
16915void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
16916{
16917 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016918 tpSirTxBdStatus txBdStatus = {0};
16919
Jeff Johnson295189b2012-06-20 16:38:30 -070016920 if( pWDA->pAckTxCbFunc )
16921 {
16922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016923 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016924 /*Indicate failure*/
16925 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016926 pWDA->pAckTxCbFunc = NULL;
16927 }
16928 else
16929 {
16930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016931 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070016932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016933}
Jeff Johnson295189b2012-06-20 16:38:30 -070016934/*
16935 * WDA Set REG Domain to VOS NV
16936 */
Abhishek Singha306a442013-11-07 18:39:01 +053016937eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
16938 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070016939{
Abhishek Singha306a442013-11-07 18:39:01 +053016940 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070016941 {
16942 return eHAL_STATUS_INVALID_PARAMETER;
16943 }
16944 return eHAL_STATUS_SUCCESS;
16945}
Jeff Johnson295189b2012-06-20 16:38:30 -070016946
Jeff Johnson295189b2012-06-20 16:38:30 -070016947#ifdef FEATURE_WLAN_SCAN_PNO
16948/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016949 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016950 *
16951 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016952void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016953{
16954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016955 tSirPNOScanReq *pPNOScanReqParams;
16956
Jeff Johnson295189b2012-06-20 16:38:30 -070016957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016958 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070016959 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070016960 {
16961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016962 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016963 VOS_ASSERT(0) ;
16964 return ;
16965 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016966
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016967 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
16968 if(pPNOScanReqParams->statusCallback)
16969 {
16970 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
16971 (status == WDI_STATUS_SUCCESS) ?
16972 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
16973 }
16974
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053016975 if (pPNOScanReqParams->enable == 1)
16976 {
16977 if (pPNOScanReqParams->aNetworks)
16978 vos_mem_free(pPNOScanReqParams->aNetworks);
16979 if (pPNOScanReqParams->p24GProbeTemplate)
16980 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
16981 if (pPNOScanReqParams->p5GProbeTemplate)
16982 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
16983 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16985 vos_mem_free(pWdaParams->wdaMsgParam);
16986 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016987
16988 return ;
16989}
Jeff Johnson295189b2012-06-20 16:38:30 -070016990/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016991 * FUNCTION: WDA_PNOScanReqCallback
16992 * Free memory.
16993 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
16994 */
16995void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016996{
Yue Ma7f44bbe2013-04-12 11:47:39 -070016997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053016998 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016999
17000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17001 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17002
17003 if(NULL == pWdaParams)
17004 {
17005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17006 "%s: pWdaParams received NULL", __func__);
17007 VOS_ASSERT(0);
17008 return;
17009 }
17010
17011 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17012 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017013 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17014 if(pPNOScanReqParams->statusCallback)
17015 {
17016 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17017 VOS_STATUS_E_FAILURE);
17018 }
17019
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017020 if (pPNOScanReqParams->enable == 1)
17021 {
17022 if (pPNOScanReqParams->aNetworks)
17023 vos_mem_free(pPNOScanReqParams->aNetworks);
17024 if (pPNOScanReqParams->p24GProbeTemplate)
17025 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17026 if (pPNOScanReqParams->p5GProbeTemplate)
17027 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17028 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17030 vos_mem_free(pWdaParams->wdaMsgParam);
17031 vos_mem_free(pWdaParams);
17032 }
17033
17034 return;
17035}
17036/*
17037 * FUNCTION: WDA_UpdateScanParamsRespCallback
17038 *
17039 */
17040void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17041{
17042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017044 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017045 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017046 {
17047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017049 VOS_ASSERT(0) ;
17050 return ;
17051 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017052
17053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17054 vos_mem_free(pWdaParams->wdaMsgParam);
17055 vos_mem_free(pWdaParams);
17056
Jeff Johnson295189b2012-06-20 16:38:30 -070017057 return ;
17058}
Jeff Johnson295189b2012-06-20 16:38:30 -070017059/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017060 * FUNCTION: WDA_UpdateScanParamsReqCallback
17061 * Free memory.
17062 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17063 */
17064void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17065{
17066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17067
17068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17069 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17070
17071 if(NULL == pWdaParams)
17072 {
17073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17074 "%s: pWdaParams received NULL", __func__);
17075 VOS_ASSERT(0);
17076 return;
17077 }
17078
17079 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17080 {
17081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17082 vos_mem_free(pWdaParams->wdaMsgParam);
17083 vos_mem_free(pWdaParams);
17084 }
17085
17086 return;
17087}
17088/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017089 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17090 * Request to WDI to set Preferred Network List.Offload
17091 */
17092VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17093 tSirPNOScanReq *pPNOScanReqParams)
17094{
Jeff Johnson43971f52012-07-17 12:26:56 -070017095 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017096 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17097 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17098 tWDA_ReqParams *pWdaParams ;
17099 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017101 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017102 if(NULL == pwdiPNOScanReqInfo)
17103 {
17104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 VOS_ASSERT(0);
17107 return VOS_STATUS_E_NOMEM;
17108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17110 if(NULL == pWdaParams)
17111 {
17112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017114 VOS_ASSERT(0);
17115 vos_mem_free(pwdiPNOScanReqInfo);
17116 return VOS_STATUS_E_NOMEM;
17117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017118 //
17119 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17120 //
17121 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17122 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017123 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17124 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17125 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017126 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17127 {
17128 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17129 &pPNOScanReqParams->aNetworks[i],
17130 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017132 /*Scan timer intervals*/
17133 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17134 &pPNOScanReqParams->scanTimers,
17135 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017136 /*Probe template for 2.4GHz band*/
17137 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17138 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17139 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017140 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17141 pPNOScanReqParams->p24GProbeTemplate,
17142 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017143 /*Probe template for 5GHz band*/
17144 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17145 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17146 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017147 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17148 pPNOScanReqParams->p5GProbeTemplate,
17149 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017150 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17151 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017152
Jeff Johnson295189b2012-06-20 16:38:30 -070017153 /* Store Params pass it to WDI */
17154 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17155 pWdaParams->pWdaContext = pWDA;
17156 /* Store param pointer as passed in by caller */
17157 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017158 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017159 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017160 if(IS_WDI_STATUS_FAILURE(status))
17161 {
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17163 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017164 if(pPNOScanReqParams->statusCallback)
17165 {
17166 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17167 VOS_STATUS_E_FAILURE);
17168 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017169 if (pPNOScanReqParams->enable == 1)
17170 {
17171 if (pPNOScanReqParams->aNetworks)
17172 vos_mem_free(pPNOScanReqParams->aNetworks);
17173 if (pPNOScanReqParams->p24GProbeTemplate)
17174 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17175 if (pPNOScanReqParams->p5GProbeTemplate)
17176 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17177 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17179 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017180
Jeff Johnson295189b2012-06-20 16:38:30 -070017181 pWdaParams->wdaWdiApiMsgParam = NULL;
17182 pWdaParams->wdaMsgParam = NULL;
17183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017184 return CONVERT_WDI2VOS_STATUS(status) ;
17185}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017186
17187#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17188
17189void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17190{
17191 /*Convert the CSR Auth types to WDI Auth types */
17192 switch (csrAuthType)
17193 {
17194 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17195 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17196 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017197#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017198 case eCSR_AUTH_TYPE_CCKM_WPA:
17199 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17200 break;
17201#endif
17202 case eCSR_AUTH_TYPE_WPA:
17203 *AuthType = eWDA_AUTH_TYPE_WPA;
17204 break;
17205 case eCSR_AUTH_TYPE_WPA_PSK:
17206 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17207 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017208#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017209 case eCSR_AUTH_TYPE_CCKM_RSN:
17210 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17211 break;
17212#endif
17213 case eCSR_AUTH_TYPE_RSN:
17214 *AuthType = eWDA_AUTH_TYPE_RSN;
17215 break;
17216 case eCSR_AUTH_TYPE_RSN_PSK:
17217 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17218 break;
17219#if defined WLAN_FEATURE_VOWIFI_11R
17220 case eCSR_AUTH_TYPE_FT_RSN:
17221 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17222 break;
17223 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17224 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17225 break;
17226#endif
17227#ifdef FEATURE_WLAN_WAPI
17228 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17229 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17230 break;
17231 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17232 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17233 break;
17234#endif /* FEATURE_WLAN_WAPI */
17235 case eCSR_AUTH_TYPE_SHARED_KEY:
17236 case eCSR_AUTH_TYPE_AUTOSWITCH:
17237 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17238 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017239#ifdef WLAN_FEATURE_11W
17240 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17241 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017242 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017243 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17244 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17245 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017246#endif
17247 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017249 "%s: Unknown Auth Type", __func__);
17250 break;
17251 }
17252}
17253void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17254{
17255 switch (csrEncrType)
17256 {
17257 case eCSR_ENCRYPT_TYPE_NONE:
17258 *EncrType = WDI_ED_NONE;
17259 break;
17260 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17261 case eCSR_ENCRYPT_TYPE_WEP40:
17262 *EncrType = WDI_ED_WEP40;
17263 break;
17264 case eCSR_ENCRYPT_TYPE_WEP104:
17265 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17266 *EncrType = WDI_ED_WEP104;
17267 break;
17268 case eCSR_ENCRYPT_TYPE_TKIP:
17269 *EncrType = WDI_ED_TKIP;
17270 break;
17271 case eCSR_ENCRYPT_TYPE_AES:
17272 *EncrType = WDI_ED_CCMP;
17273 break;
17274#ifdef WLAN_FEATURE_11W
17275 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17276 *EncrType = WDI_ED_AES_128_CMAC;
17277 break;
17278#endif
17279#ifdef FEATURE_WLAN_WAPI
17280 case eCSR_ENCRYPT_TYPE_WPI:
17281 *EncrType = WDI_ED_WPI;
17282 break;
17283#endif
17284 case eCSR_ENCRYPT_TYPE_ANY:
17285 *EncrType = WDI_ED_ANY;
17286 break;
17287
17288 default:
17289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17290 "%s: Unknown Encryption Type", __func__);
17291 break;
17292 }
17293}
17294
17295/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017296 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017297 * Request to WDI to set Roam Offload Scan
17298 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017299VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017300 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17301{
17302 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017303 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17304 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017305 tWDA_ReqParams *pWdaParams ;
17306 v_U8_t csrAuthType;
17307 WDI_RoamNetworkType *pwdiRoamNetworkType;
17308 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17310 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017311 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017312 {
17313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17314 "%s: VOS MEM Alloc Failure", __func__);
17315 VOS_ASSERT(0);
17316 return VOS_STATUS_E_NOMEM;
17317 }
17318 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17319 if (NULL == pWdaParams)
17320 {
17321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17322 "%s: VOS MEM Alloc Failure", __func__);
17323 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017324 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017325 return VOS_STATUS_E_NOMEM;
17326 }
17327
17328 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017329 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017330 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017331 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
17332 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017333 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
17334 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
17335 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
17336 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
17337 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
17338 sizeof(pwdiRoamNetworkType->currAPbssid));
17339 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
17340 csrAuthType);
17341 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
17342 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
17343 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
17344 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
17345 pwdiRoamOffloadScanInfo->LookupThreshold =
17346 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080017347 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
17348 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017349 pwdiRoamOffloadScanInfo->RoamRssiDiff =
17350 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080017351 pwdiRoamOffloadScanInfo->MAWCEnabled =
17352 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017353 pwdiRoamOffloadScanInfo->Command =
17354 pRoamOffloadScanReqParams->Command ;
17355 pwdiRoamOffloadScanInfo->StartScanReason =
17356 pRoamOffloadScanReqParams->StartScanReason ;
17357 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
17358 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
17359 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
17360 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
17361 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
17362 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
17363 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
17364 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
17365 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
17366 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017367 pwdiRoamOffloadScanInfo->IsESEEnabled =
17368 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017369 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
17370 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
17371 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
17372 pwdiRoamNetworkType->ssId.ucLength =
17373 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
17374 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
17375 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
17376 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
17377 pwdiRoamNetworkType->ChannelCount =
17378 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
17379 pwdiRoamOffloadScanInfo->ChannelCacheType =
17380 pRoamOffloadScanReqParams->ChannelCacheType;
17381 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
17382 pRoamOffloadScanReqParams->ValidChannelList,
17383 pRoamOffloadScanReqParams->ValidChannelCount);
17384 pwdiRoamOffloadScanInfo->ValidChannelCount =
17385 pRoamOffloadScanReqParams->ValidChannelCount;
17386 pwdiRoamOffloadScanInfo->us24GProbeSize =
17387 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17388 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17389 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
17390 pRoamOffloadScanReqParams->p24GProbeTemplate,
17391 pwdiRoamOffloadScanInfo->us24GProbeSize);
17392 pwdiRoamOffloadScanInfo->us5GProbeSize =
17393 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17394 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17395 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
17396 pRoamOffloadScanReqParams->p5GProbeTemplate,
17397 pwdiRoamOffloadScanInfo->us5GProbeSize);
17398 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
17399 pRoamOffloadScanReqParams->MDID.mdiePresent;
17400 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
17401 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017402 pwdiRoamOffloadScanInfo->nProbes =
17403 pRoamOffloadScanReqParams->nProbes;
17404 pwdiRoamOffloadScanInfo->HomeAwayTime =
17405 pRoamOffloadScanReqParams->HomeAwayTime;
17406 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017407 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017408 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017409 pWdaParams->pWdaContext = pWDA;
17410 /* Store param pointer as passed in by caller */
17411 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017412 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017413 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
17414 if(IS_WDI_STATUS_FAILURE(status))
17415 {
17416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17417 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
17418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17419 vos_mem_free(pWdaParams->wdaMsgParam);
17420 pWdaParams->wdaWdiApiMsgParam = NULL;
17421 pWdaParams->wdaMsgParam = NULL;
17422 }
17423 return CONVERT_WDI2VOS_STATUS(status) ;
17424}
17425#endif
17426
Jeff Johnson295189b2012-06-20 16:38:30 -070017427/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017428 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017429 *
17430 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017431void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017432{
17433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17434
17435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017436 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017437
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017438 if(NULL == pWdaParams)
17439 {
17440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017441 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017442 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017443 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017444 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017445
Jeff Johnson295189b2012-06-20 16:38:30 -070017446 vos_mem_free(pWdaParams->wdaMsgParam) ;
17447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17448 vos_mem_free(pWdaParams) ;
17449
17450 return ;
17451}
17452/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017453 * FUNCTION: WDA_RssiFilterReqCallback
17454 * Free memory.
17455 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
17456 */
17457void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17458{
17459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17460
17461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17462 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17463
17464 if(NULL == pWdaParams)
17465 {
17466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17467 "%s: pWdaParams received NULL", __func__);
17468 VOS_ASSERT(0);
17469 return;
17470 }
17471
17472 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17473 {
17474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17475 vos_mem_free(pWdaParams->wdaMsgParam);
17476 vos_mem_free(pWdaParams);
17477 }
17478
17479 return;
17480}
17481/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053017482 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070017483 * Request to WDI to set Preferred Network List.Offload
17484 */
17485VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
17486 tSirSetRSSIFilterReq* pRssiFilterParams)
17487{
Jeff Johnson43971f52012-07-17 12:26:56 -070017488 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017489 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
17490 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
17491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017494 if(NULL == pwdiSetRssiFilterReqInfo)
17495 {
17496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017498 VOS_ASSERT(0);
17499 return VOS_STATUS_E_NOMEM;
17500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17502 if(NULL == pWdaParams)
17503 {
17504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017506 VOS_ASSERT(0);
17507 vos_mem_free(pwdiSetRssiFilterReqInfo);
17508 return VOS_STATUS_E_NOMEM;
17509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017510 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017511 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
17512 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017513
Jeff Johnson295189b2012-06-20 16:38:30 -070017514 /* Store Params pass it to WDI */
17515 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
17516 pWdaParams->pWdaContext = pWDA;
17517 /* Store param pointer as passed in by caller */
17518 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017519 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017520 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017521 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017522 if(IS_WDI_STATUS_FAILURE(status))
17523 {
17524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17525 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
17526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17527 vos_mem_free(pWdaParams->wdaMsgParam);
17528 pWdaParams->wdaWdiApiMsgParam = NULL;
17529 pWdaParams->wdaMsgParam = NULL;
17530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017531 return CONVERT_WDI2VOS_STATUS(status) ;
17532}
17533
Jeff Johnson295189b2012-06-20 16:38:30 -070017534/*
17535 * FUNCTION: WDA_ProcessUpdateScanParams
17536 * Request to WDI to update Scan Parameters
17537 */
17538VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
17539 tSirUpdateScanParams *pUpdateScanParams)
17540{
Jeff Johnson43971f52012-07-17 12:26:56 -070017541 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017542 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
17543 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
17544 sizeof(WDI_UpdateScanParamsInfoType)) ;
17545 tWDA_ReqParams *pWdaParams ;
17546 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017548 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017549 if(NULL == wdiUpdateScanParamsInfoType)
17550 {
17551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017553 VOS_ASSERT(0);
17554 return VOS_STATUS_E_NOMEM;
17555 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017556 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17557 if ( NULL == pWdaParams )
17558 {
17559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017561 VOS_ASSERT(0);
17562 vos_mem_free(wdiUpdateScanParamsInfoType);
17563 return VOS_STATUS_E_NOMEM;
17564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017565 //
17566 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
17567 //
Jeff Johnson295189b2012-06-20 16:38:30 -070017568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17569 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
17570 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
17571 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080017572 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070017573 pUpdateScanParams->b11dEnabled,
17574 pUpdateScanParams->b11dResolved,
17575 pUpdateScanParams->ucChannelCount,
17576 pUpdateScanParams->usPassiveMinChTime,
17577 pUpdateScanParams->usPassiveMaxChTime,
17578 pUpdateScanParams->usActiveMinChTime,
17579 pUpdateScanParams->usActiveMaxChTime,
17580 sizeof(tSirUpdateScanParams),
17581 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
17582
Jeff Johnson295189b2012-06-20 16:38:30 -070017583 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
17584 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070017585 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
17586 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070017587 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
17588 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070017589 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
17590 pUpdateScanParams->usActiveMaxChTime;
17591 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
17592 pUpdateScanParams->usActiveMinChTime;
17593 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
17594 pUpdateScanParams->usPassiveMaxChTime;
17595 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
17596 pUpdateScanParams->usPassiveMinChTime;
17597
Jeff Johnson295189b2012-06-20 16:38:30 -070017598 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053017599 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
17600 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070017601
Jeff Johnson295189b2012-06-20 16:38:30 -070017602 for ( i = 0; i <
17603 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
17604 i++)
17605 {
17606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17607 "Update Scan Parameters channel: %d",
17608 pUpdateScanParams->aChannels[i]);
17609
17610 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
17611 pUpdateScanParams->aChannels[i];
17612 }
17613
Yue Ma7f44bbe2013-04-12 11:47:39 -070017614 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
17615 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017616
Jeff Johnson295189b2012-06-20 16:38:30 -070017617 /* Store Params pass it to WDI */
17618 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
17619 pWdaParams->pWdaContext = pWDA;
17620 /* Store param pointer as passed in by caller */
17621 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070017622
Jeff Johnson295189b2012-06-20 16:38:30 -070017623
17624
17625 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017626 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017627 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017628 if(IS_WDI_STATUS_FAILURE(status))
17629 {
17630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17631 "Failure in Update Scan Params EQ WDI API, free all the memory " );
17632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17633 vos_mem_free(pWdaParams->wdaMsgParam);
17634 vos_mem_free(pWdaParams);
17635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017636 return CONVERT_WDI2VOS_STATUS(status) ;
17637}
17638#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017639
17640#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17641/*
17642 * FUNCTION: WDA_RoamOffloadScanReqCallback
17643 *
17644 */
17645void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
17646{
17647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017648 vos_msg_t vosMsg;
17649 wpt_uint8 reason = 0;
17650
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070017651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017652 "<------ %s " ,__func__);
17653 if (NULL == pWdaParams)
17654 {
17655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17656 "%s: pWdaParams received NULL", __func__);
17657 VOS_ASSERT(0) ;
17658 return ;
17659 }
17660 if ( pWdaParams != NULL )
17661 {
17662 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
17663 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017664 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17666 }
17667 if ( pWdaParams->wdaMsgParam != NULL)
17668 {
17669 vos_mem_free(pWdaParams->wdaMsgParam);
17670 }
17671
17672 vos_mem_free(pWdaParams) ;
17673 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017674 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
17675 vosMsg.bodyptr = NULL;
17676 if (WDI_STATUS_SUCCESS != status)
17677 {
17678 reason = 0;
17679 }
17680 vosMsg.bodyval = reason;
17681 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17682 {
17683 /* free the mem and return */
17684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070017685 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017686 }
17687
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017688 return ;
17689}
17690#endif
17691
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017692/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017693 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017694 *
17695 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017696void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017697{
17698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17699
17700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17701 "<------ %s " ,__func__);
17702
17703 if(NULL == pWdaParams)
17704 {
17705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17706 "%s: pWdaParams received NULL", __func__);
17707 VOS_ASSERT(0);
17708 return;
17709 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017710
17711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17712 vos_mem_free(pWdaParams->wdaMsgParam);
17713 vos_mem_free(pWdaParams);
17714
17715 return;
17716}
17717/*
17718 * FUNCTION: WDA_SetPowerParamsReqCallback
17719 * Free memory.
17720 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
17721 */
17722void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17723{
17724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17725
17726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17727 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17728
17729 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017730 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070017731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17732 "%s: pWdaParams received NULL", __func__);
17733 VOS_ASSERT(0);
17734 return;
17735 }
17736
17737 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17738 {
17739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17740 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017741 vos_mem_free(pWdaParams);
17742 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017743
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017744 return;
17745}
17746
Jeff Johnson295189b2012-06-20 16:38:30 -070017747#ifdef WLAN_FEATURE_PACKET_FILTERING
17748/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017749 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017750 *
17751 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017752void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017753 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
17754 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017755{
17756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017759 if(NULL == pWdaParams)
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017763 VOS_ASSERT(0) ;
17764 return ;
17765 }
17766
17767 vos_mem_free(pWdaParams->wdaMsgParam) ;
17768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17769 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017770 //print a msg, nothing else to do
17771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017772 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017773 return ;
17774}
Jeff Johnson295189b2012-06-20 16:38:30 -070017775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017776 * FUNCTION: WDA_8023MulticastListReqCallback
17777 * Free memory.
17778 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
17779 */
17780void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
17781{
17782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17783
17784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17785 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17786
17787 if(NULL == pWdaParams)
17788 {
17789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17790 "%s: pWdaParams received NULL", __func__);
17791 VOS_ASSERT(0);
17792 return;
17793 }
17794
17795 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17796 {
17797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17798 vos_mem_free(pWdaParams->wdaMsgParam);
17799 vos_mem_free(pWdaParams);
17800 }
17801
17802 return;
17803}
17804/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017805 * FUNCTION: WDA_Process8023MulticastListReq
17806 * Request to WDI to add 8023 Multicast List
17807 */
17808VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
17809 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
17810{
Jeff Johnson43971f52012-07-17 12:26:56 -070017811 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017812 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
17813 tWDA_ReqParams *pWdaParams ;
17814 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017816 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017817 pwdiFltPktSetMcListReqParamsType =
17818 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
17819 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
17820 ) ;
17821 if(NULL == pwdiFltPktSetMcListReqParamsType)
17822 {
17823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017825 return VOS_STATUS_E_NOMEM;
17826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17828 if(NULL == pWdaParams)
17829 {
17830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
17833 return VOS_STATUS_E_NOMEM;
17834 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017835
Jeff Johnson295189b2012-06-20 16:38:30 -070017836 //
17837 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
17838 //
17839 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070017840 pRcvFltMcAddrList->ulMulticastAddrCnt;
17841
17842 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
17843 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
17844 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
17845 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
17846
Jeff Johnson295189b2012-06-20 16:38:30 -070017847 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
17848 {
17849 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
17850 &(pRcvFltMcAddrList->multicastAddr[i]),
17851 sizeof(tSirMacAddr));
17852 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017853 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
17854 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017855
Jeff Johnson295189b2012-06-20 16:38:30 -070017856 /* Store Params pass it to WDI */
17857 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
17858 pWdaParams->pWdaContext = pWDA;
17859 /* Store param pointer as passed in by caller */
17860 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017861 status = WDI_8023MulticastListReq(
17862 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017863 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017864 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017865 if(IS_WDI_STATUS_FAILURE(status))
17866 {
17867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17868 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17870 vos_mem_free(pWdaParams->wdaMsgParam);
17871 vos_mem_free(pWdaParams);
17872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017873 return CONVERT_WDI2VOS_STATUS(status) ;
17874}
Jeff Johnson295189b2012-06-20 16:38:30 -070017875/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017876 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017877 *
17878 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017879void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017880 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17881 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017882{
17883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017885 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017886 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017887 if(NULL == pWdaParams)
17888 {
17889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017890 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017891 VOS_ASSERT(0) ;
17892 return ;
17893 }
17894
17895 vos_mem_free(pWdaParams->wdaMsgParam) ;
17896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17897 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017898 //print a msg, nothing else to do
17899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017900 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017901 return ;
17902}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017903
17904/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017905 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17906 * Free memory.
17907 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017908 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017909void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017910 void* pUserData)
17911{
17912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17913
17914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17915 "<------ %s, wdiStatus: %d",
17916 __func__, wdiStatus);
17917
17918 if (NULL == pWdaParams)
17919 {
17920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17921 "%s: Invalid pWdaParams pointer", __func__);
17922 VOS_ASSERT(0);
17923 return;
17924 }
17925
17926 if (IS_WDI_STATUS_FAILURE(wdiStatus))
17927 {
17928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17929 vos_mem_free(pWdaParams->wdaMsgParam);
17930 vos_mem_free(pWdaParams);
17931 }
17932
17933 return;
17934}
17935
Jeff Johnson295189b2012-06-20 16:38:30 -070017936/*
17937 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
17938 * Request to WDI to set Receive Filters
17939 */
17940VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
17941 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
17942{
Jeff Johnson43971f52012-07-17 12:26:56 -070017943 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017944 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
17945 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
17946 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
17947 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
17948 tWDA_ReqParams *pWdaParams ;
17949 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017951 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017952 if(NULL == pwdiSetRcvPktFilterReqParamsType)
17953 {
17954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017956 VOS_ASSERT(0);
17957 return VOS_STATUS_E_NOMEM;
17958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17960 if(NULL == pWdaParams)
17961 {
17962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017964 VOS_ASSERT(0);
17965 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
17966 return VOS_STATUS_E_NOMEM;
17967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017968 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
17969 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
17970 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
17971 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070017972 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
17973 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
17974
17975 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
17976 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017977
17978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17979 "FID %d FT %d NParams %d CT %d",
17980 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
17981 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
17982 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
17983 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070017984 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
17985 {
17986 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
17987 &pRcvPktFilterCfg->paramsData[i],
17988 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070017989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017990 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017991 pwdiSetRcvPktFilterReqParamsType->
17992 wdiPktFilterCfg.paramsData[i].protocolLayer,
17993 pwdiSetRcvPktFilterReqParamsType->
17994 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070017995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017996 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070017997 pwdiSetRcvPktFilterReqParamsType->
17998 wdiPktFilterCfg.paramsData[i].dataOffset,
17999 pwdiSetRcvPktFilterReqParamsType->
18000 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018002 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018003 pwdiSetRcvPktFilterReqParamsType->
18004 wdiPktFilterCfg.paramsData[i].compareData[0],
18005 pwdiSetRcvPktFilterReqParamsType->
18006 wdiPktFilterCfg.paramsData[i].compareData[1],
18007 pwdiSetRcvPktFilterReqParamsType->
18008 wdiPktFilterCfg.paramsData[i].compareData[2],
18009 pwdiSetRcvPktFilterReqParamsType->
18010 wdiPktFilterCfg.paramsData[i].compareData[3],
18011 pwdiSetRcvPktFilterReqParamsType->
18012 wdiPktFilterCfg.paramsData[i].compareData[4],
18013 pwdiSetRcvPktFilterReqParamsType->
18014 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018016 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018017 pwdiSetRcvPktFilterReqParamsType->
18018 wdiPktFilterCfg.paramsData[i].dataMask[0],
18019 pwdiSetRcvPktFilterReqParamsType->
18020 wdiPktFilterCfg.paramsData[i].dataMask[1],
18021 pwdiSetRcvPktFilterReqParamsType->
18022 wdiPktFilterCfg.paramsData[i].dataMask[2],
18023 pwdiSetRcvPktFilterReqParamsType->
18024 wdiPktFilterCfg.paramsData[i].dataMask[3],
18025 pwdiSetRcvPktFilterReqParamsType->
18026 wdiPktFilterCfg.paramsData[i].dataMask[4],
18027 pwdiSetRcvPktFilterReqParamsType->
18028 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018029 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018030 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018031 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018032 /* Store Params pass it to WDI */
18033 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18034 pWdaParams->pWdaContext = pWDA;
18035 /* Store param pointer as passed in by caller */
18036 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018037 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018038 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018039 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018040 if(IS_WDI_STATUS_FAILURE(status))
18041 {
18042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18043 "Failure in SetFilter(),free all the memory,status %d ",status);
18044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18045 vos_mem_free(pWdaParams->wdaMsgParam);
18046 vos_mem_free(pWdaParams);
18047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018048 return CONVERT_WDI2VOS_STATUS(status) ;
18049}
Jeff Johnson295189b2012-06-20 16:38:30 -070018050/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018051 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018052 *
18053 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018054void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018055 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18056 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018057{
18058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18059 tWDA_CbContext *pWDA;
18060 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18061 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18062 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18063 tANI_U8 i;
18064 vos_msg_t vosMsg;
18065
18066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018068 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18069
Jeff Johnsone7245742012-09-05 17:12:55 -070018070 if(NULL == pRcvFltPktMatchCntRsp)
18071 {
18072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018073 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018074 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018075 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018076 return ;
18077 }
18078
Jeff Johnson295189b2012-06-20 16:38:30 -070018079 if(NULL == pWdaParams)
18080 {
18081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018082 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018083 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018084 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018085 return ;
18086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018087 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18088 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018089 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18090 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18091
18092 /* Message Header */
18093 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18094 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18095
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018096 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018097
18098 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18099 {
18100 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18101 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018103 /* VOS message wrapper */
18104 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18105 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18106 vosMsg.bodyval = 0;
18107 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18108 {
18109 /* free the mem and return */
18110 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18111 }
18112
18113 vos_mem_free(pWdaParams->wdaMsgParam) ;
18114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18115 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018116
18117 return;
18118}
18119/*
18120 * FUNCTION: WDA_FilterMatchCountReqCallback
18121 * Free memory and send RSP back to SME.
18122 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18123 */
18124void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18125{
18126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18127 vos_msg_t vosMsg;
18128
18129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18130 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18131
18132 if(NULL == pWdaParams)
18133 {
18134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18135 "%s: pWdaParams received NULL", __func__);
18136 VOS_ASSERT(0);
18137 return;
18138 }
18139
18140 /* VOS message wrapper */
18141 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18142 vosMsg.bodyptr = NULL;
18143 vosMsg.bodyval = 0;
18144
18145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18146 {
18147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18148 vos_mem_free(pWdaParams->wdaMsgParam);
18149 vos_mem_free(pWdaParams);
18150 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18151 }
18152
18153 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018154}
Jeff Johnson295189b2012-06-20 16:38:30 -070018155/*
18156 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18157 * Request to WDI to get PC Filter Match Count
18158 */
18159VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18160{
Jeff Johnson43971f52012-07-17 12:26:56 -070018161 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018162 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18163 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18164 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018166 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018167 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18168 {
18169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018171 VOS_ASSERT(0);
18172 return VOS_STATUS_E_NOMEM;
18173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018174 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18175 if(NULL == pWdaParams)
18176 {
18177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018179 VOS_ASSERT(0);
18180 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18181 return VOS_STATUS_E_NOMEM;
18182 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018183
Yue Ma7f44bbe2013-04-12 11:47:39 -070018184 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18185 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018186
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018187 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18188 pRcvFltPktMatchRsp->bssId,
18189 sizeof(wpt_macAddr));
18190
Jeff Johnson295189b2012-06-20 16:38:30 -070018191 /* Store Params pass it to WDI */
18192 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18193 pWdaParams->pWdaContext = pWDA;
18194 /* Store param pointer as passed in by caller */
18195 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018196 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018197 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018198 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018199 if(IS_WDI_STATUS_FAILURE(status))
18200 {
18201 /* failure returned by WDI API */
18202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18203 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18205 vos_mem_free(pWdaParams) ;
18206 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18207 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18208 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018209 return CONVERT_WDI2VOS_STATUS(status) ;
18210}
Jeff Johnson295189b2012-06-20 16:38:30 -070018211/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018212 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018213 *
18214 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018215void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018216 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18217 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018218{
18219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018221 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018222/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18223 if(NULL == pWdaParams)
18224 {
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018227 VOS_ASSERT(0) ;
18228 return ;
18229 }
18230
18231 vos_mem_free(pWdaParams->wdaMsgParam) ;
18232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18233 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018234 //print a msg, nothing else to do
18235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018236 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018237 return ;
18238}
Jeff Johnson295189b2012-06-20 16:38:30 -070018239/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018240 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18241 * Free memory.
18242 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18243 */
18244void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18245{
18246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18247
18248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18249 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18250
18251 if(NULL == pWdaParams)
18252 {
18253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18254 "%s: Invalid pWdaParams pointer", __func__);
18255 VOS_ASSERT(0);
18256 return;
18257 }
18258
18259 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18260 {
18261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18262 vos_mem_free(pWdaParams->wdaMsgParam);
18263 vos_mem_free(pWdaParams);
18264 }
18265
18266 return;
18267}
18268/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018269 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18270 * Request to WDI to clear Receive Filters
18271 */
18272VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18273 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18274{
Jeff Johnson43971f52012-07-17 12:26:56 -070018275 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018276 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18277 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18278 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018280 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018281 if(NULL == pwdiRcvFltPktClearReqParamsType)
18282 {
18283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018285 VOS_ASSERT(0);
18286 return VOS_STATUS_E_NOMEM;
18287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018288 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18289 if(NULL == pWdaParams)
18290 {
18291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018293 VOS_ASSERT(0);
18294 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18295 return VOS_STATUS_E_NOMEM;
18296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018297 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18298 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018299 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18300 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18301 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18302 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018303
Yue Ma7f44bbe2013-04-12 11:47:39 -070018304 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018305 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018306 /* Store Params pass it to WDI */
18307 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18308 pWdaParams->pWdaContext = pWDA;
18309 /* Store param pointer as passed in by caller */
18310 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018311 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018312 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018313 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018314 if(IS_WDI_STATUS_FAILURE(status))
18315 {
18316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18317 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018319 vos_mem_free(pWdaParams->wdaMsgParam);
18320 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018322 return CONVERT_WDI2VOS_STATUS(status) ;
18323}
18324#endif // WLAN_FEATURE_PACKET_FILTERING
18325
Jeff Johnson295189b2012-06-20 16:38:30 -070018326/*
18327 * FUNCTION: WDA_ProcessSetPowerParamsReq
18328 * Request to WDI to set power params
18329 */
18330VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
18331 tSirSetPowerParamsReq *pPowerParams)
18332{
Jeff Johnson43971f52012-07-17 12:26:56 -070018333 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018334 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
18335 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018336 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018338 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018339 if(NULL == pwdiSetPowerParamsReqInfo)
18340 {
18341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018343 VOS_ASSERT(0);
18344 return VOS_STATUS_E_NOMEM;
18345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18347 if(NULL == pWdaParams)
18348 {
18349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018351 VOS_ASSERT(0);
18352 vos_mem_free(pwdiSetPowerParamsReqInfo);
18353 return VOS_STATUS_E_NOMEM;
18354 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018355
Jeff Johnson295189b2012-06-20 16:38:30 -070018356
18357 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
18358 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070018359 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
18360 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070018361 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
18362 pPowerParams->uListenInterval;
18363 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
18364 pPowerParams->uBcastMcastFilter;
18365 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
18366 pPowerParams->uEnableBET;
18367 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
18368 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070018369 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
18370 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018371 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
18372 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018373
Jeff Johnson295189b2012-06-20 16:38:30 -070018374 /* Store Params pass it to WDI */
18375 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
18376 pWdaParams->pWdaContext = pWDA;
18377 /* Store param pointer as passed in by caller */
18378 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018379 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018380 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018381 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018382 if(IS_WDI_STATUS_FAILURE(status))
18383 {
18384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18385 "Failure in Set power params REQ WDI API, free all the memory " );
18386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18387 vos_mem_free(pWdaParams->wdaMsgParam);
18388 pWdaParams->wdaWdiApiMsgParam = NULL;
18389 pWdaParams->wdaMsgParam = NULL;
18390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018391 return CONVERT_WDI2VOS_STATUS(status) ;
18392}
18393
18394/*
18395 * FUNCTION: WDA_SetTmLevelRspCallback
18396 * Set TM Level response
18397 */
18398void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
18399{
18400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18401
18402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018403 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018404
18405 if(NULL == pWdaParams)
18406 {
18407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018408 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018409 VOS_ASSERT(0) ;
18410 return ;
18411 }
18412
18413 /* Dose not need to send notification to upper layer
18414 * Just free allocated resources */
18415 if( pWdaParams != NULL )
18416 {
18417 if( pWdaParams->wdaWdiApiMsgParam != NULL )
18418 {
18419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18420 }
18421 vos_mem_free(pWdaParams->wdaMsgParam) ;
18422 vos_mem_free(pWdaParams) ;
18423 }
18424}
18425
18426/*
18427 * FUNCTION: WDA_ProcessSetTmLevelReq
18428 * Set TM Level request
18429 */
18430VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
18431 tAniSetTmLevelReq *setTmLevelReq)
18432{
18433 WDI_Status status = WDI_STATUS_SUCCESS ;
18434 tWDA_ReqParams *pWdaParams ;
18435 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
18436 (WDI_SetTmLevelReqType *)vos_mem_malloc(
18437 sizeof(WDI_SetTmLevelReqType)) ;
18438 if(NULL == wdiSetTmLevelReq)
18439 {
18440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018442 VOS_ASSERT(0);
18443 return VOS_STATUS_E_NOMEM;
18444 }
18445
18446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18447 if(NULL == pWdaParams)
18448 {
18449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018451 VOS_ASSERT(0);
18452 vos_mem_free(wdiSetTmLevelReq);
18453 return VOS_STATUS_E_NOMEM;
18454 }
18455
18456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018458
18459 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
18460 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
18461
18462 pWdaParams->pWdaContext = pWDA;
18463 pWdaParams->wdaMsgParam = setTmLevelReq;
18464 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
18465
18466 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
18467 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
18468
18469 if(IS_WDI_STATUS_FAILURE(status))
18470 {
18471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080018472 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070018473 vos_mem_free(pWdaParams->wdaMsgParam) ;
18474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18475 vos_mem_free(pWdaParams) ;
18476 }
18477
18478 return CONVERT_WDI2VOS_STATUS(status) ;
18479}
18480
18481VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
18482 tpTxControlParams pTxCtrlParam)
18483{
18484 VOS_STATUS wdaStatus;
18485
18486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018487 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018488 if( pTxCtrlParam == NULL )
18489 {
18490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018491 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018492 return VOS_STATUS_E_FAILURE;
18493 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018494 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
18495 {
18496 wdaStatus = WDA_SuspendDataTx(pWDA);
18497 }
18498 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
18499 {
18500 wdaStatus = WDA_ResumeDataTx(pWDA);
18501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018502 return wdaStatus;
18503}
18504
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018505void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053018506{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018507 WDI_Status status;
18508 status = WDI_FWLoggingDXEdoneInd(logType);
18509
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053018510 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018511 {
18512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18513 FL("Failure status %d"), status);
18514 }
Mihir Shete5affadc2015-05-29 20:54:57 +053018515}
18516
Jeff Johnson295189b2012-06-20 16:38:30 -070018517 /* FUNCTION WDA_featureCapsExchange
18518 * WDA API to invoke capability exchange between host and FW.
18519 */
18520void WDA_featureCapsExchange(v_PVOID_t pVosContext)
18521{
18522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018523 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018524 WDI_featureCapsExchangeReq( NULL, pVosContext);
18525}
18526
Yathish9f22e662012-12-10 14:21:35 -080018527/* FUNCTION WDA_disableCapablityFeature
18528 * WDA API to diable Active mode offload in host.
18529 */
18530void WDA_disableCapablityFeature(tANI_U8 feature_index)
18531{
18532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18533 "%s:enter", __func__ );
18534 WDI_disableCapablityFeature(feature_index);
18535}
18536
Jeff Johnson295189b2012-06-20 16:38:30 -070018537 /* FUNCTION WDA_getHostWlanFeatCaps
18538 * Wrapper for WDI API, that will return if the feature (enum value).passed
18539 * to this API is supported or not in Host
18540 * return value
18541 * 0 - implies feature is NOT Supported
18542 * any non zero value - implies feature is SUPPORTED
18543 */
18544tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
18545{
18546 return WDI_getHostWlanFeatCaps(featEnumValue);
18547}
18548
18549 /* FUNCTION WDA_getFwWlanFeatCaps
18550 * Wrapper for WDI API, that will return if the feature (enum value).passed
18551 * to this API is supported or not in FW
18552 * return value
18553 * 0 - implies feature is NOT Supported
18554 * any non zero value - implies feature is SUPPORTED
18555 */
18556tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
18557{
18558 return WDI_getFwWlanFeatCaps(featEnumValue);
18559}
18560
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053018561
Jeff Johnson295189b2012-06-20 16:38:30 -070018562/*
18563 * FUNCTION: WDA_shutdown
18564 * Shutdown WDA/WDI without handshaking with Riva.
18565 * Synchronous function.
18566 */
18567VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
18568{
18569 WDI_Status wdiStatus;
18570 //tANI_U8 eventIdx = 0;
18571 VOS_STATUS status = VOS_STATUS_SUCCESS;
18572 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070018573 if (NULL == pWDA)
18574 {
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018576 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018577 VOS_ASSERT(0);
18578 return VOS_STATUS_E_FAILURE;
18579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018580 /* FTM mode stay START_STATE */
18581 if( (WDA_READY_STATE != pWDA->wdaState) &&
18582 (WDA_INIT_STATE != pWDA->wdaState) &&
18583 (WDA_START_STATE != pWDA->wdaState) )
18584 {
18585 VOS_ASSERT(0);
18586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018587
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018588 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070018589 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018590 if(VOS_TRUE == pWDA->wdaTimersCreated)
18591 {
18592 wdaDestroyTimers(pWDA);
18593 pWDA->wdaTimersCreated = VOS_FALSE;
18594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018595 }
Leo Chang9d76f622013-08-23 16:34:52 -070018596 else
18597 {
18598 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018599 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018600
Jeff Johnson295189b2012-06-20 16:38:30 -070018601 /* call WDI shutdown */
18602 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070018603 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
18604 {
18605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18606 "error in WDA Stop" );
18607 status = VOS_STATUS_E_FAILURE;
18608 }
18609 /* WDI stop is synchrnous, shutdown is complete when it returns */
18610 pWDA->wdaState = WDA_STOP_STATE;
18611
Jeff Johnson295189b2012-06-20 16:38:30 -070018612 /* shutdown should perform the stop & close actions. */
18613 /* Destroy the event */
18614 status = vos_event_destroy(&pWDA->txFrameEvent);
18615 if(!VOS_IS_STATUS_SUCCESS(status))
18616 {
18617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018618 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018619 status = VOS_STATUS_E_FAILURE;
18620 }
18621 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
18622 if(!VOS_IS_STATUS_SUCCESS(status))
18623 {
18624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018625 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018626 status = VOS_STATUS_E_FAILURE;
18627 }
18628 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
18629 if(!VOS_IS_STATUS_SUCCESS(status))
18630 {
18631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018632 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018633 status = VOS_STATUS_E_FAILURE;
18634 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018635 /* free WDA context */
18636 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
18637 if ( !VOS_IS_STATUS_SUCCESS(status) )
18638 {
18639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18640 "error in WDA close " );
18641 status = VOS_STATUS_E_FAILURE;
18642 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018643 return status;
18644}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018645
Jeff Johnsone7245742012-09-05 17:12:55 -070018646/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018647 * FUNCTION: WDA_setNeedShutdown
18648 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070018649 */
18650
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018651void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070018652{
18653 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018654 if(pWDA == NULL)
18655 {
18656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18657 "Could not get the WDA Context pointer" );
18658 return;
18659 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018660 pWDA->needShutdown = TRUE;
18661}
18662/*
18663 * FUNCTION: WDA_needShutdown
18664 * WDA needs a shutdown
18665 */
18666
18667v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
18668{
18669 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018670 if(pWDA == NULL)
18671 {
18672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18673 "Could not get the WDA Context pointer" );
18674 return 0;
18675 }
18676 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070018677}
18678
Mohit Khanna4a70d262012-09-11 16:30:12 -070018679#ifdef WLAN_FEATURE_11AC
18680/*
18681 * FUNCTION: WDA_SetBeaconFilterReqCallback
18682 *
18683 */
18684void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
18685{
18686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018688 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018689 if(NULL == pWdaParams)
18690 {
18691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018692 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018693 VOS_ASSERT(0) ;
18694 return ;
18695 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018696
Mohit Khanna4a70d262012-09-11 16:30:12 -070018697 vos_mem_free(pWdaParams->wdaMsgParam) ;
18698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18699 vos_mem_free(pWdaParams) ;
18700 /*
18701 * No respone required for SetBeaconFilter req so just free the request
18702 * param here
18703 */
18704
18705 return ;
18706}
18707
18708VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
18709 tUpdateVHTOpMode *pData)
18710{
18711 WDI_Status status = WDI_STATUS_SUCCESS ;
18712 tWDA_ReqParams *pWdaParams ;
18713 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
18714 sizeof(WDI_UpdateVHTOpMode)) ;
18715 if(NULL == wdiTemp)
18716 {
18717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018718 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018719 VOS_ASSERT(0);
18720 return VOS_STATUS_E_NOMEM;
18721 }
18722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18723 if(NULL == pWdaParams)
18724 {
18725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018726 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018727 VOS_ASSERT(0);
18728 vos_mem_free(wdiTemp);
18729 return VOS_STATUS_E_NOMEM;
18730 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053018731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18732 "------> %s Opmode = %d and staid = %d" ,
18733 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018734 wdiTemp->opMode = pData->opMode;
18735 wdiTemp->staId = pData->staId;
18736
18737 pWdaParams->pWdaContext = pWDA;
18738 /* Store Req pointer, as this will be used for response */
18739 pWdaParams->wdaMsgParam = (void *)pData;
18740 /* store Params pass it to WDI */
18741 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
18742
18743 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
18744
18745 if(IS_WDI_STATUS_FAILURE(status))
18746 {
18747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18748 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
18749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18750 vos_mem_free(pWdaParams->wdaMsgParam);
18751 vos_mem_free(pWdaParams);
18752 }
18753 return CONVERT_WDI2VOS_STATUS(status) ;
18754}
18755#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018756
18757/*==========================================================================
18758 FUNCTION WDA_TransportChannelDebug
18759
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070018760 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018761 Display Transport Channel debugging information
18762 User may request to display DXE channel snapshot
18763 Or if host driver detects any abnormal stcuk may display
18764
18765 PARAMETERS
schang6295e542013-03-12 15:31:23 -070018766 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080018767 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053018768 debugFlags : Enable stall detect features
18769 defined by WPAL_DeviceDebugFlags
18770 These features may effect
18771 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018772
18773 RETURN VALUE
18774 NONE
18775
18776===========================================================================*/
18777void WDA_TransportChannelDebug
18778(
schang6295e542013-03-12 15:31:23 -070018779 tpAniSirGlobal pMac,
18780 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053018781 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018782)
18783{
Mihir Shete40a55652014-03-02 14:14:47 +053018784 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018785 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018786}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018787
18788/*==========================================================================
18789 FUNCTION WDA_SetEnableSSR
18790
18791 DESCRIPTION
18792 API to enable/disable SSR on WDI timeout
18793
18794 PARAMETERS
18795 enableSSR : enable/disable SSR
18796
18797 RETURN VALUE
18798 NONE
18799
18800===========================================================================*/
18801void WDA_SetEnableSSR(v_BOOL_t enableSSR)
18802{
18803 WDI_SetEnableSSR(enableSSR);
18804}
Leo Chang9056f462013-08-01 19:21:11 -070018805
18806#ifdef FEATURE_WLAN_LPHB
18807/*
18808 * FUNCTION: WDA_LPHBconfRspCallback
18809 *
18810 */
18811void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
18812{
18813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18814
18815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18816 "<------ %s " ,__func__);
18817 if (NULL == pWdaParams)
18818 {
18819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18820 "%s: pWdaParams received NULL", __func__);
18821 VOS_ASSERT(0) ;
18822 return ;
18823 }
18824
18825 /* Do not need to send notification to upper layer
18826 * Just free allocated resources */
18827 if (pWdaParams != NULL)
18828 {
18829 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18830 {
18831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18832 }
18833 vos_mem_free(pWdaParams->wdaMsgParam) ;
18834 vos_mem_free(pWdaParams) ;
18835 }
18836
18837 return;
18838}
18839
18840/*
18841 * FUNCTION: WDA_ProcessLPHBConfReq
18842 *
18843 */
18844VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
18845 tSirLPHBReq *pData)
18846{
18847 WDI_Status wdiStatus;
18848 tWDA_ReqParams *pWdaParams ;
18849
18850 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18851 "------> %s " , __func__);
18852
18853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18854 if (NULL == pWdaParams)
18855 {
18856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18857 "%s: VOS MEM Alloc Failure", __func__);
18858 VOS_ASSERT(0);
18859 vos_mem_free(pData);
18860 return VOS_STATUS_E_NOMEM;
18861 }
18862
18863 pWdaParams->pWdaContext = pWDA;
18864 pWdaParams->wdaMsgParam = (void *)pData;
18865 pWdaParams->wdaWdiApiMsgParam = NULL;
18866
18867 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18868 if (WDI_STATUS_PENDING == wdiStatus)
18869 {
18870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18871 "Pending received for %s:%d ", __func__, __LINE__);
18872 }
18873 else if (WDI_STATUS_SUCCESS != wdiStatus)
18874 {
18875 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18876 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18877 vos_mem_free(pWdaParams->wdaMsgParam);
18878 vos_mem_free(pWdaParams);
18879 }
18880
18881 return CONVERT_WDI2VOS_STATUS(wdiStatus);
18882}
18883#endif /* FEATURE_WLAN_LPHB */
18884
c_hpothu92367912014-05-01 15:18:17 +053018885void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
18886 void* pUserData)
18887{
18888 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
18889
18890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18891 "<------ %s " ,__func__);
18892 if (NULL == pBcnMissRateInfo)
18893 {
18894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18895 "%s: pWdaParams received NULL", __func__);
18896 VOS_ASSERT(0) ;
18897 return ;
18898 }
18899 if (pBcnMissRateInfo->callback)
18900 {
18901 pBcnMissRateInfo->callback(status, bcnMissRate,
18902 pBcnMissRateInfo->data);
18903 }
18904 vos_mem_free(pUserData);
18905
18906 return;
18907}
18908
18909v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
18910 tSirBcnMissRateReq *pData)
18911{
18912 WDI_Status wdiStatus;
18913 tSirBcnMissRateInfo *pBcnMissRateInfo;
18914
18915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18916 "------> %s " , __func__);
18917
18918 pBcnMissRateInfo =
18919 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
18920 if (NULL == pBcnMissRateInfo)
18921 {
18922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18923 "%s: VOS MEM Alloc Failure", __func__);
18924 VOS_ASSERT(0);
18925 vos_mem_free(pData);
18926 return;
18927 }
18928
18929 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
18930 pBcnMissRateInfo->data = pData->data;
18931
18932 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
18933 WDA_GetBcnMissRateCallback,
18934 pData->bssid);
18935 if (WDI_STATUS_PENDING == wdiStatus)
18936 {
18937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18938 "Pending received for %s:%d ", __func__, __LINE__);
18939 }
18940 else if (WDI_STATUS_SUCCESS != wdiStatus)
18941 {
18942 if (pBcnMissRateInfo->callback)
18943 {
18944 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
18945 -1, pBcnMissRateInfo->data);
18946 }
18947 }
18948 vos_mem_free(pData);
18949}
Dino Mycle41bdc942014-06-10 11:30:24 +053018950
18951#ifdef WLAN_FEATURE_EXTSCAN
18952
18953/*==========================================================================
18954 FUNCTION WDA_EXTScanStartRspCallback
18955
18956 DESCRIPTION
18957 API to send EXTScan Start Response to HDD
18958
18959 PARAMETERS
18960 pEventData: Response from FW
18961 pUserData:
18962===========================================================================*/
18963void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
18964{
18965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18966 tWDA_CbContext *pWDA = NULL;
18967 void *pCallbackContext;
18968 tpAniSirGlobal pMac;
18969
18970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18971 "%s:", __func__);
18972 if (NULL == pWdaParams)
18973 {
18974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18975 "%s: pWdaParams received NULL", __func__);
18976 VOS_ASSERT(0);
18977 return;
18978 }
18979
18980 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18981
18982 if (NULL == pWDA)
18983 {
18984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18985 "%s: pWDA received NULL", __func__);
18986 VOS_ASSERT(0);
18987 goto error;
18988 }
18989
18990 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18991 if (NULL == pMac)
18992 {
18993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18994 "%s:pMac is NULL", __func__);
18995 VOS_ASSERT(0);
18996 goto error;
18997 }
18998
18999 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19000
19001 if (pMac->sme.pEXTScanIndCb)
19002 {
19003 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19004 pEventData);
19005 }
19006 else
19007 {
19008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19009 "%s:HDD callback is null", __func__);
19010 VOS_ASSERT(0);
19011 }
19012
19013error:
19014
19015 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19016 {
19017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19018 }
19019 if (pWdaParams->wdaMsgParam != NULL)
19020 {
19021 vos_mem_free(pWdaParams->wdaMsgParam);
19022 }
19023 vos_mem_free(pWdaParams) ;
19024
19025 return;
19026}
19027
19028/*==========================================================================
19029 FUNCTION WDA_EXTScanStopRspCallback
19030
19031 DESCRIPTION
19032 API to send EXTScan Stop Response to HDD
19033
19034 PARAMETERS
19035 pEventData: Response from FW
19036 pUserData:
19037===========================================================================*/
19038void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19039{
19040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19041 tWDA_CbContext *pWDA = NULL;
19042 void *pCallbackContext;
19043 tpAniSirGlobal pMac;
19044
19045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19046 "%s:", __func__);
19047 if (NULL == pWdaParams)
19048 {
19049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19050 "%s: pWdaParams received NULL", __func__);
19051 VOS_ASSERT(0);
19052 return;
19053 }
19054
19055 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19056
19057 if (NULL == pWDA)
19058 {
19059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19060 "%s: pWDA received NULL", __func__);
19061 VOS_ASSERT(0);
19062 goto error;
19063 }
19064
19065 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19066 if (NULL == pMac)
19067 {
19068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19069 "%s:pMac is NULL", __func__);
19070 VOS_ASSERT(0);
19071 goto error;
19072 }
19073 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19074
19075 if (pMac->sme.pEXTScanIndCb)
19076 {
19077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19078 "%s:HDD call back function called", __func__);
19079 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
19080 pEventData);
19081 }
19082 else
19083 {
19084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19085 "%s:HDD callback is null", __func__);
19086 VOS_ASSERT(0);
19087 }
19088
19089error:
19090
19091 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19092 {
19093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19094 }
19095 if (pWdaParams->wdaMsgParam != NULL)
19096 {
19097 vos_mem_free(pWdaParams->wdaMsgParam);
19098 }
19099 vos_mem_free(pWdaParams) ;
19100
19101
19102 return;
19103}
19104
19105/*==========================================================================
19106 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19107
19108 DESCRIPTION
19109 API to send EXTScan Get Cached Results Response to HDD
19110
19111 PARAMETERS
19112 pEventData: Response from FW
19113 pUserData:
19114===========================================================================*/
19115void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19116{
19117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19118 tWDA_CbContext *pWDA = NULL;
19119 void *pCallbackContext;
19120 tpAniSirGlobal pMac;
19121
19122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19123 "%s: ", __func__);
19124 if (NULL == pWdaParams)
19125 {
19126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19127 "%s: pWdaParams received NULL", __func__);
19128 VOS_ASSERT(0);
19129 return;
19130 }
19131
19132 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19133
19134 if (NULL == pWDA)
19135 {
19136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19137 "%s: pWDA received NULL", __func__);
19138 VOS_ASSERT(0);
19139 goto error;
19140 }
19141
19142 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19143 if (NULL == pMac)
19144 {
19145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19146 "%s:pMac is NULL", __func__);
19147 VOS_ASSERT(0);
19148 goto error;
19149 }
19150
19151 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19152
19153 if (pMac->sme.pEXTScanIndCb)
19154 {
19155 pMac->sme.pEXTScanIndCb(pCallbackContext,
19156 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19157 pEventData);
19158 }
19159 else
19160 {
19161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19162 "%s:HDD callback is null", __func__);
19163 VOS_ASSERT(0);
19164 }
19165
19166
19167error:
19168
19169 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19170 {
19171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19172 }
19173 if (pWdaParams->wdaMsgParam != NULL)
19174 {
19175 vos_mem_free(pWdaParams->wdaMsgParam);
19176 }
19177 vos_mem_free(pWdaParams) ;
19178
19179 return;
19180}
19181
19182/*==========================================================================
19183 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19184
19185 DESCRIPTION
19186 API to send EXTScan Get Capabilities Response to HDD
19187
19188 PARAMETERS
19189 pEventData: Response from FW
19190 pUserData:
19191===========================================================================*/
19192void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19193{
19194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19195 tWDA_CbContext *pWDA = NULL;
19196 void *pCallbackContext;
19197 tpAniSirGlobal pMac;
19198
19199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19200 "%s:", __func__);
19201 if (NULL == pWdaParams)
19202 {
19203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19204 "%s: pWdaParams received NULL", __func__);
19205 VOS_ASSERT(0);
19206 return;
19207 }
19208
19209 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19210
19211 if (NULL == pWDA)
19212 {
19213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19214 "%s: pWDA received NULL", __func__);
19215 VOS_ASSERT(0);
19216 goto error;
19217 }
19218
19219 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19220 if (NULL == pMac)
19221 {
19222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19223 "%s:pMac is NULL", __func__);
19224 VOS_ASSERT(0);
19225 goto error;
19226 }
19227
19228 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19229
19230 if (pMac->sme.pEXTScanIndCb)
19231 {
19232 pMac->sme.pEXTScanIndCb(pCallbackContext,
19233 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19234 pEventData);
19235 }
19236 else
19237 {
19238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19239 "%s:HDD callback is null", __func__);
19240 VOS_ASSERT(0);
19241 }
19242
19243
19244error:
19245
19246 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19247 {
19248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19249 }
19250 if (pWdaParams->wdaMsgParam != NULL)
19251 {
19252 vos_mem_free(pWdaParams->wdaMsgParam);
19253 }
19254 vos_mem_free(pWdaParams) ;
19255
19256 return;
19257}
19258
19259/*==========================================================================
19260 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19261
19262 DESCRIPTION
19263 API to send EXTScan Set BSSID Hotlist Response to HDD
19264
19265 PARAMETERS
19266 pEventData: Response from FW
19267 pUserData:
19268===========================================================================*/
19269void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19270{
19271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19272 tWDA_CbContext *pWDA = NULL;
19273 void *pCallbackContext;
19274 tpAniSirGlobal pMac;
19275
19276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19277 "%s: ", __func__);
19278 if (NULL == pWdaParams)
19279 {
19280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19281 "%s: pWdaParams received NULL", __func__);
19282 VOS_ASSERT(0) ;
19283 return;
19284 }
19285
19286 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19287
19288 if (NULL == pWDA)
19289 {
19290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19291 "%s: pWDA received NULL", __func__);
19292 VOS_ASSERT(0);
19293 goto error;
19294 }
19295
19296 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19297 if (NULL == pMac)
19298 {
19299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19300 "%s:pMac is NULL", __func__);
19301 VOS_ASSERT(0);
19302 goto error;
19303 }
19304
19305 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19306
19307 if (pMac->sme.pEXTScanIndCb)
19308 {
19309 pMac->sme.pEXTScanIndCb(pCallbackContext,
19310 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
19311 pEventData);
19312 }
19313 else
19314 {
19315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19316 "%s:HDD callback is null", __func__);
19317 VOS_ASSERT(0);
19318 }
19319
19320
19321error:
19322
19323 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19324 {
19325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19326 }
19327 if (pWdaParams->wdaMsgParam != NULL)
19328 {
19329 vos_mem_free(pWdaParams->wdaMsgParam);
19330 }
19331 vos_mem_free(pWdaParams) ;
19332
19333 return;
19334}
19335
19336/*==========================================================================
19337 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
19338
19339 DESCRIPTION
19340 API to send EXTScan ReSet BSSID Hotlist Response to HDD
19341
19342 PARAMETERS
19343 pEventData: Response from FW
19344 pUserData:
19345===========================================================================*/
19346void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19347{
19348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19349 tWDA_CbContext *pWDA = NULL;
19350 void *pCallbackContext;
19351 tpAniSirGlobal pMac;
19352
19353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19354 "%s:", __func__);
19355 if (NULL == pWdaParams)
19356 {
19357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19358 "%s: pWdaParams received NULL", __func__);
19359 VOS_ASSERT(0) ;
19360 return;
19361 }
19362
19363 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19364
19365 if (NULL == pWDA)
19366 {
19367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19368 "%s: pWDA received NULL", __func__);
19369 VOS_ASSERT(0);
19370 goto error;
19371 }
19372
19373 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19374 if (NULL == pMac)
19375 {
19376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19377 "%s:pMac is NULL", __func__);
19378 VOS_ASSERT(0);
19379 goto error;
19380 }
19381
19382 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19383
19384 if (pMac->sme.pEXTScanIndCb)
19385 {
19386 pMac->sme.pEXTScanIndCb(pCallbackContext,
19387 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
19388 pEventData);
19389 }
19390 else
19391 {
19392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19393 "%s:HDD callback is null", __func__);
19394 VOS_ASSERT(0);
19395 }
19396
19397
19398error:
19399
19400 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19401 {
19402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19403 }
19404 if (pWdaParams->wdaMsgParam != NULL)
19405 {
19406 vos_mem_free(pWdaParams->wdaMsgParam);
19407 }
19408 vos_mem_free(pWdaParams) ;
19409
19410 return;
19411}
19412
19413/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019414 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
19415
19416 DESCRIPTION
19417 API to send EXTScan Set SSID Hotlist Response to HDD
19418
19419 PARAMETERS
19420 pEventData: Response from FW
19421 pUserData:
19422===========================================================================*/
19423void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19424{
19425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19426 tWDA_CbContext *pWDA = NULL;
19427 void *pCallbackContext;
19428 tpAniSirGlobal pMac;
19429
19430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19431 "%s: ", __func__);
19432 if (NULL == pWdaParams)
19433 {
19434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19435 "%s: pWdaParams received NULL", __func__);
19436 VOS_ASSERT(0) ;
19437 return;
19438 }
19439
19440 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19441
19442 if (NULL == pWDA)
19443 {
19444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19445 "%s: pWDA received NULL", __func__);
19446 VOS_ASSERT(0);
19447 goto error;
19448 }
19449
19450 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19451 if (NULL == pMac)
19452 {
19453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19454 "%s:pMac is NULL", __func__);
19455 VOS_ASSERT(0);
19456 goto error;
19457 }
19458
19459 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19460
19461 if (pMac->sme.pEXTScanIndCb)
19462 {
19463 pMac->sme.pEXTScanIndCb(pCallbackContext,
19464 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
19465 pEventData);
19466 }
19467 else
19468 {
19469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19470 "%s:HDD callback is null", __func__);
19471 VOS_ASSERT(0);
19472 }
19473
19474
19475error:
19476
19477 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19478 {
19479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19480 }
19481 if (pWdaParams->wdaMsgParam != NULL)
19482 {
19483 vos_mem_free(pWdaParams->wdaMsgParam);
19484 }
19485 vos_mem_free(pWdaParams) ;
19486
19487 return;
19488}
19489
19490/*==========================================================================
19491 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
19492
19493 DESCRIPTION
19494 API to send EXTScan ReSet SSID Hotlist Response to HDD
19495
19496 PARAMETERS
19497 pEventData: Response from FW
19498 pUserData:
19499===========================================================================*/
19500void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19501{
19502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19503 tWDA_CbContext *pWDA = NULL;
19504 void *pCallbackContext;
19505 tpAniSirGlobal pMac;
19506
19507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19508 "%s:", __func__);
19509 if (NULL == pWdaParams)
19510 {
19511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19512 "%s: pWdaParams received NULL", __func__);
19513 VOS_ASSERT(0) ;
19514 return;
19515 }
19516
19517 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19518
19519 if (NULL == pWDA)
19520 {
19521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19522 "%s: pWDA received NULL", __func__);
19523 VOS_ASSERT(0);
19524 goto error;
19525 }
19526
19527 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19528 if (NULL == pMac)
19529 {
19530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19531 "%s:pMac is NULL", __func__);
19532 VOS_ASSERT(0);
19533 goto error;
19534 }
19535
19536 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19537
19538 if (pMac->sme.pEXTScanIndCb)
19539 {
19540 pMac->sme.pEXTScanIndCb(pCallbackContext,
19541 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
19542 pEventData);
19543 }
19544 else
19545 {
19546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19547 "%s:HDD callback is null", __func__);
19548 VOS_ASSERT(0);
19549 }
19550
19551
19552error:
19553
19554 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19555 {
19556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19557 }
19558 if (pWdaParams->wdaMsgParam != NULL)
19559 {
19560 vos_mem_free(pWdaParams->wdaMsgParam);
19561 }
19562 vos_mem_free(pWdaParams) ;
19563
19564 return;
19565}
19566
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019567/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053019568 FUNCTION WDA_ProcessEXTScanStartReq
19569
19570 DESCRIPTION
19571 API to send EXTScan Start Request to WDI
19572
19573 PARAMETERS
19574 pWDA: Pointer to WDA context
19575 wdaRequest: Pointer to EXTScan req parameters
19576===========================================================================*/
19577VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
19578 tSirEXTScanStartReqParams *wdaRequest)
19579{
19580 WDI_Status status = WDI_STATUS_SUCCESS;
19581 tWDA_ReqParams *pWdaParams;
19582
19583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19584 "%s: ", __func__);
19585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19586 if (NULL == pWdaParams)
19587 {
19588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19589 "%s: VOS MEM Alloc Failure", __func__);
19590 VOS_ASSERT(0);
19591 return VOS_STATUS_E_NOMEM;
19592 }
19593 pWdaParams->pWdaContext = pWDA;
19594 pWdaParams->wdaMsgParam = wdaRequest;
19595 pWdaParams->wdaWdiApiMsgParam = NULL;
19596
19597 status = WDI_EXTScanStartReq((void *)wdaRequest,
19598 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
19599 (void *)pWdaParams);
19600 if (IS_WDI_STATUS_FAILURE(status))
19601 {
19602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19603 "Failure to request. Free all the memory " );
19604 vos_mem_free(pWdaParams->wdaMsgParam);
19605 vos_mem_free(pWdaParams);
19606 }
19607 return CONVERT_WDI2VOS_STATUS(status);
19608}
19609
19610/*==========================================================================
19611 FUNCTION WDA_ProcessEXTScanStopReq
19612
19613 DESCRIPTION
19614 API to send EXTScan Start Request to WDI
19615
19616 PARAMETERS
19617 pWDA: Pointer to WDA context
19618 wdaRequest: Pointer to EXTScan req parameters
19619===========================================================================*/
19620VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
19621 tSirEXTScanStopReqParams *wdaRequest)
19622{
19623 WDI_Status status = WDI_STATUS_SUCCESS;
19624 tWDA_ReqParams *pWdaParams;
19625
19626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19627 "%s:", __func__);
19628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19629 if (NULL == pWdaParams)
19630 {
19631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19632 "%s: VOS MEM Alloc Failure", __func__);
19633 VOS_ASSERT(0);
19634 return VOS_STATUS_E_NOMEM;
19635 }
19636 pWdaParams->pWdaContext = pWDA;
19637 pWdaParams->wdaMsgParam = wdaRequest;
19638 pWdaParams->wdaWdiApiMsgParam = NULL;
19639
19640 status = WDI_EXTScanStopReq((void *)wdaRequest,
19641 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
19642 (void *)pWdaParams);
19643 if (IS_WDI_STATUS_FAILURE(status))
19644 {
19645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19646 "Failure to request. Free all the memory " );
19647 vos_mem_free(pWdaParams->wdaMsgParam);
19648 vos_mem_free(pWdaParams);
19649 }
19650 return CONVERT_WDI2VOS_STATUS(status);
19651}
19652
19653/*==========================================================================
19654 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
19655
19656 DESCRIPTION
19657 API to send EXTScan Get Cached Results Request to WDI
19658
19659 PARAMETERS
19660 pWDA: Pointer to WDA context
19661 wdaRequest: Pointer to EXTScan req parameters
19662===========================================================================*/
19663VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
19664 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
19665{
19666 WDI_Status status = WDI_STATUS_SUCCESS;
19667 tWDA_ReqParams *pWdaParams;
19668
19669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19670 "%s: ", __func__);
19671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19672 if (NULL == pWdaParams)
19673 {
19674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19675 "%s: VOS MEM Alloc Failure", __func__);
19676 VOS_ASSERT(0);
19677 return VOS_STATUS_E_NOMEM;
19678 }
19679 pWdaParams->pWdaContext = pWDA;
19680 pWdaParams->wdaMsgParam = wdaRequest;
19681 pWdaParams->wdaWdiApiMsgParam = NULL;
19682
19683 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
19684 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
19685 (void *)pWdaParams);
19686 if (IS_WDI_STATUS_FAILURE(status))
19687 {
19688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19689 "Failure to request. Free all the memory " );
19690 vos_mem_free(pWdaParams->wdaMsgParam);
19691 vos_mem_free(pWdaParams);
19692 }
19693 return CONVERT_WDI2VOS_STATUS(status);
19694}
19695
19696/*==========================================================================
19697 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
19698
19699 DESCRIPTION
19700 API to send EXTScan Get Capabilities Request to WDI
19701
19702 PARAMETERS
19703 pWDA: Pointer to WDA context
19704 wdaRequest: Pointer to EXTScan req parameters
19705===========================================================================*/
19706VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
19707 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
19708{
19709 WDI_Status status = WDI_STATUS_SUCCESS;
19710 tWDA_ReqParams *pWdaParams;
19711
19712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19713 "%s:", __func__);
19714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19715 if (NULL == pWdaParams)
19716 {
19717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19718 "%s: VOS MEM Alloc Failure", __func__);
19719 VOS_ASSERT(0);
19720 return VOS_STATUS_E_NOMEM;
19721 }
19722 pWdaParams->pWdaContext = pWDA;
19723 pWdaParams->wdaMsgParam = wdaRequest;
19724 pWdaParams->wdaWdiApiMsgParam = NULL;
19725
19726 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
19727 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
19728 (void *)pWdaParams);
19729 if (IS_WDI_STATUS_FAILURE(status))
19730 {
19731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19732 "Failure to request. Free all the memory " );
19733 vos_mem_free(pWdaParams->wdaMsgParam);
19734 vos_mem_free(pWdaParams);
19735 }
19736 return CONVERT_WDI2VOS_STATUS(status);
19737}
19738
19739/*==========================================================================
19740 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
19741
19742 DESCRIPTION
19743 API to send Set BSSID Hotlist Request to WDI
19744
19745 PARAMETERS
19746 pWDA: Pointer to WDA context
19747 wdaRequest: Pointer to EXTScan req parameters
19748===========================================================================*/
19749VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19750 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
19751{
19752 WDI_Status status = WDI_STATUS_SUCCESS;
19753 tWDA_ReqParams *pWdaParams;
19754
19755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19756 "%s: ", __func__);
19757 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19758 if (NULL == pWdaParams)
19759 {
19760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19761 "%s: VOS MEM Alloc Failure", __func__);
19762 VOS_ASSERT(0);
19763 return VOS_STATUS_E_NOMEM;
19764 }
19765 pWdaParams->pWdaContext = pWDA;
19766 pWdaParams->wdaMsgParam = wdaRequest;
19767 pWdaParams->wdaWdiApiMsgParam = NULL;
19768
19769 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
19770 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
19771 (void *)pWdaParams);
19772 if (IS_WDI_STATUS_FAILURE(status))
19773 {
19774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19775 "Failure to request. Free all the memory " );
19776 vos_mem_free(pWdaParams->wdaMsgParam);
19777 vos_mem_free(pWdaParams);
19778 }
19779 return CONVERT_WDI2VOS_STATUS(status);
19780}
19781
19782/*==========================================================================
19783 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
19784
19785 DESCRIPTION
19786 API to send Reset BSSID Hotlist Request to WDI
19787
19788 PARAMETERS
19789 pWDA: Pointer to WDA context
19790 wdaRequest: Pointer to EXTScan req parameters
19791===========================================================================*/
19792VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19793 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
19794{
19795 WDI_Status status = WDI_STATUS_SUCCESS;
19796 tWDA_ReqParams *pWdaParams;
19797
19798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19799 "%s:", __func__);
19800 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19801 if (NULL == pWdaParams)
19802 {
19803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19804 "%s: VOS MEM Alloc Failure", __func__);
19805 VOS_ASSERT(0);
19806 return VOS_STATUS_E_NOMEM;
19807 }
19808 pWdaParams->pWdaContext = pWDA;
19809 pWdaParams->wdaMsgParam = wdaRequest;
19810 pWdaParams->wdaWdiApiMsgParam = NULL;
19811
19812 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
19813 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
19814 (void *)pWdaParams);
19815 if (IS_WDI_STATUS_FAILURE(status))
19816 {
19817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19818 "Failure to request. Free all the memory " );
19819 vos_mem_free(pWdaParams->wdaMsgParam);
19820 vos_mem_free(pWdaParams);
19821 }
19822 return CONVERT_WDI2VOS_STATUS(status);
19823}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019824
19825/*==========================================================================
19826 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
19827
19828 DESCRIPTION
19829 API to send Set SSID Hotlist Request to WDI
19830
19831 PARAMETERS
19832 pWDA: Pointer to WDA context
19833 wdaRequest: Pointer to EXTScan req parameters
19834===========================================================================*/
19835VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
19836 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
19837{
19838 WDI_Status status = WDI_STATUS_SUCCESS;
19839 tWDA_ReqParams *pWdaParams;
19840
19841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19842 "%s: ", __func__);
19843 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19844 if (NULL == pWdaParams)
19845 {
19846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19847 "%s: VOS MEM Alloc Failure", __func__);
19848 VOS_ASSERT(0);
19849 return VOS_STATUS_E_NOMEM;
19850 }
19851 pWdaParams->pWdaContext = pWDA;
19852 pWdaParams->wdaMsgParam = wdaRequest;
19853 pWdaParams->wdaWdiApiMsgParam = NULL;
19854
19855 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
19856 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19857 (void *)pWdaParams);
19858 if (IS_WDI_STATUS_FAILURE(status))
19859 {
19860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19861 "Failure to request. Free all the memory " );
19862 vos_mem_free(pWdaParams->wdaMsgParam);
19863 vos_mem_free(pWdaParams);
19864 }
19865 return CONVERT_WDI2VOS_STATUS(status);
19866}
19867
19868/*==========================================================================
19869 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19870
19871 DESCRIPTION
19872 API to send Reset SSID Hotlist Request to WDI
19873
19874 PARAMETERS
19875 pWDA: Pointer to WDA context
19876 wdaRequest: Pointer to EXTScan req parameters
19877===========================================================================*/
19878VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
19879 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
19880{
19881 WDI_Status status = WDI_STATUS_SUCCESS;
19882 tWDA_ReqParams *pWdaParams;
19883
19884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19885 "%s:", __func__);
19886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19887 if (NULL == pWdaParams)
19888 {
19889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19890 "%s: VOS MEM Alloc Failure", __func__);
19891 VOS_ASSERT(0);
19892 return VOS_STATUS_E_NOMEM;
19893 }
19894 pWdaParams->pWdaContext = pWDA;
19895 pWdaParams->wdaMsgParam = wdaRequest;
19896 pWdaParams->wdaWdiApiMsgParam = NULL;
19897
19898 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
19899 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
19900 (void *)pWdaParams);
19901 if (IS_WDI_STATUS_FAILURE(status))
19902 {
19903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19904 "Failure to request. Free all the memory " );
19905 vos_mem_free(pWdaParams->wdaMsgParam);
19906 vos_mem_free(pWdaParams);
19907 }
19908 return CONVERT_WDI2VOS_STATUS(status);
19909}
19910
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053019911/*==========================================================================
19912 FUNCTION WDA_ProcessHighPriorityDataInfoInd
19913
19914 DESCRIPTION
19915 API to send Reset SSID Hotlist Request to WDI
19916
19917 PARAMETERS
19918 pWDA: Pointer to WDA context
19919 wdaRequest: Pointer to EXTScan req parameters
19920===========================================================================*/
19921VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
19922 tSirHighPriorityDataInfoInd *wdaRequest)
19923{
19924 WDI_Status status = WDI_STATUS_SUCCESS;
19925
19926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19927 "%s:", __func__);
19928
19929 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
19930 if (WDI_STATUS_PENDING == status)
19931 {
19932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19933 FL("pending status received "));
19934 }
19935 else if (WDI_STATUS_SUCCESS_SYNC != status)
19936 {
19937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19938 FL("Failure status %d"), status);
19939 }
19940 return CONVERT_WDI2VOS_STATUS(status);
19941}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019942
Dino Mycle41bdc942014-06-10 11:30:24 +053019943#endif /* WLAN_FEATURE_EXTSCAN */
19944
Sunil Duttbd736ed2014-05-26 21:19:41 +053019945#ifdef WLAN_FEATURE_LINK_LAYER_STATS
19946
19947/*==========================================================================
19948 FUNCTION WDA_LLStatsSetRspCallback
19949
19950 DESCRIPTION
19951 API to process set link layer statistics response from FW
19952
19953 PARAMETERS
19954 pRsp: Pointer to set link layer statistics response
19955 pUserData: Pointer to user data
19956
19957 RETURN VALUE
19958 NONE
19959
19960===========================================================================*/
19961void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
19962{
19963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19964
19965
19966 if (NULL == pWdaParams)
19967 {
19968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19969 "%s: pWdaParams received NULL", __func__);
19970 VOS_ASSERT(0) ;
19971 return ;
19972 }
19973
19974 /* Do not need to send notification to upper layer
19975 * Just free allocated resources */
19976 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19977 {
19978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19979 }
19980 if (pWdaParams->wdaMsgParam != NULL)
19981 {
19982 vos_mem_free(pWdaParams->wdaMsgParam);
19983 }
19984 vos_mem_free(pWdaParams) ;
19985
19986 return;
19987}
19988
19989/*==========================================================================
19990 FUNCTION WDA_ProcessLLStatsSetReq
19991
19992 DESCRIPTION
19993 API to send Set Link Layer Stats request to WDI
19994
19995 PARAMETERS
19996 pWDA: Pointer to WDA context
19997 wdaRequest: Pointer to set Link Layer Stats req parameters
19998===========================================================================*/
19999VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20000 tSirLLStatsSetReq *wdaRequest)
20001{
20002 WDI_Status status = WDI_STATUS_SUCCESS;
20003 tWDA_ReqParams *pWdaParams;
20004
20005 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20006 if (NULL == pWdaParams)
20007 {
20008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20009 "%s: VOS MEM Alloc Failure", __func__);
20010 VOS_ASSERT(0);
20011 return VOS_STATUS_E_NOMEM;
20012 }
20013 pWdaParams->pWdaContext = pWDA;
20014 pWdaParams->wdaMsgParam = wdaRequest;
20015 pWdaParams->wdaWdiApiMsgParam = NULL;
20016
20017 status = WDI_LLStatsSetReq((void *)wdaRequest,
20018 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20019 (void *)pWdaParams);
20020 if (IS_WDI_STATUS_FAILURE(status))
20021 {
20022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20023 "Failure to request. Free all the memory " );
20024 vos_mem_free(pWdaParams->wdaMsgParam);
20025 vos_mem_free(pWdaParams);
20026 }
20027 return CONVERT_WDI2VOS_STATUS(status);
20028}
20029
20030/*==========================================================================
20031 FUNCTION WDA_LLStatsGetRspCallback
20032
20033 DESCRIPTION
20034 API to process get link layer statistics response from FW
20035
20036 PARAMETERS
20037 pRsp: Pointer to get link layer statistics response
20038 pUserData: Pointer to user data
20039
20040 RETURN VALUE
20041 NONE
20042
20043===========================================================================*/
20044void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20045{
20046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20047
20048 if (NULL == pWdaParams)
20049 {
20050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20051 "%s: pWdaParams received NULL", __func__);
20052 VOS_ASSERT(0) ;
20053 return ;
20054 }
20055
20056 /* Do not need to send notification to upper layer
20057 * Just free allocated resources */
20058 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20059 {
20060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20061 }
20062 if (pWdaParams->wdaMsgParam != NULL)
20063 {
20064 vos_mem_free(pWdaParams->wdaMsgParam);
20065 }
20066 vos_mem_free(pWdaParams) ;
20067
20068 return;
20069}
20070
20071/*==========================================================================
20072 FUNCTION WDA_ProcessLLStatsGetReq
20073
20074 DESCRIPTION
20075 API to send Get Link Layer Stats request to WDI
20076
20077 PARAMETERS
20078 pWDA: Pointer to WDA context
20079 wdaRequest: Pointer to get Link Layer Stats req parameters
20080===========================================================================*/
20081VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20082 tSirLLStatsGetReq *wdaRequest)
20083{
20084 WDI_Status status = WDI_STATUS_SUCCESS;
20085 tWDA_ReqParams *pWdaParams;
20086
20087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20088 if (NULL == pWdaParams)
20089 {
20090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20091 "%s: VOS MEM Alloc Failure", __func__);
20092 VOS_ASSERT(0);
20093 return VOS_STATUS_E_NOMEM;
20094 }
20095 pWdaParams->pWdaContext = pWDA;
20096 pWdaParams->wdaMsgParam = wdaRequest;
20097 pWdaParams->wdaWdiApiMsgParam = NULL;
20098
20099 status = WDI_LLStatsGetReq((void *) wdaRequest,
20100 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20101 (void *)pWdaParams);
20102 if (IS_WDI_STATUS_FAILURE(status))
20103 {
20104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20105 "Failure to request. Free all the memory " );
20106 vos_mem_free(pWdaParams->wdaMsgParam);
20107 vos_mem_free(pWdaParams);
20108 }
20109 return CONVERT_WDI2VOS_STATUS(status);
20110}
20111
20112/*==========================================================================
20113 FUNCTION WDA_LLStatsClearRspCallback
20114
20115 DESCRIPTION
20116 API to process clear link layer statistics response from FW
20117
20118 PARAMETERS
20119 pRsp: Pointer to clear link layer statistics response
20120 pUserData: Pointer to user data
20121
20122 RETURN VALUE
20123 NONE
20124
20125===========================================================================*/
20126void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20127{
20128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20129
20130
20131 if (NULL == pWdaParams)
20132 {
20133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20134 "%s: pWdaParams received NULL", __func__);
20135 VOS_ASSERT(0) ;
20136 return ;
20137 }
20138 /* Do not need to send notification to upper layer
20139 * Just free allocated resources */
20140 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20141 {
20142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20143 }
20144 if (pWdaParams->wdaMsgParam != NULL)
20145 {
20146 vos_mem_free(pWdaParams->wdaMsgParam);
20147 }
20148 vos_mem_free(pWdaParams) ;
20149 return;
20150}
20151
20152/*==========================================================================
20153 FUNCTION WDA_ProcessLLStatsClearReq
20154
20155 DESCRIPTION
20156 API to send Clear Link Layer Stats request to WDI
20157
20158 PARAMETERS
20159 pWDA: Pointer to WDA context
20160 wdaRequest: Pointer to earLink Layer Stats req
20161===========================================================================*/
20162VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20163 tSirLLStatsClearReq *wdaRequest)
20164{
20165 WDI_Status status = WDI_STATUS_SUCCESS;
20166 tWDA_ReqParams *pWdaParams;
20167
20168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20169 if (NULL == pWdaParams)
20170 {
20171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20172 "%s: VOS MEM Alloc Failure", __func__);
20173 VOS_ASSERT(0);
20174 return VOS_STATUS_E_NOMEM;
20175 }
20176 pWdaParams->pWdaContext = pWDA;
20177 pWdaParams->wdaMsgParam = wdaRequest;
20178 pWdaParams->wdaWdiApiMsgParam = NULL;
20179
20180 status = WDI_LLStatsClearReq((void *) wdaRequest,
20181 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20182 (void *)pWdaParams);
20183 if (IS_WDI_STATUS_FAILURE(status))
20184 {
20185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20186 "Failure to request. Free all the memory " );
20187 vos_mem_free(pWdaParams->wdaMsgParam);
20188 vos_mem_free(pWdaParams);
20189 }
20190 return CONVERT_WDI2VOS_STATUS(status);
20191}
20192
20193#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020194
Abhishek Singh85b74712014-10-08 11:38:19 +053020195void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20196{
20197 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20198
20199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20200 "<------ %s " ,__func__);
20201 if (NULL == fwStatsinfo)
20202 {
20203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20204 "%s: pWdaParams received NULL", __func__);
20205 VOS_ASSERT(0);
20206 return;
20207 }
20208
20209 if(fwStatsinfo->callback)
20210 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20211
20212 vos_mem_free(pUserData);
20213 return;
20214}
20215
20216
20217v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20218 tSirFWStatsGetReq *pData)
20219{
20220
20221 WDI_Status wdiStatus;
20222 tSirFWStatsInfo *fwStatsinfo;
20223
20224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20225 "------> %s" , __func__);
20226
20227 fwStatsinfo =
20228 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20229 if (NULL == fwStatsinfo)
20230 {
20231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20232 "%s: VOS MEM Alloc Failure", __func__);
20233 VOS_ASSERT(0);
20234 vos_mem_free(pData);
20235 return;
20236 }
20237
20238 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20239 fwStatsinfo->data = pData->data;
20240
20241 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20242 WDA_FWStatsGetRspCallback,
20243 pData->stats);
20244 if (WDI_STATUS_PENDING == wdiStatus)
20245 {
20246 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20247 "Pending received for %s:%d ", __func__, __LINE__);
20248 }
20249 else if (WDI_STATUS_SUCCESS != wdiStatus)
20250 {
20251 if (fwStatsinfo->callback)
20252 {
20253 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20254 }
20255 vos_mem_free(fwStatsinfo);
20256 }
20257 vos_mem_free(pData);
20258}
20259
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020260/*==========================================================================
20261 FUNCTION WDA_EncryptMsgRspCallback
20262
20263 DESCRIPTION
20264 API to send Encrypt message response to HDD
20265
20266 PARAMETERS
20267 pEventData: Response from FW
20268 pUserData: Data sent to firmware as part of request
20269===========================================================================*/
20270void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20271 void* pUserData)
20272{
20273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20274 tWDA_CbContext *pWDA = NULL;
20275 tpAniSirGlobal pMac;
20276 vos_msg_t vosMsg;
20277 tpSirEncryptedDataRspParams pEncRspParams;
20278 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20279
20280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20281 FL("%s:"), __func__);
20282 if (NULL == pWdaParams)
20283 {
20284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20285 FL("%s: pWdaParams received NULL"), __func__);
20286 VOS_ASSERT(0);
20287 return;
20288 }
20289
20290 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20291
20292 if (NULL == pWDA)
20293 {
20294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20295 FL("%s: pWDA received NULL"), __func__);
20296 VOS_ASSERT(0);
20297 goto error;
20298 }
20299
20300 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20301 if (NULL == pMac)
20302 {
20303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20304 FL("%s:pMac is NULL"), __func__);
20305 VOS_ASSERT(0);
20306 goto error;
20307 }
20308
20309 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
20310
20311 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
20312 if (NULL == pEncRspParams)
20313 {
20314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20315 FL("%s: VOS MEM Alloc Failure"), __func__);
20316 VOS_ASSERT(0);
20317 goto error;
20318 }
20319
20320 /* Message Header */
20321 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
20322 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
20323 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
20324 pEncryptedDataRsp->encryptedPayload.length;
20325 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
20326 pEncryptedDataRsp->encryptedPayload.data,
20327 pEncryptedDataRsp->encryptedPayload.length);
20328
20329 /* VOS message wrapper */
20330 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
20331 vosMsg.bodyptr = (void *)pEncRspParams;
20332 vosMsg.bodyval = 0;
20333
20334 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20335 {
20336 /* free the mem */
20337 vos_mem_free((v_VOID_t *) pEncRspParams);
20338 }
20339
20340error:
20341
20342 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20343 {
20344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20345 }
20346 if (pWdaParams->wdaMsgParam != NULL)
20347 {
20348 vos_mem_free(pWdaParams->wdaMsgParam);
20349 }
20350 vos_mem_free(pWdaParams) ;
20351
20352 return;
20353}
20354/*==========================================================================
20355 FUNCTION WDA_ProcessEncryptMsgReq
20356
20357 DESCRIPTION
20358 API to send Encrypt message Request to WDI
20359
20360 PARAMETERS
20361 pWDA: Pointer to WDA context
20362 wdaRequest: Pointer to Encrypt_msg req parameters
20363===========================================================================*/
20364VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
20365 u8 *wdaRequest)
20366{
20367 WDI_Status status = WDI_STATUS_SUCCESS;
20368 tWDA_ReqParams *pWdaParams;
20369
20370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20371 FL("%s: "), __func__);
20372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20373 if (NULL == pWdaParams)
20374 {
20375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20376 FL("%s: VOS MEM Alloc Failure"), __func__);
20377 VOS_ASSERT(0);
20378 return VOS_STATUS_E_NOMEM;
20379 }
20380 pWdaParams->pWdaContext = pWDA;
20381 pWdaParams->wdaMsgParam = wdaRequest;
20382 pWdaParams->wdaWdiApiMsgParam = NULL;
20383
20384 status = WDI_EncryptMsgReq((void *)wdaRequest,
20385 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
20386 (void *)pWdaParams);
20387 if (IS_WDI_STATUS_FAILURE(status))
20388 {
20389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20390 FL("Failure to request. Free all the memory " ));
20391 vos_mem_free(pWdaParams->wdaMsgParam);
20392 vos_mem_free(pWdaParams);
20393 }
20394 return CONVERT_WDI2VOS_STATUS(status);
20395}
Abhishek Singh41988ba2015-05-25 19:42:29 +053020396/*==========================================================================
20397 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
20398
20399 DESCRIPTION
20400 API to enable/disable RTS/CTS for different modes.
20401
20402 PARAMETERS
20403 pWDA: Pointer to WDA context
20404 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
20405===========================================================================*/
20406
20407VOS_STATUS
20408WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
20409 tANI_U32 rtsCtsVal)
20410{
20411 WDI_Status status;
20412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20413 FL("---> %s"), __func__);
20414 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
20415 if (WDI_STATUS_PENDING == status)
20416 {
20417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20418 FL("pending status received "));
20419 }
20420 else if (WDI_STATUS_SUCCESS_SYNC != status)
20421 {
20422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20423 FL("Failure status %d"), status);
20424 }
20425 return CONVERT_WDI2VOS_STATUS(status) ;
20426}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020427
20428void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053020429{
20430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020431 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053020432
20433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20434 "<------ %s " ,__func__);
20435 if (NULL == pWdaParams)
20436 {
20437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20438 "%s: pWdaParams received NULL", __func__);
20439 VOS_ASSERT(0) ;
20440 return ;
20441 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020442 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
20443 if (pData != NULL) {
20444 pData->callback(pData->magic, pData->cmpVar);
20445 vos_mem_free(pWdaParams->wdaMsgParam);
20446 }
Katya Nigamf0511f62015-05-05 16:40:57 +053020447 vos_mem_free(pWdaParams) ;
20448
20449 return;
20450}
20451
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020452VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053020453{
20454
20455 WDI_Status status = WDI_STATUS_SUCCESS;
20456 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020457 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053020458
20459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20460 FL("%s: "), __func__);
20461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20462 if (NULL == pWdaParams)
20463 {
20464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20465 FL("%s: VOS MEM Alloc Failure"), __func__);
20466 VOS_ASSERT(0);
20467 return VOS_STATUS_E_NOMEM;
20468 }
20469 pWdaParams->pWdaContext = pWDA;
20470 pWdaParams->wdaMsgParam = wdaRequest;
20471 pWdaParams->wdaWdiApiMsgParam = NULL;
20472
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020473 status = WDI_MonStartReq(pMonModeData->data,
20474 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020475 (void *)pWdaParams);
20476 if (IS_WDI_STATUS_FAILURE(status))
20477 {
20478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20479 "Failure to request. Free all the memory " );
20480 vos_mem_free(pWdaParams->wdaMsgParam);
20481 vos_mem_free(pWdaParams);
20482 }
20483 return CONVERT_WDI2VOS_STATUS(status);
20484}
20485
Katya Nigamf0511f62015-05-05 16:40:57 +053020486VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
20487{
20488
20489 WDI_Status status = WDI_STATUS_SUCCESS;
20490 tWDA_ReqParams *pWdaParams;
20491
20492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20493 FL("%s: "), __func__);
20494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20495 if (NULL == pWdaParams)
20496 {
20497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20498 FL("%s: VOS MEM Alloc Failure"), __func__);
20499 VOS_ASSERT(0);
20500 return VOS_STATUS_E_NOMEM;
20501 }
20502 pWdaParams->pWdaContext = pWDA;
20503 pWdaParams->wdaMsgParam = wdaRequest;
20504 pWdaParams->wdaWdiApiMsgParam = NULL;
20505
Bhargav Shah1ae5de02015-07-20 13:32:31 +053020506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20507 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020508 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020509 (void *)pWdaParams);
20510
20511 if (IS_WDI_STATUS_FAILURE(status))
20512 {
20513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20514 "Failure to request. Free all the memory " );
20515 vos_mem_free(pWdaParams->wdaMsgParam);
20516 vos_mem_free(pWdaParams);
20517 }
20518 return CONVERT_WDI2VOS_STATUS(status);
20519}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053020520
20521VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
20522{
20523 WDI_Status status;
20524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20525 FL("---> %s"), __func__);
20526 status = WDI_EnableDisableCAEventInd(val);
20527 if (WDI_STATUS_PENDING == status)
20528 {
20529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20530 FL("pending status received "));
20531 }
20532 else if (WDI_STATUS_SUCCESS_SYNC != status)
20533 {
20534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20535 FL("Failure status %d"), status);
20536 }
20537 return CONVERT_WDI2VOS_STATUS(status) ;
20538}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020539
20540/*==========================================================================
20541 FUNCTION WDA_WifiConfigSetRspCallback
20542
20543 DESCRIPTION
20544 API to process set WifiConfig response from FW
20545
20546 PARAMETERS
20547 pRsp: Pointer to set WifiConfig response
20548 pUserData: Pointer to user data
20549
20550 RETURN VALUE
20551 NONE
20552
20553===========================================================================*/
20554void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
20555{
20556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20557
20558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20559 "<------ %s " ,__func__);
20560
20561 if(NULL == pWdaParams)
20562 {
20563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20564 "%s: pWdaParams received NULL", __func__);
20565 VOS_ASSERT(0);
20566 return ;
20567 }
20568
20569 if(NULL == pWdaParams->wdaMsgParam)
20570 {
20571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20572 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
20573 VOS_ASSERT(0);
20574 vos_mem_free(pWdaParams);
20575 return ;
20576 }
20577
20578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20579 vos_mem_free(pWdaParams->wdaMsgParam);
20580 vos_mem_free(pWdaParams);
20581
20582 return;
20583}
20584
20585/*==========================================================================
20586 FUNCTION WDA_ProcessWifiConfigReq
20587
20588 DESCRIPTION
20589 API to send Set WifiConfig params request to WDI
20590
20591 PARAMETERS
20592 pWDA: Pointer to WDA context
20593 wdaRequest: Pointer to set WifiConfig req parameters
20594===========================================================================*/
20595
20596VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
20597 tSetWifiConfigParams *pwdaWificonfig)
20598{
20599 WDI_Status status = WDI_STATUS_SUCCESS;
20600 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
20601 tWDA_ReqParams *pWdaParams ;
20602 WDI_Status wstatus;
20603
20604 /* Sanity Check*/
20605 if(NULL == pwdaWificonfig)
20606 {
20607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20608 "%s: tSetWifiConfigParams received NULL", __func__);
20609 VOS_ASSERT(0) ;
20610 return VOS_STATUS_E_FAULT;
20611 }
20612
20613 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
20614 sizeof(WDI_WifiConfigSetReqType));
20615 if(NULL == pwdiWifConfigSetReqParams)
20616 {
20617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20618 "%s: VOS MEM Alloc Failure", __func__);
20619 VOS_ASSERT(0);
20620 vos_mem_free(pwdaWificonfig);
20621 return VOS_STATUS_E_NOMEM;
20622 }
20623
20624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20625 if(NULL == pWdaParams)
20626 {
20627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20628 "%s: VOS MEM Alloc Failure", __func__);
20629 VOS_ASSERT(0);
20630 vos_mem_free(pwdiWifConfigSetReqParams);
20631 vos_mem_free(pwdaWificonfig);
20632 return VOS_STATUS_E_NOMEM;
20633 }
20634 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
20635 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
20636 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
20637 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
20638
20639 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053020640 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020641 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
20642
20643 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
20644 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
20645 pWdaParams);
20646 if(IS_WDI_STATUS_FAILURE(wstatus))
20647 {
20648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20649 "Failure in sendind WifiConfigReq, free all the memory" );
20650 status = CONVERT_WDI2VOS_STATUS(wstatus);
20651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20652 vos_mem_free(pWdaParams->wdaMsgParam);
20653 vos_mem_free(pWdaParams);
20654 }
20655
20656 return status;
20657
20658}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020659
20660#ifdef FEATURE_OEM_DATA_SUPPORT
20661/*
20662 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
20663 * Request to WDI.
20664 */
20665VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
20666 tOemDataReqNewConfig *pOemDataReqNewConfig)
20667{
20668 VOS_STATUS status = VOS_STATUS_SUCCESS;
20669 WDI_Status wstatus;
20670 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
20671
20672 /* Sanity Check*/
20673 if(NULL == pOemDataReqNewConfig)
20674 {
20675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20676 "%s: pOemDataReqNewConfig received NULL", __func__);
20677 VOS_ASSERT(0) ;
20678 return VOS_STATUS_E_FAULT;
20679 }
20680
20681 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
20682 sizeof(WDI_OemDataReqNewConfig));
20683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20684 "------> %s " ,__func__);
20685
20686 if(NULL == wdiOemDataReqNewConfig)
20687 {
20688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20689 "%s: VOS MEM Alloc Failure", __func__);
20690 VOS_ASSERT(0);
20691 vos_mem_free(pOemDataReqNewConfig);
20692 return VOS_STATUS_E_NOMEM;
20693 }
20694
20695 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
20696 sizeof(WDI_OemDataReqNewConfig));
20697
20698 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
20699
20700 if (WDI_STATUS_PENDING == wstatus)
20701 {
20702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20703 FL("pending status received "));
20704 }
20705 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
20706 {
20707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20708 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
20709 vos_mem_free(wdiOemDataReqNewConfig);
20710 }
20711
20712 // Free the memory allocated in sme_OemDataReqNew
20713 vos_mem_free(pOemDataReqNewConfig);
20714
20715 return status;
20716}
20717#endif
20718