blob: ea3a920d55b84df9005cfa848fac6aa553f58095 [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
Abhishek Singh447839d2015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
134 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* extern declarations */
141extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700142extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144/* forward declarations */
145void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
146 void *pBodyptr, tANI_U32 bodyVal) ;
147VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
148 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700149VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
150VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
151
152extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
153 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530154void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
156 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
157void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
158 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
159void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
160 void* pUserData ) ;
161static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
162static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
163void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800164void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700165void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef WLAN_FEATURE_VOWIFI_11R
167VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
168#endif /* WLAN_FEATURE_VOWIFI_11R */
169
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
171void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
172VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef FEATURE_WLAN_SCAN_PNO
174static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
175static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
176static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
177#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700178#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700179VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700180void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
181void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
182void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
183#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700184#ifdef WLAN_FEATURE_PACKET_FILTERING
185static VOS_STATUS WDA_Process8023MulticastListReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
188 );
189static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
190 tWDA_CbContext *pWDA,
191 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
192 );
193static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
194 tWDA_CbContext *pWDA,
195 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
196 );
197static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
198 tWDA_CbContext *pWDA,
199 tSirRcvFltPktClearParam *pRcvFltPktClearParam
200 );
201#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700202VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700203static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
204 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700205VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
206 v_U8_t *pDefaultKeyId,
207 v_U8_t *pNumKeys,
208 WDI_KeysType *pWdiKeys );
209
210#ifdef WLAN_FEATURE_GTK_OFFLOAD
211static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
212static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
213#endif // WLAN_FEATURE_GTK_OFFLOAD
214
c_hpothu92367912014-05-01 15:18:17 +0530215v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
216 tSirBcnMissRateReq *pData);
217
Jeff Johnson295189b2012-06-20 16:38:30 -0700218VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
219 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700220#ifdef WLAN_FEATURE_11AC
221VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
222 tUpdateVHTOpMode *pData);
223#endif
Leo Chang9056f462013-08-01 19:21:11 -0700224
225#ifdef FEATURE_WLAN_LPHB
226VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
227 tSirLPHBReq *pData);
228#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530229
Dino Mycle41bdc942014-06-10 11:30:24 +0530230#ifdef WLAN_FEATURE_EXTSCAN
231VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
232 tSirEXTScanStartReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
234 tSirEXTScanStopReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
236 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
238 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530243VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
244 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
246 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530247VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
248 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530249#endif /* WLAN_FEATURE_EXTSCAN */
250
Sunil Duttbd736ed2014-05-26 21:19:41 +0530251#ifdef WLAN_FEATURE_LINK_LAYER_STATS
252VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
253 tSirLLStatsSetReq *wdaRequest);
254
255VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
256 tSirLLStatsGetReq *wdaRequest);
257
258VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
259 tSirLLStatsClearReq *wdaRequest);
260#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530261
262v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
263 tSirFWStatsGetReq *wdaRequest);
264
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530265VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
266 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530267VOS_STATUS
268WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
269 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530270
c_manjeecfd1efb2015-09-25 19:32:34 +0530271VOS_STATUS
272WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
273 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530274
Katya Nigamf0511f62015-05-05 16:40:57 +0530275VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
276VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530277VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530278
279VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
280 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530281
282VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
283 tOemDataReqNewConfig *pOemDataReqNewConfig);
284
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +0530285
286v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
287 tSirAntennaDiversitySelectionReq *pData);
288
Srinivas Dasari32a79262015-02-19 13:04:49 +0530289/*
290 * FUNCTION: WDA_ProcessNanRequest
291 * Process NAN request
292 */
293VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
294 tNanRequest *wdaRequest)
295{
296 WDI_Status status = WDI_STATUS_SUCCESS;
297 tWDA_ReqParams *pWdaParams;
298 WDI_NanRequestType *wdiRequest = NULL;
299 size_t wdiReqLength = sizeof(WDI_NanRequestType)
300 - sizeof(wdiRequest->request_data)
301 + wdaRequest->request_data_len;
302
303 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
304
305 if (NULL == wdiRequest)
306 {
307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
308 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
309 wdiReqLength);
310 vos_mem_free(wdaRequest);
311 return VOS_STATUS_E_NOMEM;
312 }
313
314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
315 "WDA: Process Nan Request length: %zu", wdiReqLength);
316
317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
318 if (NULL == pWdaParams)
319 {
320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
321 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
322 VOS_ASSERT(0);
323 vos_mem_free(wdaRequest);
324 vos_mem_free(wdiRequest);
325 return VOS_STATUS_E_NOMEM;
326 }
327
328 wdiRequest->request_data_len = wdaRequest->request_data_len;
329
330 vos_mem_copy( wdiRequest->request_data,
331 wdaRequest->request_data,
332 wdaRequest->request_data_len);
333
334 vos_mem_free(wdaRequest);
335
336 pWdaParams->pWdaContext = pWDA;
337 pWdaParams->wdaMsgParam = NULL;
338 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
339
340 status = WDI_NanRequest(wdiRequest, pWdaParams);
341
342 if (IS_WDI_STATUS_FAILURE(status))
343 {
344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
345 "Failure to request. Free all the memory " );
346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
347 vos_mem_free(pWdaParams);
348 }
349
350 return CONVERT_WDI2VOS_STATUS(status) ;
351}
352
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530353/**
354 * wda_state_info_dump() - prints state information of wda layer
355 */
356static void wda_state_info_dump(void)
357{
358 v_CONTEXT_t vos_ctx_ptr = NULL;
359 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530360
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
362 "<------ %s " ,__func__);
363
364 /* Get the Global VOSS Context */
365 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
366
367 if (NULL != vos_ctx_ptr)
368 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
369 vos_ctx_ptr );
370 else {
371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
372 "%s: Invalid Global VOSS Context", __func__);
373 VOS_ASSERT(0);
374 return;
375 }
376
377 if (NULL != wda)
378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
379 "wdaState: %d linkState: %d", wda->wdaState,
380 wda->linkState);
381 else {
382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
383 "%s: Invalid WDA Context", __func__);
384 VOS_ASSERT(0);
385 }
386}
387
388/**
389 * wda_register_debug_callback() - registration function for wda layer
390 * to print wda state information
391 */
392static void wda_register_debug_callback(void)
393{
394 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
395}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530396
Jeff Johnson295189b2012-06-20 16:38:30 -0700397/*
398 * FUNCTION: WDA_open
399 * Allocate the WDA context
400 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530401VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 tMacOpenParameters *pMacParams )
403{
404 tWDA_CbContext *wdaContext;
405 VOS_STATUS status;
406 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530408 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
410 if(!VOS_IS_STATUS_SUCCESS(status))
411 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
413 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 return VOS_STATUS_E_NOMEM;
415 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 /*__asm int 3;*/
417 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
418
419 /* Initialize data structures */
420 wdaContext->pVosContext = pVosContext;
421 wdaContext->wdaState = WDA_INIT_STATE;
422 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
423
424 /* Initialize WDA-WDI synchronization event */
425 status = vos_event_init(&wdaContext->wdaWdiEvent);
426 if(!VOS_IS_STATUS_SUCCESS(status))
427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800429 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800430 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 /* Init Frame transfer event */
433 status = vos_event_init(&wdaContext->txFrameEvent);
434 if(!VOS_IS_STATUS_SUCCESS(status))
435 {
436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800437 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800438 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 status = vos_event_init(&wdaContext->suspendDataTxEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
448 if(!VOS_IS_STATUS_SUCCESS(status))
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800451 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800452 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530456 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 &wdiDevCapability, pMacParams->driverType))
458 {
459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
460 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800461 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 }
463 else
464 {
465 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
466 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
467 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 /* update max STA in WDA used for BA */
469 wdaContext->wdaMaxSta = pMacParams->maxStation;
470 /* store the frameTransRequired flag in wdaContext, to send this to HAL
471 * in WDA_Start
472 */
473 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
474 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530475
476 wda_register_debug_callback();
477
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800479
480error:
481 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
482 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483}
484
Jeff Johnson295189b2012-06-20 16:38:30 -0700485/*
486 * FUNCTION: WDA_preStart
487 * Trigger DAL-AL to start CFG download
488 */
489VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
490{
491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
492 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 /*
494 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
495 */
496 wdaMsg.type = WNI_CFG_DNLD_REQ ;
497 wdaMsg.bodyptr = NULL;
498 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 /* post the message.. */
500 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
501 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
502 {
503 vosStatus = VOS_STATUS_E_BADMSG;
504 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 return( vosStatus );
506}
Jeff Johnson295189b2012-06-20 16:38:30 -0700507/*
508 * FUNCTION: WDA_wdiStartCallback
509 * Once WDI_Start is finished, WDI start callback will be called by WDI
510 * to indicate completion of WDI_Start.
511 */
512void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
513 void *pVosContext)
514{
515 tWDA_CbContext *wdaContext;
516 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 if (NULL == pVosContext)
518 {
519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700520 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700521 return;
522 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
524 if (NULL == wdaContext)
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700527 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 return;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
531 {
532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700533 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 }
535 else
536 {
537 wdaContext->wdaState = WDA_START_STATE;
538 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 /* extract and save version information from the Start Response */
540 wdaContext->wcnssWlanCompiledVersion.major =
541 wdiRspParams->wlanCompiledVersion.major;
542 wdaContext->wcnssWlanCompiledVersion.minor =
543 wdiRspParams->wlanCompiledVersion.minor;
544 wdaContext->wcnssWlanCompiledVersion.version =
545 wdiRspParams->wlanCompiledVersion.version;
546 wdaContext->wcnssWlanCompiledVersion.revision =
547 wdiRspParams->wlanCompiledVersion.revision;
548 wdaContext->wcnssWlanReportedVersion.major =
549 wdiRspParams->wlanReportedVersion.major;
550 wdaContext->wcnssWlanReportedVersion.minor =
551 wdiRspParams->wlanReportedVersion.minor;
552 wdaContext->wcnssWlanReportedVersion.version =
553 wdiRspParams->wlanReportedVersion.version;
554 wdaContext->wcnssWlanReportedVersion.revision =
555 wdiRspParams->wlanReportedVersion.revision;
556 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
557 wdiRspParams->wcnssSoftwareVersion,
558 sizeof(wdaContext->wcnssSoftwareVersionString));
559 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
560 wdiRspParams->wcnssHardwareVersion,
561 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* Notify WDA_start that WDI_Start has completed */
563 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700564 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700567 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 return;
570}
571
Jeff Johnson295189b2012-06-20 16:38:30 -0700572/*
573 * FUNCTION: WDA_start
574 * Prepare TLV configuration and call WDI_Start.
575 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700576VOS_STATUS WDA_start(v_PVOID_t pVosContext)
577{
578 tWDA_CbContext *wdaContext;
579 VOS_STATUS status;
580 WDI_Status wdiStatus;
581 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 if (NULL == pVosContext)
583 {
584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700585 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 return VOS_STATUS_E_FAILURE;
587 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
589 if (NULL == wdaContext)
590 {
591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700592 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700593 return VOS_STATUS_E_FAILURE;
594 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 /* Non-FTM mode, WDA status for START must be INIT
596 * FTM mode, WDA Status for START can be INIT or STOP */
597 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
598 (WDA_STOP_STATE != wdaContext->wdaState) )
599 {
600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
601 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700602 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 return VOS_STATUS_E_FAILURE;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* initialize the wdiStartParam. Note that we can create this on
606 the stack since we won't exit until WDI_Start() completes or
607 times out */
608 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* prepare the config TLV for the WDI */
611 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
612 if ( !VOS_IS_STATUS_SUCCESS(status) )
613 {
614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700615 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 return VOS_STATUS_E_FAILURE;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* note from here onwards if an error occurs we must
619 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
621 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
622 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* initialize the WDA-WDI synchronization event */
624 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* call WDI start */
626 wdiStatus = WDI_Start(&wdiStartParam,
627 (WDI_StartRspCb)WDA_wdiStartCallback,
628 (v_VOID_t *)pVosContext);
629 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700632 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 vos_mem_free(wdiStartParam.pConfigBuffer);
634 return VOS_STATUS_E_FAILURE;
635 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* wait for WDI start to invoke our callback */
637 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
638 WDA_WDI_START_TIMEOUT );
639 if ( !VOS_IS_STATUS_SUCCESS(status) )
640 {
641 if ( VOS_STATUS_E_TIMEOUT == status )
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700644 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 }
646 else
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
649 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700650 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 }
652 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530653 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 /* we no longer need the config TLV */
657 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* if we are not in the START state then WDI_Start() failed */
659 if (WDA_START_STATE != wdaContext->wdaState)
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700662 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 return VOS_STATUS_E_FAILURE;
664 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 /* FTM mode does not need to monitor BA activity */
666 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
667 {
668 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800669 if(VOS_STATUS_SUCCESS == status)
670 {
671 wdaContext->wdaTimersCreated = VOS_TRUE;
672 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530673 else
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 FL("wda create timers failed"));
677 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 }
Leo Chang9d76f622013-08-23 16:34:52 -0700679 else
680 {
681 vos_event_init(&wdaContext->ftmStopDoneEvent);
682 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 return status;
684}
685
Jeff Johnson295189b2012-06-20 16:38:30 -0700686/*
687 * FUNCTION: WDA_prepareConfigTLV
688 * Function to prepare CFG for DAL(WDA)
689 */
690VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
691 WDI_StartReqParamsType *wdiStartParams )
692{
693 /* get pMac to acess CFG data base */
694 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
695 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
696 tHalCfg *tlvStruct = NULL ;
697 tANI_U8 *tlvStructStart = NULL ;
698 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
699 v_PVOID_t *configParam;
700 tANI_U32 configParamSize;
701 tANI_U32 *configDataValue;
702 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700703 tANI_U8 i;
704
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 if ((NULL == pMac)||(NULL == wdaContext))
706 {
707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700708 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 VOS_ASSERT(0);
710 return VOS_STATUS_E_FAILURE;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
713 WNI_CFG_STA_ID_LEN +
714 WNI_CFG_EDCA_WME_ACBK_LEN +
715 WNI_CFG_EDCA_WME_ACBE_LEN +
716 WNI_CFG_EDCA_WME_ACVI_LEN +
717 WNI_CFG_EDCA_WME_ACVO_LEN +
718 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 /* malloc memory for all configs in one shot */
720 configParam = vos_mem_malloc(configParamSize);
721
722 if(NULL == configParam )
723 {
724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700725 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 VOS_ASSERT(0) ;
727 return VOS_STATUS_E_NOMEM;
728 }
729 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700730 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)configParam;
732 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* TODO: Remove Later */
734 /* QWLAN_HAL_CFG_STA_ID */
735 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
736 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
737 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_STA_ID");
742 goto handle_failure;
743 }
744 tlvStruct->length = strLength ;
745 /* calculate the pad bytes to have the CFG in aligned format */
746 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
747 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
749 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
751 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
752 tlvStruct->length = sizeof(tANI_U32);
753 configDataValue = (tANI_U32 *)(tlvStruct + 1);
754 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
755 != eSIR_SUCCESS)
756 {
757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
758 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
759 goto handle_failure;
760 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
762 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
764 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
765 tlvStruct->length = sizeof(tANI_U32);
766 configDataValue = (tANI_U32 *)(tlvStruct + 1);
767 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
768 eSIR_SUCCESS)
769 {
770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
771 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
772 goto handle_failure;
773 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
775 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
777 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
778 tlvStruct->length = sizeof(tANI_U32);
779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
780 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
781 != eSIR_SUCCESS)
782 {
783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
784 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
785 goto handle_failure;
786 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
788 + sizeof(tHalCfg) + tlvStruct->length)) ;
789
790 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
791 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
792 tlvStruct->length = sizeof(tANI_U32);
793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
794 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
795 configDataValue ) != eSIR_SUCCESS)
796 {
797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
798 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
799 goto handle_failure;
800 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
802 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 /* QWLAN_HAL_CFG_CAL_PERIOD */
804 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_CAL_PERIOD");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 /* QWLAN_HAL_CFG_CAL_CONTROL */
817 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
818 tlvStruct->length = sizeof(tANI_U32);
819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
820 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
821 != eSIR_SUCCESS)
822 {
823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
824 "Failed to get value for WNI_CFG_CAL_CONTROL");
825 goto handle_failure;
826 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
828 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 /* QWLAN_HAL_CFG_PROXIMITY */
830 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_PROXIMITY");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
843 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
844 tlvStruct->length = sizeof(tANI_U32);
845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
846 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
847 != eSIR_SUCCESS)
848 {
849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
850 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
851 goto handle_failure;
852 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
854 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
856 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
860 eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
869 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
870 tlvStruct->length = sizeof(tANI_U32);
871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
872 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
873 configDataValue ) != eSIR_SUCCESS)
874 {
875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
876 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
877 goto handle_failure;
878 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
880 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
882 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
883 tlvStruct->length = sizeof(tANI_U32);
884 configDataValue = (tANI_U32 *)(tlvStruct + 1);
885 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
886 eSIR_SUCCESS)
887 {
888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
889 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
890 goto handle_failure;
891 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700892 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
893 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
895 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
896 tlvStruct->length = sizeof(tANI_U32);
897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
898 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
899 eSIR_SUCCESS)
900 {
901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
902 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
903 goto handle_failure;
904 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
906 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
908 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
912 eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
921 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
925 configDataValue ) != eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
934 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length));
946
947 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
948 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
949 tlvStruct->length = sizeof(tANI_U32);
950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
951 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
952 configDataValue ) != eSIR_SUCCESS)
953 {
954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
955 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
956 goto handle_failure;
957 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700958 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
959 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
961 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length));
973
974 /* QWLAN_HAL_CFG_FIXED_RATE */
975 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
976 tlvStruct->length = sizeof(tANI_U32);
977 configDataValue = (tANI_U32 *)(tlvStruct + 1);
978 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
979 != eSIR_SUCCESS)
980 {
981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
982 "Failed to get value for WNI_CFG_FIXED_RATE");
983 goto handle_failure;
984 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700985 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
986 + sizeof(tHalCfg) + tlvStruct->length));
987
988 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
989 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
990 tlvStruct->length = sizeof(tANI_U32);
991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
992 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
993 != eSIR_SUCCESS)
994 {
995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
996 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
997 goto handle_failure;
998 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1000 + sizeof(tHalCfg) + tlvStruct->length));
1001
1002 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1003 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1016 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1020 configDataValue ) != eSIR_SUCCESS)
1021 {
1022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1023 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1024 goto handle_failure;
1025 }
1026 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1027 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1029 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1030 tlvStruct->length = sizeof(tANI_U32);
1031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1032 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1033 configDataValue ) != eSIR_SUCCESS)
1034 {
1035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1036 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1037 goto handle_failure;
1038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1040 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1042 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1043 tlvStruct->length = sizeof(tANI_U32);
1044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1045 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1046 configDataValue ) != eSIR_SUCCESS)
1047 {
1048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1049 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1050 goto handle_failure;
1051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1055 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1056 tlvStruct->length = sizeof(tANI_U32);
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1059 configDataValue ) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1063 goto handle_failure;
1064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1066 + sizeof(tHalCfg) + tlvStruct->length);
1067
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1069 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1070 tlvStruct->length = sizeof(tANI_U32);
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1073 configDataValue ) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1077 goto handle_failure;
1078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1080 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1082 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1083 tlvStruct->length = sizeof(tANI_U32);
1084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1085 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1086 configDataValue ) != eSIR_SUCCESS)
1087 {
1088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1089 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1090 goto handle_failure;
1091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1095 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1099 eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length);
1107
1108 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1109 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1110 tlvStruct->length = sizeof(tANI_U32);
1111 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1112 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1113 configDataValue ) != eSIR_SUCCESS)
1114 {
1115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1116 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1117 goto handle_failure;
1118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1120 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1122 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1126 configDataValue ) != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1130 goto handle_failure;
1131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1135 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1136 tlvStruct->length = sizeof(tANI_U32);
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1139 configDataValue ) != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1143 goto handle_failure;
1144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1146 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1148 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1149 tlvStruct->length = sizeof(tANI_U32);
1150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1151 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1152 configDataValue ) != eSIR_SUCCESS)
1153 {
1154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1155 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1156 goto handle_failure;
1157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1159 + sizeof(tHalCfg) + tlvStruct->length);
1160
1161 /* QWLAN_HAL_CFG_STATS_PERIOD */
1162 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1163 tlvStruct->length = sizeof(tANI_U32);
1164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1165 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1166 eSIR_SUCCESS)
1167 {
1168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1169 "Failed to get value for WNI_CFG_STATS_PERIOD");
1170 goto handle_failure;
1171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1173 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001174 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1175 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1176 tlvStruct->length = sizeof(tANI_U32);
1177 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1178 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1179 eSIR_SUCCESS)
1180 {
1181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1182 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1183 goto handle_failure;
1184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1186 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1188 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1189 tlvStruct->length = sizeof(tANI_U32);
1190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1191 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1192 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1196 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1204 goto handle_failure;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1209 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1210 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1213 &strLength) != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1217 goto handle_failure;
1218 }
1219 tlvStruct->length = strLength;
1220 /* calculate the pad bytes to have the CFG in aligned format */
1221 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1222 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1224 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1226 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1227 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1229 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1230 &strLength) != eSIR_SUCCESS)
1231 {
1232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1233 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1234 goto handle_failure;
1235 }
1236 tlvStruct->length = strLength;
1237 /* calculate the pad bytes to have the CFG in aligned format */
1238 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1239 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1241 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1243 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1244 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1246 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1247 &strLength) != eSIR_SUCCESS)
1248 {
1249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1250 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1251 goto handle_failure;
1252 }
1253 tlvStruct->length = strLength;
1254 /* calculate the pad bytes to have the CFG in aligned format */
1255 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1256 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1260 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1261 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1264 &strLength) != eSIR_SUCCESS)
1265 {
1266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1267 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1268 goto handle_failure;
1269 }
1270 tlvStruct->length = strLength;
1271 /* calculate the pad bytes to have the CFG in aligned format */
1272 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1273 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1277 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1278 tlvStruct->length = sizeof(tANI_U32);
1279 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1280 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1281 != eSIR_SUCCESS)
1282 {
1283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1284 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1285 goto handle_failure;
1286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1290 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1291 tlvStruct->length = sizeof(tANI_U32);
1292 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1293 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1294 != eSIR_SUCCESS)
1295 {
1296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1297 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1298 goto handle_failure;
1299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001300 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1301 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1303 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1307 != eSIR_SUCCESS)
1308 {
1309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1310 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1311 goto handle_failure;
1312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1316 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1320 != eSIR_SUCCESS)
1321 {
1322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1323 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1324 goto handle_failure;
1325 }
1326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1327 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1329 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1333 != eSIR_SUCCESS)
1334 {
1335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1336 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1337 goto handle_failure;
1338 }
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001341 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1342 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1346 != eSIR_SUCCESS)
1347 {
1348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1349 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1350 goto handle_failure;
1351 }
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001354 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1355 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1359 != eSIR_SUCCESS)
1360 {
1361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1362 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1363 goto handle_failure;
1364 }
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001367 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1368 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1369 tlvStruct->length = sizeof(tANI_U32);
1370 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1371 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1372 != eSIR_SUCCESS)
1373 {
1374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1375 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1376 goto handle_failure;
1377 }
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001380 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1381 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1385 != eSIR_SUCCESS)
1386 {
1387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1388 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1389 goto handle_failure;
1390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1394 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1395 tlvStruct->length = sizeof(tANI_U32);
1396 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1397 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1398 != eSIR_SUCCESS)
1399 {
1400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1401 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1402 goto handle_failure;
1403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001404 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1405 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1407 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1415 goto handle_failure;
1416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1420 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1421 * into FW, so the parameters are added here.
1422 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001423 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1424 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001430 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1431 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001437 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1438 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001444 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1445 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1446 tlvStruct->length = sizeof(tANI_U32);
1447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1448 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
1451
1452 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1453 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1454 tlvStruct->length = sizeof(tANI_U32);
1455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1456 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1457 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1458 + sizeof(tHalCfg) + tlvStruct->length) ;
1459
1460 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1461 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1462 tlvStruct->length = sizeof(tANI_U32);
1463 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1464 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1465 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1466 + sizeof(tHalCfg) + tlvStruct->length) ;
1467
1468 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1469 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1470 tlvStruct->length = sizeof(tANI_U32);
1471 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1472 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1473 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1474 + sizeof(tHalCfg) + tlvStruct->length) ;
1475
1476 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1477 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1481 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1482 + sizeof(tHalCfg) + tlvStruct->length) ;
1483
1484 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1485 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491
1492 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1493 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1494 tlvStruct->length = sizeof(tANI_U32);
1495 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1496 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1497 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1498 + sizeof(tHalCfg) + tlvStruct->length) ;
1499
1500 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1501 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1502 tlvStruct->length = sizeof(tANI_U32);
1503 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1504 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1505 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1506 + sizeof(tHalCfg) + tlvStruct->length) ;
1507
1508 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1509 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1513 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1514 + sizeof(tHalCfg) + tlvStruct->length) ;
1515
1516 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1517 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1518 tlvStruct->length = sizeof(tANI_U32);
1519 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1520 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1521 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1522 + sizeof(tHalCfg) + tlvStruct->length) ;
1523
1524 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1525 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1529 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1530 + sizeof(tHalCfg) + tlvStruct->length) ;
1531
1532 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1533 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1534 tlvStruct->length = sizeof(tANI_U32);
1535 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1536 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
1540 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1541 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1545 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1546 + sizeof(tHalCfg) + tlvStruct->length) ;
1547
Wilson Tsaof8b37942013-09-06 10:49:00 -07001548 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1549 {
1550 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1551 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1552 tlvStruct->length = sizeof(tANI_U32);
1553 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1554 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1555 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1556 + sizeof(tHalCfg) + tlvStruct->length) ;
1557
1558 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1559 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1560 tlvStruct->length = sizeof(tANI_U32);
1561 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1562 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1563 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1564 + sizeof(tHalCfg) + tlvStruct->length) ;
1565
1566 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1567 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1568 tlvStruct->length = sizeof(tANI_U32);
1569 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1570 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1571 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1572 + sizeof(tHalCfg) + tlvStruct->length) ;
1573
1574 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1575 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1576 tlvStruct->length = sizeof(tANI_U32);
1577 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1578 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
1581 }
1582
1583 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1584 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1585 tlvStruct->length = sizeof(tANI_U32);
1586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1587 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1588 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1589 + sizeof(tHalCfg) + tlvStruct->length) ;
1590
1591 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1592 {
1593 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1594 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1595 tlvStruct->length = sizeof(tANI_U32);
1596 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1597 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1598 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1599 + sizeof(tHalCfg) + tlvStruct->length) ;
1600 }
1601
1602 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1603 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1604 tlvStruct->length = sizeof(tANI_U32);
1605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1606 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
1609
Jeff Johnson32d95a32012-09-10 13:15:23 -07001610 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001611 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1615 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1616 wcnssCompiledApiVersion.minor,
1617 wcnssCompiledApiVersion.version,
1618 wcnssCompiledApiVersion.revision);
1619 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1620 + sizeof(tHalCfg) + tlvStruct->length) ;
1621
Jeff Johnsond13512a2012-07-17 11:42:19 -07001622 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1623 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1627 configDataValue ) != eSIR_SUCCESS)
1628 {
1629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1630 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1631 goto handle_failure;
1632 }
1633
1634 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1635 + sizeof(tHalCfg) + tlvStruct->length) ;
1636 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1637 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1638 tlvStruct->length = sizeof(tANI_U32);
1639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1640 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1641 configDataValue ) != eSIR_SUCCESS)
1642 {
1643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1644 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1645 goto handle_failure;
1646 }
1647
1648 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1649 + sizeof(tHalCfg) + tlvStruct->length) ;
1650
1651 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1656 != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
1665
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001666 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1667 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1675 goto handle_failure;
1676 }
1677
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001680#ifdef WLAN_SOFTAP_VSTA_FEATURE
1681 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1685 != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1689 goto handle_failure;
1690 }
1691
1692 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1693 + sizeof(tHalCfg) + tlvStruct->length) ;
1694#endif
1695
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001696 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1697 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700
1701 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1702 != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1706 goto handle_failure;
1707 }
1708
1709 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1710 + sizeof(tHalCfg) + tlvStruct->length) ;
1711
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301712/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1713 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1714 tlvStruct->length = sizeof(tANI_U32);
1715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1716 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1717 configDataValue ) != eSIR_SUCCESS)
1718 {
1719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1720 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1721 goto handle_failure;
1722 }
1723
1724 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1725 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301726#ifdef FEATURE_WLAN_TDLS
1727 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1728 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1729 tlvStruct->length = sizeof(tANI_U32);
1730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1731 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1732 configDataValue ) != eSIR_SUCCESS)
1733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1735 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1736 goto handle_failure;
1737 }
1738 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1739 + sizeof(tHalCfg) + tlvStruct->length) ;
1740
1741 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1742 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1743 tlvStruct->length = sizeof(tANI_U32);
1744 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1745 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1746 configDataValue ) != eSIR_SUCCESS)
1747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1750 goto handle_failure;
1751 }
1752 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1753 + sizeof(tHalCfg) + tlvStruct->length) ;
1754 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1755 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1756 tlvStruct->length = sizeof(tANI_U32);
1757 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1758 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1759 configDataValue ) != eSIR_SUCCESS)
1760 {
1761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1762 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1763 goto handle_failure;
1764 }
1765 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1766 + sizeof(tHalCfg) + tlvStruct->length) ;
1767 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1768 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301780 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1781 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301794#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301795
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001796 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1797 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1798 tlvStruct->length = sizeof(tANI_U32);
1799 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1800 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1805 goto handle_failure;
1806 }
1807
1808 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1809 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001810
1811 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1812 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1813 tlvStruct->length = sizeof(tANI_U32);
1814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1815 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1816 != eSIR_SUCCESS)
1817 {
1818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1819 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1820 goto handle_failure;
1821 }
1822 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1823 + sizeof(tHalCfg) + tlvStruct->length));
1824
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301825 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1826 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1827 tlvStruct->length = sizeof(tANI_U32);
1828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1829 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1830 configDataValue ) != eSIR_SUCCESS)
1831 {
1832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1833 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1834 goto handle_failure;
1835 }
1836
1837 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1838 + sizeof(tHalCfg) + tlvStruct->length) ;
1839
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301840 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1841 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1842 tlvStruct->length = sizeof(tANI_U32);
1843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1844 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1845 configDataValue ) != eSIR_SUCCESS)
1846 {
1847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1848 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1849 goto handle_failure;
1850 }
1851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1852 + sizeof(tHalCfg) + tlvStruct->length) ;
1853
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301854 /* QWLAN_HAL_CFG_ATH_DISABLE */
1855 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1856 tlvStruct->length = sizeof(tANI_U32);
1857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1858 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1859 configDataValue ) != eSIR_SUCCESS)
1860 {
1861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1862 "Failed to get value for WNI_CFG_ATH_DISABLE");
1863 goto handle_failure;
1864 }
1865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1866 + sizeof(tHalCfg) + tlvStruct->length) ;
1867
c_hpothu6d7dc922013-12-02 12:36:41 +05301868 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1869 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1870 tlvStruct->length = sizeof(tANI_U32);
1871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1872 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1873 configDataValue ) != eSIR_SUCCESS)
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1876 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1877 goto handle_failure;
1878 }
1879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1880 + sizeof(tHalCfg) + tlvStruct->length) ;
1881
1882 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1883 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1884 tlvStruct->length = sizeof(tANI_U32);
1885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1886 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1887 configDataValue ) != eSIR_SUCCESS)
1888 {
1889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1890 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1891 goto handle_failure;
1892 }
1893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1894 + sizeof(tHalCfg) + tlvStruct->length) ;
1895
1896 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1897 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1898 tlvStruct->length = sizeof(tANI_U32);
1899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1915 configDataValue ) != eSIR_SUCCESS)
1916 {
1917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1918 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1919 goto handle_failure;
1920 }
1921 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1922 + sizeof(tHalCfg) + tlvStruct->length) ;
1923
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301924 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1925 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1926 tlvStruct->length = sizeof(tANI_U32);
1927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1928 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1929 configDataValue ) != eSIR_SUCCESS)
1930 {
1931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1932 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1933 goto handle_failure;
1934 }
1935 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1936 + sizeof(tHalCfg) + tlvStruct->length) ;
1937
1938 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1939 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1940 tlvStruct->length = sizeof(tANI_U32);
1941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1942 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1943 configDataValue ) != eSIR_SUCCESS)
1944 {
1945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1946 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1947 goto handle_failure;
1948 }
1949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1950 + sizeof(tHalCfg) + tlvStruct->length) ;
1951
1952 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1953 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1954 tlvStruct->length = sizeof(tANI_U32);
1955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1956 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1957 configDataValue ) != eSIR_SUCCESS)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1960 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1961 goto handle_failure;
1962 }
1963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1964 + sizeof(tHalCfg) + tlvStruct->length) ;
1965
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001966 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1967 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1968 tlvStruct->length = sizeof(tANI_U32);
1969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1970 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1971 configDataValue ) != eSIR_SUCCESS)
1972 {
1973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1974 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1975 goto handle_failure;
1976 }
1977 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1978 + sizeof(tHalCfg) + tlvStruct->length) ;
1979
c_hpothu5bd1ae42014-03-07 20:28:22 +05301980 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1981 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1982 tlvStruct->length = sizeof(tANI_U32);
1983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1984
1985 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1986 configDataValue ) != eSIR_SUCCESS)
1987 {
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1989 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1990 goto handle_failure;
1991 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301992 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1993 + sizeof(tHalCfg) + tlvStruct->length) ;
1994
1995 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1996 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1997 tlvStruct->length = sizeof(tANI_U32);
1998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1999
2000 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2001 configDataValue ) != eSIR_SUCCESS)
2002 {
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2004 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2005 goto handle_failure;
2006 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2008 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302009
c_hpothu2d0f1c42014-04-01 18:38:51 +05302010 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2011 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2012 tlvStruct->length = sizeof(tANI_U32);
2013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2014
2015 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2016 configDataValue ) != eSIR_SUCCESS)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2019 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2020 goto handle_failure;
2021 }
2022 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2023 + sizeof(tHalCfg) + tlvStruct->length) ;
2024
2025 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2026 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2027 tlvStruct->length = sizeof(tANI_U32);
2028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2029
2030 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2031 configDataValue ) != eSIR_SUCCESS)
2032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2034 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2035 goto handle_failure;
2036 }
2037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2038 + sizeof(tHalCfg) + tlvStruct->length) ;
2039
2040 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2041 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2042 tlvStruct->length = sizeof(tANI_U32);
2043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2044
2045 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2046 configDataValue ) != eSIR_SUCCESS)
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2050 goto handle_failure;
2051 }
2052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2053 + sizeof(tHalCfg) + tlvStruct->length) ;
2054
2055 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2056 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2057 tlvStruct->length = sizeof(tANI_U32);
2058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2059
2060 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2061 configDataValue ) != eSIR_SUCCESS)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2065 goto handle_failure;
2066 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2068 + sizeof(tHalCfg) + tlvStruct->length) ;
2069
Mihir Shetec34258c2014-07-30 17:50:27 +05302070 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2071 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2072 tlvStruct->length = sizeof(tANI_U32);
2073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2074
2075 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2076 configDataValue ) != eSIR_SUCCESS)
2077 {
2078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2079 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2080 goto handle_failure;
2081 }
2082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2083 + sizeof(tHalCfg) + tlvStruct->length) ;
2084
2085 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2086 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2087 tlvStruct->length = sizeof(tANI_U32);
2088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2089
2090 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2091 configDataValue ) != eSIR_SUCCESS)
2092 {
2093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2094 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2095 goto handle_failure;
2096 }
2097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2098 + sizeof(tHalCfg) + tlvStruct->length) ;
2099
2100 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2101 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2102 tlvStruct->length = sizeof(tANI_U32);
2103 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2104
2105 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2106 configDataValue ) != eSIR_SUCCESS)
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2109 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2110 goto handle_failure;
2111 }
2112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2113 + sizeof(tHalCfg) + tlvStruct->length) ;
2114
2115 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2116 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2117 tlvStruct->length = sizeof(tANI_U32);
2118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2119
2120 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2121 configDataValue ) != eSIR_SUCCESS)
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2124 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2125 goto handle_failure;
2126 }
2127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2128 + sizeof(tHalCfg) + tlvStruct->length) ;
2129
2130 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2131 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2132 tlvStruct->length = sizeof(tANI_U32);
2133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2134
2135 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2136 configDataValue ) != eSIR_SUCCESS)
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2140 goto handle_failure;
2141 }
2142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2143 + sizeof(tHalCfg) + tlvStruct->length) ;
2144
2145 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2146 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2147 tlvStruct->length = sizeof(tANI_U32);
2148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2149
2150 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2151 configDataValue ) != eSIR_SUCCESS)
2152 {
2153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2154 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2155 goto handle_failure;
2156 }
2157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2158 + sizeof(tHalCfg) + tlvStruct->length) ;
2159
2160 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2161 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2162 tlvStruct->length = sizeof(tANI_U32);
2163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2164
2165 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2166 configDataValue ) != eSIR_SUCCESS)
2167 {
2168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2169 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2170 goto handle_failure;
2171 }
2172 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2173 + sizeof(tHalCfg) + tlvStruct->length) ;
2174
2175 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2176 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2177 tlvStruct->length = sizeof(tANI_U32);
2178 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2179
2180 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2181 configDataValue ) != eSIR_SUCCESS)
2182 {
2183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2184 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2185 goto handle_failure;
2186 }
2187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2188 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302189
2190 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2191 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2192 tlvStruct->length = sizeof(tANI_U32);
2193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2194
2195 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2196 configDataValue ) != eSIR_SUCCESS)
2197 {
2198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2199 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2200 goto handle_failure;
2201 }
2202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2203 + sizeof(tHalCfg) + tlvStruct->length) ;
2204
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302205 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2206 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2207 tlvStruct->length = sizeof(tANI_U32);
2208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2209
2210 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2211 configDataValue ) != eSIR_SUCCESS)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2214 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2215 goto handle_failure;
2216 }
2217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2218 + sizeof(tHalCfg) + tlvStruct->length) ;
2219
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302220 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2221 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2222 tlvStruct->length = sizeof(tANI_U32);
2223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2224
2225 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2226 configDataValue ) != eSIR_SUCCESS)
2227 {
2228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2229 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2230 goto handle_failure;
2231 }
2232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2233 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302234
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302235 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2236 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2237 tlvStruct->length = sizeof(tANI_U32);
2238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2239
2240 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2241 configDataValue ) != eSIR_SUCCESS)
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2244 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2245 goto handle_failure;
2246 }
2247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2248 + sizeof(tHalCfg) + tlvStruct->length) ;
2249
Sachin Ahuja41b61902015-06-18 18:32:15 +05302250
2251 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2252 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2257 configDataValue ) != eSIR_SUCCESS)
2258 {
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2260 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2261 goto handle_failure;
2262 }
2263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
2266 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2268 tlvStruct->length = sizeof(tANI_U32);
2269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2270
2271 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2272 configDataValue ) != eSIR_SUCCESS)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2275 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2276 goto handle_failure;
2277 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2279 + sizeof(tHalCfg) + tlvStruct->length) ;
2280
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302281 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2282 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2283 tlvStruct->length = sizeof(tANI_U32);
2284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2285
2286 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2287 configDataValue ) != eSIR_SUCCESS)
2288 {
2289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2290 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2291 goto handle_failure;
2292 }
2293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2294 + sizeof(tHalCfg) + tlvStruct->length) ;
2295
2296 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2297 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2298 tlvStruct->length = sizeof(tANI_U32);
2299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2300
2301 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2302 configDataValue ) != eSIR_SUCCESS)
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2306 goto handle_failure;
2307 }
2308 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2309 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302310
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302311 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2312 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2313 tlvStruct->length = sizeof(tANI_U32);
2314 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2315
2316 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2317 configDataValue ) != eSIR_SUCCESS)
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2320 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2321 goto handle_failure;
2322 }
2323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2324 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302325 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2326 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2327 tlvStruct->length = sizeof(tANI_U32);
2328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2329 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2330 configDataValue ) != eSIR_SUCCESS)
2331 {
2332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2333 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2334 goto handle_failure;
2335 }
2336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2337 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302338
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302339 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2340 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2341 tlvStruct->length = sizeof(tANI_U32);
2342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2343
2344 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2345 configDataValue ) != eSIR_SUCCESS)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2348 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2349 goto handle_failure;
2350 }
2351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2352 + sizeof(tHalCfg) + tlvStruct->length) ;
2353
Sachin Ahujab4d7a292015-12-08 19:57:04 +05302354 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2355 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2356 tlvStruct->length = sizeof(tANI_U32);
2357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2358
2359 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2360 configDataValue ) != eSIR_SUCCESS)
2361 {
2362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2363 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2364 goto handle_failure;
2365 }
2366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2367 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002369#ifdef WLAN_DEBUG
2370 {
2371 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2373 "****** Dumping CFG TLV ***** ");
2374 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2375 {
2376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2377 "%02x %02x %02x %02x %02x %02x %02x %02x",
2378 tlvStructStart[i],
2379 tlvStructStart[i+1],
2380 tlvStructStart[i+2],
2381 tlvStructStart[i+3],
2382 tlvStructStart[i+4],
2383 tlvStructStart[i+5],
2384 tlvStructStart[i+6],
2385 tlvStructStart[i+7]);
2386 }
2387 /* Dump the bytes in the last line*/
2388 for (; i < wdiStartParams->usConfigBufferLen; i++)
2389 {
2390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2391 "%02x ",tlvStructStart[i]);
2392 }
2393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2394 "**************************** ");
2395 }
2396#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002398handle_failure:
2399 vos_mem_free(configParam);
2400 return VOS_STATUS_E_FAILURE;
2401}
Jeff Johnson295189b2012-06-20 16:38:30 -07002402/*
2403 * FUNCTION: WDA_wdiCompleteCB
2404 * call the voss call back function
2405 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002406void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002407{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2409 tWDA_CbContext *wdaContext;
2410
2411 if(NULL == pWdaParams)
2412 {
2413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002414 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002415 VOS_ASSERT(0) ;
2416 return ;
2417 }
2418
2419 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2420
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 if (NULL == wdaContext)
2422 {
2423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002424 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 return ;
2426 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002427
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002429 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002433 vos_mem_free(pWdaParams);
2434
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 if(WDI_STATUS_SUCCESS != status)
2436 {
2437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2438 "WDI stop callback returned failure" );
2439 VOS_ASSERT(0) ;
2440 }
2441 else
2442 {
2443 wdaContext->wdaState = WDA_STOP_STATE;
2444 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002445
Leo Chang9d76f622013-08-23 16:34:52 -07002446 /* FTM Driver stop procedure should be synced.
2447 * Stop and Close will happen on same context */
2448 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2449 {
2450 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2451 {
2452 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2453 "%s: FTM Stop Event Set Fail", __func__);
2454 VOS_ASSERT(0);
2455 }
2456 }
2457
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002459 vos_WDAComplete_cback(wdaContext->pVosContext);
2460
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 return ;
2462}
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_stop
2465 * call WDI_stop
2466 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002467VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2468{
2469 WDI_Status wdiStatus;
2470 VOS_STATUS status = VOS_STATUS_SUCCESS;
2471 WDI_StopReqParamsType *wdiStopReq;
2472 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002473 tWDA_ReqParams *pWdaParams ;
2474
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if (NULL == pWDA)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0);
2480 return VOS_STATUS_E_FAILURE;
2481 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002482 if (pWDA->wdiFailed == true)
2483 {
2484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002485 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002486 return VOS_STATUS_E_ALREADY;
2487 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002488
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* FTM mode stay START_STATE */
2490 if( (WDA_READY_STATE != pWDA->wdaState) &&
2491 (WDA_INIT_STATE != pWDA->wdaState) &&
2492 (WDA_START_STATE != pWDA->wdaState) )
2493 {
2494 VOS_ASSERT(0);
2495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 wdiStopReq = (WDI_StopReqParamsType *)
2497 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2498 if(NULL == wdiStopReq)
2499 {
2500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 VOS_ASSERT(0);
2503 return VOS_STATUS_E_NOMEM;
2504 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002505
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 wdiStopReq->wdiStopReason = reason;
2507 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302508
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002509 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2510 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 {
2512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 VOS_ASSERT(0);
2515 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002516 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002518
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002519 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2520 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 {
2522 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002523 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002525
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002526 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2527 pWdaParams->wdaMsgParam = NULL;
2528 pWdaParams->pWdaContext = pWDA;
2529
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 /* call WDI stop */
2531 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002532 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2533
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2537 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2539 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 status = VOS_STATUS_E_FAILURE;
2541 }
Leo Chang9d76f622013-08-23 16:34:52 -07002542
2543 /* FTM Driver stop procedure should be synced.
2544 * Stop and Close will happen on same context */
2545 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2546 {
2547 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2548 WDI_RESPONSE_TIMEOUT);
2549 if (status != VOS_STATUS_SUCCESS)
2550 {
2551 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2552 "%s: FTM Stop Timepoout", __func__);
2553 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002554 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302555 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 return status;
2558}
Jeff Johnson295189b2012-06-20 16:38:30 -07002559/*
2560 * FUNCTION: WDA_close
2561 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302562 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002563VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2564{
Jeff Johnson43971f52012-07-17 12:26:56 -07002565 VOS_STATUS status = VOS_STATUS_SUCCESS;
2566 WDI_Status wstatus;
2567 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 if (NULL == wdaContext)
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002572 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 return VOS_STATUS_E_FAILURE;
2574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2576 (WDA_STOP_STATE != wdaContext->wdaState))
2577 {
2578 VOS_ASSERT(0);
2579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002581 wstatus = WDI_Close();
2582 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 {
2584 status = VOS_STATUS_E_FAILURE;
2585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002588 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2589 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 {
2591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002592 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 status = VOS_STATUS_E_FAILURE;
2594 }
2595
Jeff Johnson43971f52012-07-17 12:26:56 -07002596 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002597 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 {
2599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002600 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 status = VOS_STATUS_E_FAILURE;
2602 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002603 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002604 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 {
2606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002607 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 status = VOS_STATUS_E_FAILURE;
2609 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002610 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002611 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 {
2613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002614 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 status = VOS_STATUS_E_FAILURE;
2616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002618 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002619 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 {
2621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2622 "error in WDA close " );
2623 status = VOS_STATUS_E_FAILURE;
2624 }
2625 return status;
2626}
Jeff Johnson295189b2012-06-20 16:38:30 -07002627/*
2628 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2629 * returns 1 if the compiled version is greater than or equal to the input version
2630 */
2631
2632uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2633{
2634 VOS_STATUS status = VOS_STATUS_SUCCESS;
2635 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2636 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2639 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2640 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2641 (compiledVersion.revision >= revision)))
2642 return 1;
2643 else
2644 return 0;
2645}
Jeff Johnson295189b2012-06-20 16:38:30 -07002646/*
2647 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2648 * returns 1 if the compiled version is greater than or equal to the input version
2649 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002650uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2651{
2652 VOS_STATUS status = VOS_STATUS_SUCCESS;
2653 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2654 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2657 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2658 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2659 (reportedVersion.revision >= revision)))
2660 return 1;
2661 else
2662 return 0;
2663}
Jeff Johnson295189b2012-06-20 16:38:30 -07002664/*
2665 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2666 * Returns the version of the WCNSS WLAN API with which the HOST
2667 * device driver was compiled
2668 */
2669VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2670 tSirVersionType *pVersion)
2671{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302672 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 if ((NULL == pvosGCtx) || (NULL == pVersion))
2674 {
2675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002676 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 VOS_ASSERT(0);
2678 return VOS_STATUS_E_FAILURE;
2679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2681 if (NULL == pWDA )
2682 {
2683 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002684 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 VOS_ASSERT(0);
2686 return VOS_STATUS_E_FAILURE;
2687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 *pVersion = pWDA->wcnssWlanCompiledVersion;
2689 return VOS_STATUS_SUCCESS;
2690}
Jeff Johnson295189b2012-06-20 16:38:30 -07002691/*
2692 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2693 * Returns the version of the WCNSS WLAN API with which the WCNSS
2694 * device driver was compiled
2695 */
2696VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2697 tSirVersionType *pVersion)
2698{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302699 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 if ((NULL == pvosGCtx) || (NULL == pVersion))
2701 {
2702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_ASSERT(0);
2705 return VOS_STATUS_E_FAILURE;
2706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2708 if (NULL == pWDA )
2709 {
2710 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 return VOS_STATUS_E_FAILURE;
2714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 *pVersion = pWDA->wcnssWlanReportedVersion;
2716 return VOS_STATUS_SUCCESS;
2717}
Jeff Johnson295189b2012-06-20 16:38:30 -07002718/*
2719 * FUNCTION: WDA_GetWcnssSoftwareVersion
2720 * Returns the WCNSS Software version string
2721 */
2722VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2723 tANI_U8 *pVersion,
2724 tANI_U32 versionBufferSize)
2725{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302726 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002728 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 if ((NULL == pvosGCtx) || (NULL == pVersion))
2730 {
2731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 VOS_ASSERT(0);
2734 return VOS_STATUS_E_FAILURE;
2735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2737 if (NULL == pWDA )
2738 {
2739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 VOS_ASSERT(0);
2742 return VOS_STATUS_E_FAILURE;
2743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2745 return VOS_STATUS_SUCCESS;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_GetWcnssHardwareVersion
2749 * Returns the WCNSS Hardware version string
2750 */
2751VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2752 tANI_U8 *pVersion,
2753 tANI_U32 versionBufferSize)
2754{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302755 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002757 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 if ((NULL == pvosGCtx) || (NULL == pVersion))
2759 {
2760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002761 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 VOS_ASSERT(0);
2763 return VOS_STATUS_E_FAILURE;
2764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2766 if (NULL == pWDA )
2767 {
2768 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002769 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 VOS_ASSERT(0);
2771 return VOS_STATUS_E_FAILURE;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2774 return VOS_STATUS_SUCCESS;
2775}
Jeff Johnson295189b2012-06-20 16:38:30 -07002776/*
2777 * FUNCTION: WDA_WniCfgDnld
2778 * Trigger CFG Download
2779 */
2780VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2781{
2782 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302783 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002784
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 if (NULL == pMac )
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 MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 VOS_ASSERT(0);
2790 return VOS_STATUS_E_FAILURE;
2791 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302792 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 return vosStatus;
2794}
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/* -----------------------------------------------------------------
2796 * WDI interface
2797 * -----------------------------------------------------------------
2798 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002799/*
2800 * FUNCTION: WDA_suspendDataTxCallback
2801 * call back function called from TL after suspend Transmission
2802 */
2803VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2804 v_U8_t* ucSTAId,
2805 VOS_STATUS vosStatus)
2806{
2807 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if (NULL == pWDA )
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0);
2815 return VOS_STATUS_E_FAILURE;
2816 }
2817 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2818 {
2819 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2820 }
2821 else
2822 {
2823 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 /* Trigger the event to bring the WDA TL suspend function to come
2826 * out of wait*/
2827 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2828 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2829 {
2830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002831 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 /* If TL suspended had timedout before this callback was called, resume back
2834 * TL.*/
2835 if (pWDA->txSuspendTimedOut)
2836 {
2837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002838 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 WDA_ResumeDataTx(pWDA);
2840 pWDA->txSuspendTimedOut = FALSE;
2841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 return VOS_STATUS_SUCCESS;
2843}
Jeff Johnson295189b2012-06-20 16:38:30 -07002844/*
2845 * FUNCTION: WDA_suspendDataTx
2846 * Update TL to suspend the data Transmission
2847 */
2848VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2849{
2850 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2851 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002852
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 if (pWDA->txSuspendTimedOut)
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002859 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 return status;
2861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* Reset the event to be not signalled */
2863 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2864 if(!VOS_IS_STATUS_SUCCESS(status))
2865 {
2866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002867 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 return VOS_STATUS_E_FAILURE;
2869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002871 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 WDA_SuspendDataTxCallback);
2873 if(status != VOS_STATUS_SUCCESS)
2874 {
2875 return status;
2876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 /* Wait for the event to be set by the TL, to get the response of
2878 * suspending the TX queues, this event should be set by the Callback
2879 * function called by TL*/
2880 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2881 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2882 if(!VOS_IS_STATUS_SUCCESS(status))
2883 {
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2885 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002886 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 /* Set this flag to true when TL suspend times out, so that when TL
2888 * suspend eventually happens and calls the callback, TL can be resumed
2889 * right away by looking at this flag when true.*/
2890 pWDA->txSuspendTimedOut = TRUE;
2891 }
2892 else
2893 {
2894 pWDA->txSuspendTimedOut = FALSE;
2895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2897 {
2898 status = VOS_STATUS_SUCCESS;
2899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return status;
2901}
Jeff Johnson295189b2012-06-20 16:38:30 -07002902/*
2903 * FUNCTION: WDA_resumeDataTx
2904 * Update TL to resume the data Transmission
2905 */
2906VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2907{
2908 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002912
2913 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 return status;
2915}
Jeff Johnson295189b2012-06-20 16:38:30 -07002916/*
2917 * FUNCTION: WDA_InitScanReqCallback
2918 * Trigger Init SCAN callback
2919 */
2920void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2921{
2922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2923 tWDA_CbContext *pWDA;
2924 tInitScanParams *pWDA_ScanParam ;
2925 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002927 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 if(NULL == pWdaParams)
2929 {
2930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002931 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 VOS_ASSERT(0) ;
2933 return ;
2934 }
2935 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2936 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 if(NULL == pWDA_ScanParam)
2938 {
2939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002940 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002941 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2943 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 return ;
2945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 if(WDI_STATUS_SUCCESS != wdiStatus)
2947 {
2948 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 if(VOS_STATUS_SUCCESS != status)
2950 {
2951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 }
2954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 /* free WDI command buffer */
2956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302958
2959
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002961 /* without converting the Status to Failure or Success Just
2962 pass the same status to lim */
2963 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 /* send SCAN RSP message back to PE */
2965 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return ;
2967}
2968
2969/*
2970 * FUNCTION: WDA_ProcessInitScanReq
2971 * Trigger Init SCAN in DAL
2972 */
2973VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2974 tInitScanParams *initScanParams)
2975{
2976 WDI_Status status = WDI_STATUS_SUCCESS ;
2977 WDI_InitScanReqParamsType *wdiInitScanParam =
2978 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2979 sizeof(WDI_InitScanReqParamsType)) ;
2980 tWDA_ReqParams *pWdaParams;
2981 tANI_U8 i = 0;
2982
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == wdiInitScanParam)
2986 {
2987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002988 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 VOS_ASSERT(0);
2990 return VOS_STATUS_E_NOMEM;
2991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2993 if(NULL == pWdaParams)
2994 {
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_ASSERT(0);
2998 vos_mem_free(wdiInitScanParam);
2999 return VOS_STATUS_E_NOMEM;
3000 }
3001
3002 /* Copy init Scan params to WDI structure */
3003 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3004 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3005 sizeof(tSirMacAddr)) ;
3006 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3007 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3008 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3010 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3012 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3014 {
3015 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3016 initScanParams->scanEntry.bssIdx[i] ;
3017 }
3018
3019 /* if Frame length, copy macMgmtHdr or WDI structure */
3020 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3021 {
3022 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3023 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3024 }
3025 wdiInitScanParam->wdiReqStatusCB = NULL ;
3026
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 /* Store Init Req pointer, as this will be used for response */
3028 pWdaParams->pWdaContext = pWDA;
3029 pWdaParams->wdaMsgParam = initScanParams;
3030 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 /* first try to suspend TX */
3032 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 if(WDI_STATUS_SUCCESS != status)
3034 {
3035 goto handleWdiFailure;
3036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 /* call DAL API to pass init scan request to DAL */
3038 status = WDI_InitScanReq(wdiInitScanParam,
3039 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 if(IS_WDI_STATUS_FAILURE(status))
3041 {
3042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3043 "error in WDA Init Scan, Resume Tx " );
3044 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 VOS_ASSERT(0) ;
3046
3047 goto handleWdiFailure;
3048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003050handleWdiFailure:
3051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3052 "Failure in WDI Api, free all the memory " );
3053 /* free WDI command buffer */
3054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3055 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 /* send Failure to PE */
3057 initScanParams->status = eSIR_FAILURE ;
3058 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 return CONVERT_WDI2VOS_STATUS(status) ;
3060}
3061
Jeff Johnson295189b2012-06-20 16:38:30 -07003062/*
3063 * FUNCTION: WDA_StartScanReqCallback
3064 * send Start SCAN RSP back to PE
3065 */
3066void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3067 void* pUserData)
3068{
3069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3070 tWDA_CbContext *pWDA;
3071 tStartScanParams *pWDA_ScanParam;
3072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003073 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 if(NULL == pWdaParams)
3075 {
3076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 VOS_ASSERT(0) ;
3079 return ;
3080 }
3081 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3082 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if(NULL == pWDA_ScanParam)
3084 {
3085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003086 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003088 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 return ;
3090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3092 {
3093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003096 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 return ;
3098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3100 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003101
Jeff Johnson295189b2012-06-20 16:38:30 -07003102
3103 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003104 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 /* send SCAN RSP message back to PE */
3106 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 return ;
3108}
3109
Jeff Johnson295189b2012-06-20 16:38:30 -07003110/*
3111 * FUNCTION: WDA_ProcessStartScanReq
3112 * Trigger start SCAN in WDI
3113 */
3114VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3115 tStartScanParams *startScanParams)
3116{
3117 WDI_Status status = WDI_STATUS_SUCCESS;
3118 WDI_StartScanReqParamsType *wdiStartScanParams =
3119 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3120 sizeof(WDI_StartScanReqParamsType)) ;
3121 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if(NULL == wdiStartScanParams)
3125 {
3126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0);
3129 return VOS_STATUS_E_NOMEM;
3130 }
3131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3132 if(NULL == pWdaParams)
3133 {
3134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 VOS_ASSERT(0);
3137 vos_mem_free(wdiStartScanParams);
3138 return VOS_STATUS_E_NOMEM;
3139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 /* Copy init Scan params to WDI structure */
3141 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3142 wdiStartScanParams->wdiReqStatusCB = NULL ;
3143
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 /* Store Init Req pointer, as this will be used for response */
3145 /* store Params pass it to WDI */
3146 pWdaParams->pWdaContext = pWDA;
3147 pWdaParams->wdaMsgParam = startScanParams;
3148 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 /* call DAL API to pass init scan request to DAL */
3150 status = WDI_StartScanReq(wdiStartScanParams,
3151 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 /* failure returned by WDI API */
3153 if(IS_WDI_STATUS_FAILURE(status))
3154 {
3155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3156 "Failure in Start Scan WDI API, free all the memory "
3157 "It should be due to previous abort scan." );
3158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3159 vos_mem_free(pWdaParams) ;
3160 startScanParams->status = eSIR_FAILURE ;
3161 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 return CONVERT_WDI2VOS_STATUS(status) ;
3164}
Jeff Johnson295189b2012-06-20 16:38:30 -07003165/*
3166 * FUNCTION: WDA_EndScanReqCallback
3167 * END SCAN callback
3168 */
3169void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3170{
3171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3172 tWDA_CbContext *pWDA;
3173 tEndScanParams *endScanParam;
3174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 if(NULL == pWdaParams)
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 VOS_ASSERT(0) ;
3181 return ;
3182 }
3183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3184 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 if(NULL == endScanParam)
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 return ;
3193 }
3194
3195 /* Free WDI command buffer */
3196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3197 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003199 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* send response back to PE */
3201 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3202 return ;
3203}
3204
Jeff Johnson295189b2012-06-20 16:38:30 -07003205/*
3206 * FUNCTION: WDA_ProcessEndScanReq
3207 * Trigger END SCAN in WDI
3208 */
3209VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3210 tEndScanParams *endScanParams)
3211{
3212 WDI_Status status = WDI_STATUS_SUCCESS;
3213 WDI_EndScanReqParamsType *wdiEndScanParams =
3214 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3215 sizeof(WDI_EndScanReqParamsType)) ;
3216 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 if(NULL == wdiEndScanParams)
3220 {
3221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 VOS_ASSERT(0);
3224 return VOS_STATUS_E_NOMEM;
3225 }
3226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3227 if(NULL == pWdaParams)
3228 {
3229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 VOS_ASSERT(0);
3232 vos_mem_free(wdiEndScanParams);
3233 return VOS_STATUS_E_NOMEM;
3234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 /* Copy init Scan params to WDI structure */
3236 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3237 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 /* Store Init Req pointer, as this will be used for response */
3239 /* store Params pass it to WDI */
3240 pWdaParams->pWdaContext = pWDA;
3241 pWdaParams->wdaMsgParam = endScanParams;
3242 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 /* call DAL API to pass init scan request to DAL */
3244 status = WDI_EndScanReq(wdiEndScanParams,
3245 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 if(IS_WDI_STATUS_FAILURE(status))
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3249 "Failure in End Scan WDI API, free all the memory "
3250 "It should be due to previous abort scan." );
3251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3252 vos_mem_free(pWdaParams) ;
3253 endScanParams->status = eSIR_FAILURE ;
3254 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 return CONVERT_WDI2VOS_STATUS(status) ;
3257}
Jeff Johnson295189b2012-06-20 16:38:30 -07003258/*
3259 * FUNCTION: WDA_FinishScanReqCallback
3260 * Trigger Finish SCAN callback
3261 */
3262void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3263{
3264 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3265 tWDA_CbContext *pWDA;
3266 tFinishScanParams *finishScanParam;
3267 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003269 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 if(NULL == pWdaParams)
3271 {
3272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 VOS_ASSERT(0) ;
3275 return ;
3276 }
3277
3278 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3279 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 if(NULL == finishScanParam)
3281 {
3282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003283 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3286 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 return ;
3288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3290 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 /*
3292 * Now Resume TX, if we reached here means, TX is already suspended, we
3293 * have to resume it unconditionaly
3294 */
3295 status = WDA_ResumeDataTx(pWDA) ;
3296
3297 if(VOS_STATUS_SUCCESS != status)
3298 {
3299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003300 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003302 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3304 return ;
3305}
Jeff Johnson295189b2012-06-20 16:38:30 -07003306/*
3307 * FUNCTION: WDA_ProcessFinshScanReq
3308 * Trigger Finish SCAN in WDI
3309 */
3310VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3311 tFinishScanParams *finishScanParams)
3312{
3313 WDI_Status status = WDI_STATUS_SUCCESS;
3314 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3315 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3316 sizeof(WDI_FinishScanReqParamsType)) ;
3317 tWDA_ReqParams *pWdaParams ;
3318 tANI_U8 i = 0;
3319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 if(NULL == wdiFinishScanParams)
3322 {
3323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 VOS_ASSERT(0);
3326 return VOS_STATUS_E_NOMEM;
3327 }
3328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3329 if(NULL == pWdaParams)
3330 {
3331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 VOS_ASSERT(0);
3334 vos_mem_free(wdiFinishScanParams);
3335 return VOS_STATUS_E_NOMEM;
3336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 /* Copy init Scan params to WDI structure */
3338 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3339 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3340 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3342 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3343 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3344 finishScanParams->frameLength ;
3345 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3346 finishScanParams->currentOperChannel ;
3347 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3348 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3349 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3351 {
3352 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3353 finishScanParams->scanEntry.bssIdx[i] ;
3354 }
3355
3356
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 /* if Frame length, copy macMgmtHdr ro WDI structure */
3358 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3359 {
3360 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3361 &finishScanParams->macMgmtHdr,
3362 sizeof(WDI_MacMgmtHdr)) ;
3363 }
3364 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 /* Store Init Req pointer, as this will be used for response */
3366 /* store Params pass it to WDI */
3367 pWdaParams->pWdaContext = pWDA;
3368 pWdaParams->wdaMsgParam = finishScanParams;
3369 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 /* call DAL API to pass init scan request to DAL */
3371 status = WDI_FinishScanReq(wdiFinishScanParams,
3372 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003373
Jeff Johnson295189b2012-06-20 16:38:30 -07003374
3375 /*
3376 * WDI API returns failure..
3377 */
3378 if(IS_WDI_STATUS_FAILURE( status))
3379 {
3380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3381 "Failure in Finish Scan WDI API, free all the memory " );
3382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3383 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 finishScanParams->status = eSIR_FAILURE ;
3385 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return CONVERT_WDI2VOS_STATUS(status) ;
3388}
Jeff Johnson295189b2012-06-20 16:38:30 -07003389/*---------------------------------------------------------------------
3390 * ASSOC API's
3391 *---------------------------------------------------------------------
3392 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003393/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303394 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 * Trigger Init SCAN callback
3396 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303397void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003398{
3399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3400 tWDA_CbContext *pWDA;
3401 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 if(NULL == pWdaParams)
3405 {
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 VOS_ASSERT(0) ;
3409 return ;
3410 }
3411 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3412 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3414 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 /* reset macBSSID */
3416 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 /* reset macSTASelf */
3418 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003419 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return ;
3422}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303423
3424/*
3425 * FUNCTION: WDA_JoinReqCallback
3426 * Free memory and send SWITCH CHANNEL RSP back to PE.
3427 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3428 */
3429void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3430{
3431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3432 tWDA_CbContext *pWDA;
3433 tSwitchChannelParams *joinReqParam;
3434
3435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3436 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3437
3438 if(NULL == pWdaParams)
3439 {
3440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3441 "%s: pWdaParams received NULL", __func__);
3442 VOS_ASSERT(0);
3443 return;
3444 }
3445
3446 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3447 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3448 joinReqParam->status = wdiStatus;
3449
3450 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3451 {
3452 /* reset macBSSID */
3453 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3454 /* reset macSTASelf */
3455 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3456
3457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3458 vos_mem_free(pWdaParams);
3459 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3460 }
3461
3462 return;
3463}
3464
Jeff Johnson295189b2012-06-20 16:38:30 -07003465/*
3466 * FUNCTION: WDA_ProcessJoinReq
3467 * Trigger Join REQ in WDI
3468 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003469VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3470 tSwitchChannelParams* joinReqParam)
3471{
3472 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 WDI_JoinReqParamsType *wdiJoinReqParam =
3474 (WDI_JoinReqParamsType *)vos_mem_malloc(
3475 sizeof(WDI_JoinReqParamsType)) ;
3476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003478 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 if(NULL == wdiJoinReqParam)
3480 {
3481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003484 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 return VOS_STATUS_E_NOMEM;
3486 }
3487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3488 if(NULL == pWdaParams)
3489 {
3490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 VOS_ASSERT(0);
3493 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003494 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 return VOS_STATUS_E_NOMEM;
3496 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003497
3498 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3499 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3500 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3501 {
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3503 "%s: received join request when BSSID or self-STA is NULL "
3504 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003506 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3507 VOS_ASSERT(0);
3508 vos_mem_free(wdiJoinReqParam);
3509 vos_mem_free(pWdaParams);
3510 joinReqParam->status = eSIR_FAILURE ;
3511 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3512 return VOS_STATUS_E_INVAL;
3513 }
3514
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 /* copy the BSSID for pWDA */
3516 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3517 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3519 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3521 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003522#ifdef WLAN_FEATURE_VOWIFI
3523 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3524 joinReqParam->maxTxPower ;
3525#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3527 joinReqParam->localPowerConstraint ;
3528#endif
3529 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3530 joinReqParam->secondaryChannelOffset ;
3531 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3532
Sachin Ahuja935eda782014-07-30 14:57:41 +05303533 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3534 wdiJoinReqParam->pUserData = pWdaParams;
3535
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 /* Store Init Req pointer, as this will be used for response */
3537 /* store Params pass it to WDI */
3538 pWdaParams->pWdaContext = pWDA;
3539 pWdaParams->wdaMsgParam = joinReqParam;
3540 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303542 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 if(IS_WDI_STATUS_FAILURE(status))
3544 {
3545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3546 "Failure in Join WDI API, free all the memory " );
3547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3548 vos_mem_free(pWdaParams) ;
3549 joinReqParam->status = eSIR_FAILURE ;
3550 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 return CONVERT_WDI2VOS_STATUS(status) ;
3553}
Jeff Johnson295189b2012-06-20 16:38:30 -07003554/*
3555 * FUNCTION: WDA_SwitchChannelReqCallback
3556 * send Switch channel RSP back to PE
3557 */
3558void WDA_SwitchChannelReqCallback(
3559 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3560{
3561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3562 tWDA_CbContext *pWDA;
3563 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 if(NULL == pWdaParams)
3567 {
3568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 VOS_ASSERT(0) ;
3571 return ;
3572 }
3573 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3574 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3575
3576#ifdef WLAN_FEATURE_VOWIFI
3577 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3578#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3580 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003582 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 return ;
3585}
Jeff Johnson295189b2012-06-20 16:38:30 -07003586/*
3587 * FUNCTION: WDA_ProcessChannelSwitchReq
3588 * Request to WDI to switch channel REQ params.
3589 */
3590VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3591 tSwitchChannelParams *pSwitchChanParams)
3592{
3593 WDI_Status status = WDI_STATUS_SUCCESS ;
3594 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3595 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3596 sizeof(WDI_SwitchChReqParamsType)) ;
3597 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003599 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 if(NULL == wdiSwitchChanParam)
3601 {
3602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 VOS_ASSERT(0);
3605 return VOS_STATUS_E_NOMEM;
3606 }
3607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3608 if(NULL == pWdaParams)
3609 {
3610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 VOS_ASSERT(0);
3613 vos_mem_free(wdiSwitchChanParam);
3614 return VOS_STATUS_E_NOMEM;
3615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3617#ifndef WLAN_FEATURE_VOWIFI
3618 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3619 pSwitchChanParams->localPowerConstraint;
3620#endif
3621 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3622 pSwitchChanParams->secondaryChannelOffset;
3623 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 /* Store req pointer, as this will be used for response */
3625 /* store Params pass it to WDI */
3626 pWdaParams->pWdaContext = pWDA;
3627 pWdaParams->wdaMsgParam = pSwitchChanParams;
3628 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629#ifdef WLAN_FEATURE_VOWIFI
3630 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3631 = pSwitchChanParams->maxTxPower;
3632 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3633 pSwitchChanParams ->selfStaMacAddr,
3634 sizeof(tSirMacAddr));
3635#endif
3636 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3637 pSwitchChanParams->bssId,
3638 sizeof(tSirMacAddr));
3639
3640 status = WDI_SwitchChReq(wdiSwitchChanParam,
3641 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 if(IS_WDI_STATUS_FAILURE(status))
3643 {
3644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3645 "Failure in process channel switch Req WDI API, free all the memory " );
3646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3647 vos_mem_free(pWdaParams) ;
3648 pSwitchChanParams->status = eSIR_FAILURE ;
3649 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 return CONVERT_WDI2VOS_STATUS(status) ;
3652}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003653
3654/*
3655 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3656 * send Switch channel RSP back to PE
3657 */
3658void WDA_SwitchChannelReqCallback_V1(
3659 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3660 void* pUserData)
3661{
3662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3663 tWDA_CbContext *pWDA;
3664 tSwitchChannelParams *pSwitchChanParams;
3665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3666 "<------ %s " ,__func__);
3667
3668 if (NULL == pWdaParams)
3669 {
3670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3671 "%s: pWdaParams received NULL", __func__);
3672 VOS_ASSERT(0);
3673 return ;
3674 }
3675 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3676 pSwitchChanParams =
3677 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3678 pSwitchChanParams->channelSwitchSrc =
3679 wdiSwitchChanRsp->channelSwitchSrc;
3680#ifdef WLAN_FEATURE_VOWIFI
3681 pSwitchChanParams->txMgmtPower =
3682 wdiSwitchChanRsp->ucTxMgmtPower;
3683#endif
3684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3685 vos_mem_free(pWdaParams);
3686 pSwitchChanParams->status =
3687 wdiSwitchChanRsp->wdiStatus ;
3688 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3689 (void *)pSwitchChanParams , 0);
3690 return;
3691}
3692
3693/*
3694 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3695 * Request to WDI to switch channel REQ params.
3696 */
3697VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3698 tSwitchChannelParams *pSwitchChanParams)
3699{
3700 WDI_Status status = WDI_STATUS_SUCCESS ;
3701 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3702 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3703 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3704 tWDA_ReqParams *pWdaParams ;
3705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3706 "------> %s " ,__func__);
3707 if (NULL == wdiSwitchChanParam)
3708 {
3709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3710 "%s: VOS MEM Alloc Failure", __func__);
3711 VOS_ASSERT(0);
3712 return VOS_STATUS_E_NOMEM;
3713 }
3714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3715 if (NULL == pWdaParams)
3716 {
3717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3718 "%s: VOS MEM Alloc Failure", __func__);
3719 VOS_ASSERT(0);
3720 vos_mem_free(wdiSwitchChanParam);
3721 return VOS_STATUS_E_NOMEM;
3722 }
3723 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3724 pSwitchChanParams->channelSwitchSrc;
3725
3726 wdiSwitchChanParam->wdiChInfo.ucChannel =
3727 pSwitchChanParams->channelNumber;
3728#ifndef WLAN_FEATURE_VOWIFI
3729 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3730 pSwitchChanParams->localPowerConstraint;
3731#endif
3732 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3733 pSwitchChanParams->secondaryChannelOffset;
3734 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3735 /* Store req pointer, as this will be used for response */
3736 /* store Params pass it to WDI */
3737 pWdaParams->pWdaContext = pWDA;
3738 pWdaParams->wdaMsgParam = pSwitchChanParams;
3739 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3740#ifdef WLAN_FEATURE_VOWIFI
3741 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3742 pSwitchChanParams->maxTxPower;
3743 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3744 pSwitchChanParams ->selfStaMacAddr,
3745 sizeof(tSirMacAddr));
3746#endif
3747 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3748 pSwitchChanParams->bssId,
3749 sizeof(tSirMacAddr));
3750
3751 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3752 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3753 pWdaParams);
3754 if (IS_WDI_STATUS_FAILURE(status))
3755 {
3756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3757 "Failure in process channel switch Req WDI "
3758 "API, free all the memory " );
3759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3760 vos_mem_free(pWdaParams) ;
3761 pSwitchChanParams->status = eSIR_FAILURE ;
3762 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3763 (void *)pSwitchChanParams, 0) ;
3764 }
3765 return CONVERT_WDI2VOS_STATUS(status) ;
3766}
3767
Jeff Johnson295189b2012-06-20 16:38:30 -07003768/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303769 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 * config BSS Req Callback, called by WDI
3771 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303772void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 ,void* pUserData)
3774{
3775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3776 tWDA_CbContext *pWDA;
3777 tAddBssParams *configBssReqParam;
3778 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 if(NULL == pWdaParams)
3782 {
3783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003784 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 VOS_ASSERT(0) ;
3786 return ;
3787 }
3788 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3789 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3790 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003792 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3794 {
3795 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3796 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3798 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3799 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3800
3801 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3802 {
3803 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3804 {
3805 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3806 staConfigBssParam->staType = STA_ENTRY_BSSID;
3807 }
3808 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3809 (staConfigBssParam->staType == STA_ENTRY_SELF))
3810 {
3811 /* This is the 1st add BSS Req for the BTAMP STA */
3812 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3813 staConfigBssParam->staType = STA_ENTRY_BSSID;
3814 }
3815 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3816 (staConfigBssParam->staType == STA_ENTRY_PEER))
3817 {
3818 /* This is the 2nd ADD BSS Request that is sent
3819 * on the BTAMP STA side. The Sta type is
3820 * set to STA_ENTRY_PEER here.*/
3821 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3822 }
3823 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3824 (staConfigBssParam->staType == STA_ENTRY_SELF))
3825 {
3826 /* statype is already set by PE.
3827 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3828 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3829 staConfigBssParam->staType = STA_ENTRY_BSSID;
3830 }
3831 else
3832 {
3833 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3834 staConfigBssParam->staType = STA_ENTRY_PEER;
3835 }
3836 }
3837 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3838 {
3839 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3840 staConfigBssParam->staType = STA_ENTRY_SELF;
3841 }
3842 else
3843 {
3844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3845 "Invalid operation mode specified");
3846 VOS_ASSERT(0);
3847 }
3848
3849 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003850 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3854 sizeof(tSirMacAddr));
3855 staConfigBssParam->txChannelWidthSet =
3856 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3858 staConfigBssParam->htCapable)
3859 {
3860 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3861 wdiConfigBssRsp->ucBSSIdx;
3862 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3863 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303864 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3865 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3868 wdiConfigBssRsp->ucBSSIdx,
3869 wdiConfigBssRsp->ucSTAIdx))
3870 {
3871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003872 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 VOS_ASSERT(0) ;
3874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3876 {
3877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003878 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 VOS_ASSERT(0) ;
3880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003881#ifdef WLAN_FEATURE_VOWIFI
3882 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3883#endif
3884 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303885 else
3886 {
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3888 "%s: Failure with status %d", __func__,
3889 wdiConfigBssRsp->wdiStatus);
3890 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3891 WLAN_LOG_INDICATOR_HOST_DRIVER,
3892 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3893 FALSE, TRUE);
3894 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303895 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3896 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3898 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 return ;
3901}
Jeff Johnson295189b2012-06-20 16:38:30 -07003902/*
3903 * FUNCTION: WDA_UpdateEdcaParamsForAC
3904 * Update WDI EDCA params with PE edca params
3905 */
3906void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3907 WDI_EdcaParamRecord *wdiEdcaParam,
3908 tSirMacEdcaParamRecord *macEdcaParam)
3909{
3910 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3911 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3912 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3913 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3914 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3915 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3916}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303917void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3918 void* pUserData)
3919{
3920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3921 tWDA_CbContext *pWDA;
3922 tAddBssParams *addBssParams;
3923
3924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3925 "<------ %s, wdiStatus: %d",
3926 __func__, wdiStatus);
3927
3928 if (NULL == pWdaParams)
3929 {
3930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3931 "%s: Invalid pWdaParams pointer", __func__);
3932 VOS_ASSERT(0);
3933 return;
3934 }
3935
3936 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3937 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3938
3939 addBssParams->status = wdiStatus;
3940
3941 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3942 {
3943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3944 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303945 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3946 WLAN_LOG_INDICATOR_HOST_DRIVER,
3947 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3948 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303949 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3950 }
3951
3952 return ;
3953}
3954
Jeff Johnson295189b2012-06-20 16:38:30 -07003955/*
3956 * FUNCTION: WDA_ProcessConfigBssReq
3957 * Configure BSS before starting Assoc with AP
3958 */
3959VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3960 tAddBssParams* configBssReqParam)
3961{
3962 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303963 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003966 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303967 if (NULL == configBssReqParam)
3968 {
3969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3970 "%s: configBssReqParam is NULL", __func__);
3971 return VOS_STATUS_E_INVAL;
3972 }
3973
3974 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3975 sizeof(WDI_ConfigBSSReqParamsType)) ;
3976
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 if(NULL == wdiConfigBssReqParam)
3978 {
3979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_ASSERT(0);
3982 return VOS_STATUS_E_NOMEM;
3983 }
3984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3985 if(NULL == pWdaParams)
3986 {
3987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 VOS_ASSERT(0);
3990 vos_mem_free(wdiConfigBssReqParam);
3991 return VOS_STATUS_E_NOMEM;
3992 }
Kiran4a17ebe2013-01-31 10:43:43 -08003993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3994 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3997 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303998 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
3999 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 /* Store Init Req pointer, as this will be used for response */
4001 /* store Params pass it to WDI */
4002 pWdaParams->pWdaContext = pWDA;
4003 pWdaParams->wdaMsgParam = configBssReqParam;
4004 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304006 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 if(IS_WDI_STATUS_FAILURE(status))
4008 {
4009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4010 "Failure in Config BSS WDI API, free all the memory " );
4011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4012 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 return CONVERT_WDI2VOS_STATUS(status) ;
4017}
Jeff Johnson295189b2012-06-20 16:38:30 -07004018#ifdef ENABLE_HAL_COMBINED_MESSAGES
4019/*
4020 * FUNCTION: WDA_PostAssocReqCallback
4021 * Post ASSOC req callback, send RSP back to PE
4022 */
4023void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4024 void* pUserData)
4025{
4026 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4027 tPostAssocParams *postAssocReqParam =
4028 (tPostAssocParams *)pWDA->wdaMsgParam ;
4029 /*STA context within the BSS Params*/
4030 tAddStaParams *staPostAssocParam =
4031 &postAssocReqParam->addBssParams.staContext ;
4032 /*STA Params for self STA*/
4033 tAddStaParams *selfStaPostAssocParam =
4034 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004036 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004038 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4040 {
4041 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4042 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4043 sizeof(tSirMacAddr)) ;
4044 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4045 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4046 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004047 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4048 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304049 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004050 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4051 pWDA->wdaWdiApiMsgParam = NULL;
4052 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 return ;
4055}
Jeff Johnson295189b2012-06-20 16:38:30 -07004056/*
4057 * FUNCTION: WDA_ProcessPostAssocReq
4058 * Trigger POST ASSOC processing in WDI
4059 */
4060VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4061 tPostAssocParams *postAssocReqParam)
4062{
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 WDI_Status status = WDI_STATUS_SUCCESS ;
4064
4065 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4066 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4067 sizeof(WDI_PostAssocReqParamsType)) ;
4068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004070
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 if(NULL == wdiPostAssocReqParam)
4072 {
4073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_ASSERT(0);
4076 return VOS_STATUS_E_NOMEM;
4077 }
4078
4079 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004082 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 VOS_ASSERT(0);
4084 return VOS_STATUS_E_FAILURE;
4085 }
4086
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 /* update BSS params into WDI structure */
4088 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4089 &postAssocReqParam->addBssParams) ;
4090 /* update STA params into WDI structure */
4091 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4092 &postAssocReqParam->addStaParams) ;
4093
4094 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4095 postAssocReqParam->addBssParams.highPerformance;
4096 WDA_UpdateEdcaParamsForAC(pWDA,
4097 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4098 &postAssocReqParam->addBssParams.acbe);
4099 WDA_UpdateEdcaParamsForAC(pWDA,
4100 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4101 &postAssocReqParam->addBssParams.acbk);
4102 WDA_UpdateEdcaParamsForAC(pWDA,
4103 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4104 &postAssocReqParam->addBssParams.acvi);
4105 WDA_UpdateEdcaParamsForAC(pWDA,
4106 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4107 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 /* Store Init Req pointer, as this will be used for response */
4109 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 /* store Params pass it to WDI */
4111 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4113 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 if(IS_WDI_STATUS_FAILURE(status))
4115 {
4116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4117 "Failure in Post Assoc WDI API, free all the memory " );
4118 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4119 pWDA->wdaWdiApiMsgParam = NULL;
4120 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 return CONVERT_WDI2VOS_STATUS(status) ;
4125}
4126#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004127/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304128 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 * ADD STA req callback, send RSP back to PE
4130 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304131void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 void* pUserData)
4133{
4134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4135 tWDA_CbContext *pWDA;
4136 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004138 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 if(NULL == pWdaParams)
4140 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 VOS_ASSERT(0) ;
4143 return ;
4144 }
4145 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4146 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004148 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4150 {
4151 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4152 /*TODO: UMAC structure doesn't have these fields*/
4153 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4154 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4155 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4156 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4157 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4158 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004159#ifdef FEATURE_WLAN_TDLS
4160 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4161 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4162#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004164#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 {
4166 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4167 wdiConfigStaRsp->ucBssIdx;
4168 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4169 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304170 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4171 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 }
4173 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4174 {
4175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 VOS_ASSERT(0) ;
4178 return ;
4179 }
4180 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304181 else
4182 {
4183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4184 "%s: Failure with status %d", __func__,
4185 wdiConfigStaRsp->wdiStatus);
4186 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4187 WLAN_LOG_INDICATOR_HOST_DRIVER,
4188 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4189 FALSE, TRUE);
4190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4192 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 return ;
4195}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304196void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4197 void* pUserData)
4198{
4199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4200 tWDA_CbContext *pWDA;
4201 tAddStaParams *addStaParams;
4202
4203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4204 "<------ %s, wdiStatus: %d",
4205 __func__, wdiStatus);
4206
4207 if (NULL == pWdaParams)
4208 {
4209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4210 "%s: Invalid pWdaParams pointer", __func__);
4211 VOS_ASSERT(0);
4212 return;
4213 }
4214
4215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4216 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4217
4218 addStaParams->status = wdiStatus;
4219
4220 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4221 {
4222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4223 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304224 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4225 WLAN_LOG_INDICATOR_HOST_DRIVER,
4226 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4227 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304228 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4229 }
4230
4231 return ;
4232}
4233
Jeff Johnson295189b2012-06-20 16:38:30 -07004234/*
4235 * FUNCTION: WDA_ConfigStaReq
4236 * Trigger Config STA processing in WDI
4237 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304238VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 tAddStaParams *addStaReqParam)
4240{
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4243 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4244 sizeof(WDI_ConfigSTAReqParamsType)) ;
4245 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 if(NULL == wdiConfigStaReqParam)
4249 {
4250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 VOS_ASSERT(0);
4253 return VOS_STATUS_E_NOMEM;
4254 }
4255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4256 if(NULL == pWdaParams)
4257 {
4258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 VOS_ASSERT(0);
4261 vos_mem_free(wdiConfigStaReqParam);
4262 return VOS_STATUS_E_NOMEM;
4263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 /* update STA params into WDI structure */
4266 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4267 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304268 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4269 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 /* Store Init Req pointer, as this will be used for response */
4271 /* store Params pass it to WDI */
4272 pWdaParams->pWdaContext = pWDA;
4273 pWdaParams->wdaMsgParam = addStaReqParam;
4274 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304275
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304277 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 if(IS_WDI_STATUS_FAILURE(status))
4279 {
4280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4281 "Failure in Config STA WDI API, free all the memory " );
4282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4283 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 return CONVERT_WDI2VOS_STATUS(status) ;
4288}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304289
Jeff Johnson295189b2012-06-20 16:38:30 -07004290/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304291 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304293 */
4294void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 void* pUserData)
4296{
4297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4298 tWDA_CbContext *pWDA;
4299 tDeleteBssParams *delBssReqParam;
4300 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 if(NULL == pWdaParams)
4304 {
4305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004306 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 VOS_ASSERT(0) ;
4308 return ;
4309 }
4310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4311 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004312 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4314 {
4315 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4316 sizeof(tSirMacAddr)) ;
4317 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304318 else
4319 {
4320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4321 "%s: Failure with status %d", __func__,
4322 wdiDelBssRsp->wdiStatus);
4323 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4324 WLAN_LOG_INDICATOR_HOST_DRIVER,
4325 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4326 FALSE, TRUE);
4327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4329 {
4330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004331 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 VOS_ASSERT(0) ;
4333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4335 {
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004337 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 VOS_ASSERT(0) ;
4339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4341 {
4342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004343 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 VOS_ASSERT(0) ;
4345 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304346
4347 WLANTL_StartForwarding(staIdx,0,0);
4348
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4350 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 /* reset the the system role*/
4352 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4353
4354 /* Reset the BA related information */
4355 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4356 {
4357 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4358 {
4359 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4360 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304361 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 /* Reset framesTxed counters here */
4363 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4364 {
4365 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4366 }
4367 }
4368 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304369
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 return ;
4372}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304373void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4374 void* pUserData)
4375{
4376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4377 tWDA_CbContext *pWDA;
4378 tDeleteBssParams *delbssParams;
4379
4380 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4381 "<------ %s, wdiStatus: %d",
4382 __func__, wdiStatus);
4383
4384 if (NULL == pWdaParams)
4385 {
4386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4387 "%s: Invalid pWdaParams pointer", __func__);
4388 VOS_ASSERT(0);
4389 return;
4390 }
4391
4392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4393 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4394
4395 delbssParams->status = wdiStatus ;
4396
4397 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4398 {
4399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4400 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304401 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4402 WLAN_LOG_INDICATOR_HOST_DRIVER,
4403 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4404 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304405 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4406 }
4407
4408 return ;
4409}
Jeff Johnson295189b2012-06-20 16:38:30 -07004410
Jeff Johnson295189b2012-06-20 16:38:30 -07004411/*
4412 * FUNCTION: WDA_ProcessDelBssReq
4413 * Init DEL BSS req with WDI
4414 */
4415VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4416 tDeleteBssParams *delBssParam)
4417{
4418 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4420 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4421 sizeof(WDI_DelBSSReqParamsType)) ;
4422 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004424 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 if(NULL == wdiDelBssReqParam)
4426 {
4427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 VOS_ASSERT(0);
4430 return VOS_STATUS_E_NOMEM;
4431 }
4432 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4433 if(NULL == pWdaParams)
4434 {
4435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 VOS_ASSERT(0);
4438 vos_mem_free(wdiDelBssReqParam);
4439 return VOS_STATUS_E_NOMEM;
4440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304442 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4443 wdiDelBssReqParam->pUserData = pWdaParams;
4444
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 /* Store Init Req pointer, as this will be used for response */
4446 /* store Params pass it to WDI */
4447 pWdaParams->pWdaContext = pWDA;
4448 pWdaParams->wdaMsgParam = delBssParam;
4449 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304450
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304452 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 if(IS_WDI_STATUS_FAILURE(status))
4454 {
4455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4456 "Failure in Del BSS WDI API, free all the memory " );
4457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4458 vos_mem_free(pWdaParams) ;
4459 delBssParam->status = eSIR_FAILURE ;
4460 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 return CONVERT_WDI2VOS_STATUS(status) ;
4463}
Jeff Johnson295189b2012-06-20 16:38:30 -07004464/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304465 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304467 */
4468void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 void* pUserData)
4470{
4471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4472 tWDA_CbContext *pWDA;
4473 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 if(NULL == pWdaParams)
4477 {
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004479 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304480 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 return ;
4482 }
4483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4484 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004485 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4487 {
4488 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4489 {
4490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004491 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 VOS_ASSERT(0) ;
4493 }
4494 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304495 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304497 else
4498 {
4499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4500 "%s: Failure with status %d", __func__,
4501 wdiDelStaRsp->wdiStatus);
4502 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4503 WLAN_LOG_INDICATOR_HOST_DRIVER,
4504 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4505 FALSE, TRUE);
4506 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4508 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 /*Reset the BA information corresponding to this STAIdx */
4510 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4511 WDA_INVALID_STA_INDEX;
4512 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304513 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 return ;
4516}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304517void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4518 void* pUserData)
4519{
4520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4521 tWDA_CbContext *pWDA;
4522 tDeleteStaParams *delStaParams;
4523
4524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4525 "<------ %s, wdiStatus: %d",
4526 __func__, wdiStatus);
4527
4528 if (NULL == pWdaParams)
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4531 "%s: Invalid pWdaParams pointer", __func__);
4532 VOS_ASSERT(0);
4533 return;
4534 }
4535
4536 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4537 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4538
4539 delStaParams->status = wdiStatus ;
4540
4541 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4542 {
4543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4544 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304545 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4546 WLAN_LOG_INDICATOR_HOST_DRIVER,
4547 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4548 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304549 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4550 }
4551
4552 return ;
4553}
4554
Jeff Johnson295189b2012-06-20 16:38:30 -07004555/*
4556 * FUNCTION: WDA_ProcessDelStaReq
4557 * Init DEL STA req with WDI
4558 */
4559VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4560 tDeleteStaParams *delStaParam)
4561{
4562 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4564 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4565 sizeof(WDI_DelSTAReqParamsType)) ;
4566 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004568 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 if(NULL == wdiDelStaReqParam)
4570 {
4571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 VOS_ASSERT(0);
4574 return VOS_STATUS_E_NOMEM;
4575 }
4576 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4577 if(NULL == pWdaParams)
4578 {
4579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 VOS_ASSERT(0);
4582 vos_mem_free(wdiDelStaReqParam);
4583 return VOS_STATUS_E_NOMEM;
4584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304586 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4587 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 /* Store Init Req pointer, as this will be used for response */
4589 /* store Params pass it to WDI */
4590 pWdaParams->pWdaContext = pWDA;
4591 pWdaParams->wdaMsgParam = delStaParam;
4592 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304593
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304595 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 if(IS_WDI_STATUS_FAILURE(status))
4597 {
4598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4599 "Failure in Del STA WDI API, free all the memory status = %d",
4600 status );
4601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4602 vos_mem_free(pWdaParams) ;
4603 delStaParam->status = eSIR_FAILURE ;
4604 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 return CONVERT_WDI2VOS_STATUS(status) ;
4607}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304608void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004609{
4610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4611 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304612 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004614 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 if(NULL == pWdaParams)
4616 {
4617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004618 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 VOS_ASSERT(0) ;
4620 return ;
4621 }
4622 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4623 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4625 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4627 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4628 pwdiAddSTASelfRsp->macSelfSta,
4629 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304630 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4631 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4632 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4633 {
4634 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4635 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4637 "%s: Failure with status %d failcnter %d", __func__,
4638 pwdiAddSTASelfRsp->wdiStatus,
4639 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4640 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4641 WLAN_LOG_INDICATOR_HOST_DRIVER,
4642 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4643 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 return ;
4647}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304648void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4649 void* pUserData)
4650{
4651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4652 tWDA_CbContext *pWDA;
4653 tAddStaSelfParams *addStaSelfParams;
4654
4655 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4656 "<------ %s, wdiStatus: %d",
4657 __func__, wdiStatus);
4658
4659 if (NULL == pWdaParams)
4660 {
4661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4662 "%s: Invalid pWdaParams pointer", __func__);
4663 VOS_ASSERT(0);
4664 return;
4665 }
4666
4667 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4668 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4669
4670 addStaSelfParams->status = wdiStatus ;
4671
4672 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4673 {
4674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4675 vos_mem_free(pWdaParams) ;
4676 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4677 = WDA_ADDSTA_REQ_WDI_FAIL;
4678 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4680 "%s: Failure with status %d failcnter %d", __func__,
4681 wdiStatus,
4682 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4683 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4684 WLAN_LOG_INDICATOR_HOST_DRIVER,
4685 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4686 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304687 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4688 }
4689
4690 return ;
4691}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304692
Jeff Johnson295189b2012-06-20 16:38:30 -07004693/*
4694 * FUNCTION: WDA_ProcessAddStaSelfReq
4695 *
4696 */
4697VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4698{
4699 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004700 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4702 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4703 sizeof(WDI_AddSTASelfReqParamsType)) ;
4704 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004706 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304707 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 if( NULL == wdiAddStaSelfReq )
4709 {
4710 VOS_ASSERT( 0 );
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304713 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4714 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 return( VOS_STATUS_E_NOMEM );
4716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 if( NULL == pWdaParams )
4719 {
4720 VOS_ASSERT( 0 );
4721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004722 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304723 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4724 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 vos_mem_free(wdiAddStaSelfReq) ;
4726 return( VOS_STATUS_E_NOMEM );
4727 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304728 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4729 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004731 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 /* Store Init Req pointer, as this will be used for response */
4733 /* store Params pass it to WDI */
4734 pWdaParams->pWdaContext = pWDA;
4735 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304736 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4737
4738 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4739 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004740
Jeff Johnson43971f52012-07-17 12:26:56 -07004741 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 {
4743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4744 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004745 wstatus );
4746 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4748 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304749 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4750 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 pAddStaSelfReq->status = eSIR_FAILURE ;
4752 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4753 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004754 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004755}
Jeff Johnson295189b2012-06-20 16:38:30 -07004756/*
4757 * FUNCTION: WDA_DelSTASelfRespCallback
4758 *
4759 */
4760void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4761 wdiDelStaSelfRspParams , void* pUserData)
4762{
4763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4764 tWDA_CbContext *pWDA;
4765 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if (NULL == pWdaParams)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004771 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 VOS_ASSERT(0);
4773 return;
4774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4776 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004778 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004779
4780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4781 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304782 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh231cc4b2015-12-14 12:31:42 +05304783 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4785 "%s: Failure with status %d", __func__,
4786 wdiDelStaSelfRspParams->wdiStatus);
4787 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4788 WLAN_LOG_INDICATOR_HOST_DRIVER,
4789 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4790 FALSE, TRUE);
Abhishek Singh231cc4b2015-12-14 12:31:42 +05304791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 return ;
4794}
Jeff Johnson295189b2012-06-20 16:38:30 -07004795/*
4796 * FUNCTION: WDA_DelSTASelfReqCallback
4797 *
4798 */
4799void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4800 void* pUserData)
4801{
4802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4803 tWDA_CbContext *pWDA;
4804 tDelStaSelfParams *delStaSelfParams;
4805
4806 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304807 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004808 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004809
4810 if (NULL == pWdaParams)
4811 {
4812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004813 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 VOS_ASSERT(0);
4815 return;
4816 }
4817
4818 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4819 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4820
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004821 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004822
4823 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4824 {
4825 VOS_ASSERT(0);
4826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4827 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304828 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4829 WLAN_LOG_INDICATOR_HOST_DRIVER,
4830 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4831 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4833 }
4834
4835 return ;
4836}
4837
4838/*
4839 * FUNCTION: WDA_DelSTASelfReq
4840 * Trigger Config STA processing in WDI
4841 */
4842VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4843 tDelStaSelfParams* pDelStaSelfReqParam)
4844{
4845 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004846 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 tWDA_ReqParams *pWdaParams = NULL;
4848 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4849 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4850 sizeof(WDI_DelSTASelfReqParamsType)) ;
4851
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 if( NULL == wdiDelStaSelfReq )
4855 {
4856 VOS_ASSERT( 0 );
4857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 return( VOS_STATUS_E_NOMEM );
4860 }
4861
4862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4863 if( NULL == pWdaParams )
4864 {
4865 VOS_ASSERT( 0 );
4866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004867 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 vos_mem_free(wdiDelStaSelfReq) ;
4869 return( VOS_STATUS_E_NOMEM );
4870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 pWdaParams->pWdaContext = pWDA;
4872 /* Store param pointer as passed in by caller */
4873 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4874 /* store Params pass it to WDI */
4875 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4877 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4878
4879 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4880 wdiDelStaSelfReq->pUserData = pWdaParams;
4881
Jeff Johnson43971f52012-07-17 12:26:56 -07004882 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4884
Jeff Johnson43971f52012-07-17 12:26:56 -07004885 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4888 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4889 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004890 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4892 vos_mem_free(pWdaParams) ;
4893 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4894 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4895 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004896 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897}
4898
Jeff Johnson295189b2012-06-20 16:38:30 -07004899/*
4900 * FUNCTION: WDA_SendMsg
4901 * Send Message back to PE
4902 */
4903void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4904 void *pBodyptr, tANI_U32 bodyVal)
4905{
4906 tSirMsgQ msg = {0} ;
4907 tANI_U32 status = VOS_STATUS_SUCCESS ;
4908 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 msg.type = msgType;
4910 msg.bodyval = bodyVal;
4911 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 if (VOS_STATUS_SUCCESS != status)
4914 {
4915 if(NULL != pBodyptr)
4916 {
4917 vos_mem_free(pBodyptr);
4918 }
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004920 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 VOS_ASSERT(0) ;
4922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 return ;
4924}
Jeff Johnson295189b2012-06-20 16:38:30 -07004925/*
4926 * FUNCTION: WDA_UpdateBSSParams
4927 * Translated WDA/PE BSS info into WDI BSS info..
4928 */
4929void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4930 WDI_ConfigBSSReqInfoType *wdiBssParams,
4931 tAddBssParams *wdaBssParams)
4932{
4933 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304934 v_U8_t i = 0;
4935
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 /* copy bssReq Params to WDI structure */
4937 vos_mem_copy(wdiBssParams->macBSSID,
4938 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4939 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4940 sizeof(tSirMacAddr)) ;
4941 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4942 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4943 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiBssParams->ucShortSlotTimeSupported =
4945 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4947 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4948 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4949 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4950 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4951
4952 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4953 wdiBssParams->ucTXOPProtectionFullSupport =
4954 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4956 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4959 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4960 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4961 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4962
Chet Lanctot186b5732013-03-18 10:26:30 -07004963 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4964
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 /* copy SSID into WDI structure */
4966 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4967 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4968 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4970 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972#ifdef WLAN_FEATURE_VOWIFI
4973 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4974#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004977#ifdef WLAN_FEATURE_VOWIFI_11R
4978 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 if(wdiBssParams->bExtSetStaKeyParamValid)
4980 {
4981 /* copy set STA key params to WDI structure */
4982 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4983 wdaBssParams->extSetStaKeyParam.staIdx;
4984 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4985 wdaBssParams->extSetStaKeyParam.encType;
4986 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4987 wdaBssParams->extSetStaKeyParam.wepType;
4988 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4989 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4991 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004992 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4994 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4995 {
4996 WDA_GetWepKeysFromCfg( pWDA,
4997 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4998 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4999 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5000 }
5001 else
5002 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5004 keyIndex++)
5005 {
5006 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5007 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5008 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5009 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5010 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5011 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305012
5013 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5014 {
5015 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5016 {
5017 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5018 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5019 }
5020
5021 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5022 {
5023 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5024 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5025 }
5026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5027 FL("%s: Negated Keys"), __func__);
5028 }
5029 else
5030 {
5031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5032 FL("%s: No change in Keys "), __func__);
5033 vos_mem_copy(
5034 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5035 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5036 WLAN_MAX_KEY_RSC_LEN);
5037 vos_mem_copy(
5038 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5039 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5040 SIR_MAC_MAX_KEY_LENGTH);
5041 }
5042
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5044 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5045 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5046 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305048 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 }
5051 }
5052 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5053 }
5054 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5055 {
5056 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5057 sizeof(wdaBssParams->extSetStaKeyParam) );
5058 }
5059#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005060#ifdef WLAN_FEATURE_11AC
5061 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5062 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5063#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005064
5065 return ;
5066}
Jeff Johnson295189b2012-06-20 16:38:30 -07005067/*
5068 * FUNCTION: WDA_UpdateSTAParams
5069 * Translated WDA/PE BSS info into WDI BSS info..
5070 */
5071void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5072 WDI_ConfigStaReqInfoType *wdiStaParams,
5073 tAddStaParams *wdaStaParams)
5074{
5075 tANI_U8 i = 0;
5076 /* Update STA params */
5077 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5078 sizeof(tSirMacAddr)) ;
5079 wdiStaParams->usAssocId = wdaStaParams->assocId;
5080 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005081 wdiStaParams->staIdx = wdaStaParams->staIdx;
5082
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 wdiStaParams->ucShortPreambleSupported =
5084 wdaStaParams->shortPreambleSupported;
5085 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5086 sizeof(tSirMacAddr)) ;
5087 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5088
5089 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5090
5091 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5092 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5093 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5094 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5095 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5096 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5097 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5098
5099 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5100 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 wdiStaParams->wdiSupportedRates.opRateMode =
5102 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5104 {
5105 wdiStaParams->wdiSupportedRates.llbRates[i] =
5106 wdaStaParams->supportedRates.llbRates[i];
5107 }
5108 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5109 {
5110 wdiStaParams->wdiSupportedRates.llaRates[i] =
5111 wdaStaParams->supportedRates.llaRates[i];
5112 }
5113 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5114 {
5115 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5116 wdaStaParams->supportedRates.aniLegacyRates[i];
5117 }
5118 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5119 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005120#ifdef WLAN_FEATURE_11AC
5121 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5122 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5123 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5124 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5125#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5127 {
5128 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5129 wdaStaParams->supportedRates.supportedMCSSet[i];
5130 }
5131 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5132 wdaStaParams->supportedRates.rxHighestDataRate;
5133
5134 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5135
5136 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5137
5138 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5139 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5140 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5141
5142 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5143 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5144 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5145 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005147#ifdef WLAN_FEATURE_11AC
5148 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5149 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005150 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305151 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5152 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5153 * must be set by default */
5154 if ( wdiStaParams->vhtTxMUBformeeCapable )
5155 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005156#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005157 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5158 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 return ;
5160}
Jeff Johnson295189b2012-06-20 16:38:30 -07005161/*
5162 * -------------------------------------------------------------------------
5163 * CFG update to WDI
5164 * -------------------------------------------------------------------------
5165 */
5166
5167 /*
5168 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5169 * Convert the WNI CFG ID to HAL CFG ID
5170 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005171static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005172{
5173 switch(wniCfgId)
5174 {
5175 case WNI_CFG_STA_ID:
5176 return QWLAN_HAL_CFG_STA_ID;
5177 case WNI_CFG_CURRENT_TX_ANTENNA:
5178 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5179 case WNI_CFG_CURRENT_RX_ANTENNA:
5180 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5181 case WNI_CFG_LOW_GAIN_OVERRIDE:
5182 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5183 case WNI_CFG_POWER_STATE_PER_CHAIN:
5184 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5185 case WNI_CFG_CAL_PERIOD:
5186 return QWLAN_HAL_CFG_CAL_PERIOD;
5187 case WNI_CFG_CAL_CONTROL:
5188 return QWLAN_HAL_CFG_CAL_CONTROL;
5189 case WNI_CFG_PROXIMITY:
5190 return QWLAN_HAL_CFG_PROXIMITY;
5191 case WNI_CFG_NETWORK_DENSITY:
5192 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5193 case WNI_CFG_MAX_MEDIUM_TIME:
5194 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5195 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5196 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5197 case WNI_CFG_RTS_THRESHOLD:
5198 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5199 case WNI_CFG_SHORT_RETRY_LIMIT:
5200 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5201 case WNI_CFG_LONG_RETRY_LIMIT:
5202 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5203 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5204 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5205 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5206 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5207 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5208 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5209 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5210 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5211 case WNI_CFG_FIXED_RATE:
5212 return QWLAN_HAL_CFG_FIXED_RATE;
5213 case WNI_CFG_RETRYRATE_POLICY:
5214 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5215 case WNI_CFG_RETRYRATE_SECONDARY:
5216 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5217 case WNI_CFG_RETRYRATE_TERTIARY:
5218 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5219 case WNI_CFG_FORCE_POLICY_PROTECTION:
5220 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5221 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5222 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5223 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5224 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5225 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5226 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5227 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5228 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5229 case WNI_CFG_MAX_BA_SESSIONS:
5230 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5231 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5232 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5233 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5234 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5235 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5236 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5237 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5238 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5239 case WNI_CFG_STATS_PERIOD:
5240 return QWLAN_HAL_CFG_STATS_PERIOD;
5241 case WNI_CFG_CFP_MAX_DURATION:
5242 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5243#if 0 /*This is not part of CFG*/
5244 case WNI_CFG_FRAME_TRANS_ENABLED:
5245 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5246#endif
5247 case WNI_CFG_DTIM_PERIOD:
5248 return QWLAN_HAL_CFG_DTIM_PERIOD;
5249 case WNI_CFG_EDCA_WME_ACBK:
5250 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5251 case WNI_CFG_EDCA_WME_ACBE:
5252 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5253 case WNI_CFG_EDCA_WME_ACVI:
5254 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5255 case WNI_CFG_EDCA_WME_ACVO:
5256 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5257#if 0
5258 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5259 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5260 case WNI_CFG_TELE_BCN_TRANS_LI:
5261 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5262 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5263 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5264 case WNI_CFG_TELE_BCN_MAX_LI:
5265 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5266 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5267 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5268#endif
5269 case WNI_CFG_ENABLE_CLOSE_LOOP:
5270 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005271 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5272 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305273 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5274 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 default:
5276 {
5277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005278 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 wniCfgId);
5280 return VOS_STATUS_E_INVAL;
5281 }
5282 }
5283}
Jeff Johnson295189b2012-06-20 16:38:30 -07005284/*
5285 * FUNCTION: WDA_UpdateCfgCallback
5286 *
5287 */
5288void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5289{
5290 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5291 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5292 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 /*
5296 * currently there is no response message is expected between PE and
5297 * WDA, Failure return from WDI is a ASSERT condition
5298 */
5299 if(WDI_STATUS_SUCCESS != wdiStatus)
5300 {
5301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005302 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5304 }
5305
5306 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5307 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5308 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 return ;
5310}
Jeff Johnson295189b2012-06-20 16:38:30 -07005311/*
5312 * FUNCTION: WDA_UpdateCfg
5313 *
5314 */
5315VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5316{
5317
5318 WDI_Status status = WDI_STATUS_SUCCESS ;
5319 tANI_U32 val =0;
5320 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5321 tHalCfg *configData;
5322 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5323 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005325 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 if (NULL == pMac )
5327 {
5328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005329 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 return VOS_STATUS_E_FAILURE;
5331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(WDA_START_STATE != pWDA->wdaState)
5333 {
5334 return VOS_STATUS_E_FAILURE;
5335 }
5336
5337 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5338 {
5339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005340 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 VOS_ASSERT(0);
5342 return VOS_STATUS_E_FAILURE;
5343 }
5344
5345 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5346 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 if(NULL == wdiCfgReqParam)
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 VOS_ASSERT(0);
5352 return VOS_STATUS_E_NOMEM;
5353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5355 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 if(NULL == wdiCfgReqParam->pConfigBuffer)
5357 {
5358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 vos_mem_free(wdiCfgReqParam);
5361 VOS_ASSERT(0);
5362 return VOS_STATUS_E_NOMEM;
5363 }
5364
5365 /*convert the WNI CFG Id to HAL CFG Id*/
5366 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5367 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5368
5369 /*TODO: revisit this for handling string parameters */
5370 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5371 &val) != eSIR_SUCCESS)
5372 {
5373 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005374 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5376 vos_mem_free(wdiCfgReqParam);
5377 return eSIR_FAILURE;
5378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5380 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5381 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5382 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5383 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5384
5385 /* store Params pass it to WDI */
5386 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005387#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5388 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5389 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 if(IS_WDI_STATUS_FAILURE(status))
5391 {
5392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5393 "Failure in Update CFG WDI API, free all the memory " );
5394 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5395 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5396 pWDA->wdaWdiCfgApiMsgParam = NULL;
5397 /* Failure is not expected */
5398 VOS_ASSERT(0) ;
5399 }
5400#else
5401 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5402 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5403 pWDA->wdaWdiCfgApiMsgParam = NULL;
5404#endif
5405 return CONVERT_WDI2VOS_STATUS(status) ;
5406}
5407
Jeff Johnson295189b2012-06-20 16:38:30 -07005408VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5409 v_U8_t *pDefaultKeyId,
5410 v_U8_t *pNumKeys,
5411 WDI_KeysType *pWdiKeys )
5412{
5413 v_U32_t i, j, defKeyId = 0;
5414 v_U32_t val = SIR_MAC_KEY_LENGTH;
5415 VOS_STATUS status = WDI_STATUS_SUCCESS;
5416 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 if (NULL == pMac )
5418 {
5419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005420 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 return VOS_STATUS_E_FAILURE;
5422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5424 &defKeyId ))
5425 {
5426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5427 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5428 }
5429
5430 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* Need to extract ALL of the configured WEP Keys */
5432 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5433 {
5434 val = SIR_MAC_KEY_LENGTH;
5435 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5436 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5437 pWdiKeys[j].key,
5438 &val ))
5439 {
5440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005441 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 }
5443 else
5444 {
5445 pWdiKeys[j].keyId = (tANI_U8) i;
5446 /*
5447 * Actually, a DC (Don't Care) because
5448 * this is determined (and set) by PE/MLME
5449 */
5450 pWdiKeys[j].unicast = 0;
5451 /*
5452 * Another DC (Don't Care)
5453 */
5454 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5455 /* Another DC (Don't Care). Unused for WEP */
5456 pWdiKeys[j].paeRole = 0;
5457 /* Determined from wlan_cfgGetStr() above.*/
5458 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 j++;
5460 *pNumKeys = (tANI_U8) j;
5461 }
5462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 return status;
5464}
Jeff Johnson295189b2012-06-20 16:38:30 -07005465/*
5466 * FUNCTION: WDA_SetBssKeyReqCallback
5467 * send SET BSS key RSP back to PE
5468 */
5469void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5470{
5471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5472 tWDA_CbContext *pWDA;
5473 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 if(NULL == pWdaParams)
5477 {
5478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005479 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 VOS_ASSERT(0) ;
5481 return ;
5482 }
5483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5484 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305485 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5486 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5488 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005489 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 return ;
5492}
Jeff Johnson295189b2012-06-20 16:38:30 -07005493/*
5494 * FUNCTION: WDA_ProcessSetBssKeyReq
5495 * Request to WDI for programming the BSS key( key for
5496 * broadcast/multicast frames Encryption)
5497 */
5498VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5499 tSetBssKeyParams *setBssKeyParams )
5500{
5501 WDI_Status status = WDI_STATUS_SUCCESS ;
5502 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5503 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5504 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005508 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 if(NULL == wdiSetBssKeyParam)
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 VOS_ASSERT(0);
5514 return VOS_STATUS_E_NOMEM;
5515 }
5516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5517 if(NULL == pWdaParams)
5518 {
5519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 VOS_ASSERT(0);
5522 vos_mem_free(wdiSetBssKeyParam);
5523 return VOS_STATUS_E_NOMEM;
5524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 /* copy set BSS params to WDI structure */
5527 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5528 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5529 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 if(setBssKeyParams->encType != eSIR_ED_NONE)
5531 {
5532 if( setBssKeyParams->numKeys == 0 &&
5533 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5534 setBssKeyParams->encType == eSIR_ED_WEP104))
5535 {
5536 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5538 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5539 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5540 }
5541 else
5542 {
5543 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5544 {
5545 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5546 setBssKeyParams->key[keyIndex].keyId;
5547 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5548 setBssKeyParams->key[keyIndex].unicast;
5549 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5550 setBssKeyParams->key[keyIndex].keyDirection;
5551 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5552 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5553 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5554 setBssKeyParams->key[keyIndex].paeRole;
5555 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5556 setBssKeyParams->key[keyIndex].keyLength;
5557 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5558 setBssKeyParams->key[keyIndex].key,
5559 SIR_MAC_MAX_KEY_LENGTH);
5560 }
5561 }
5562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5564 setBssKeyParams->singleTidRc;
5565 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 /* Store set key pointer, as this will be used for response */
5567 /* store Params pass it to WDI */
5568 pWdaParams->pWdaContext = pWDA;
5569 pWdaParams->wdaMsgParam = setBssKeyParams;
5570 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5572 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5573
5574 if(IS_WDI_STATUS_FAILURE(status))
5575 {
5576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5577 "Failure in Set BSS Key Req WDI API, free all the memory " );
5578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5579 vos_mem_free(pWdaParams) ;
5580 setBssKeyParams->status = eSIR_FAILURE ;
5581 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 return CONVERT_WDI2VOS_STATUS(status) ;
5584}
Jeff Johnson295189b2012-06-20 16:38:30 -07005585/*
5586 * FUNCTION: WDA_RemoveBssKeyReqCallback
5587 * send SET BSS key RSP back to PE
5588 */
5589void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5590{
5591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5592 tWDA_CbContext *pWDA;
5593 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 if(NULL == pWdaParams)
5597 {
5598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005599 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005600 VOS_ASSERT(0) ;
5601 return ;
5602 }
5603 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5604 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5606 vos_mem_free(pWdaParams) ;
5607
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005608 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 return ;
5611}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305612
5613/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305614 * FUNCTION: WDA_GetFrameLogRspCallback
5615 * recieves get frame log response from FW
5616 */
5617void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5618 void* pUserData)
5619{
5620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5621 tWDA_CbContext *pWDA = NULL;
5622 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5623
5624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5625 "<------ Entering: %s " ,__func__);
5626 if(NULL == pWdaParams)
5627 {
5628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5629 "%s: pWdaParams received NULL", __func__);
5630 VOS_ASSERT(0) ;
5631 return ;
5632 }
5633
5634 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5635 if (NULL == pWDA)
5636 {
5637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5638 "%s:pWDA is NULL", __func__);
5639 VOS_ASSERT(0);
5640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5641 vos_mem_free(pWdaParams);
5642 return ;
5643 }
5644
5645 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5646 if(NULL == pGetFrameLogReqParams)
5647 {
5648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5649 "%s: pGetFrameLogReqParams received NULL", __func__);
5650 VOS_ASSERT(0);
5651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5652 vos_mem_free(pWdaParams);
5653 return;
5654 }
5655
Siddharth Bhal64246172015-02-27 01:04:37 +05305656 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305658 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5659 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305660 }
5661
5662 /* free WDI command buffer only */
5663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5664 vos_mem_free(pWdaParams->wdaMsgParam);
5665 vos_mem_free(pWdaParams);
5666
5667 return ;
5668
5669}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305670
5671/*
5672 * FUNCTION: WDA_RssiMonitorStopRspCallback
5673 * recieves Rssi Monitor stop response from FW
5674 */
5675void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5676 void* pUserData)
5677{
5678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5679 tSirRssiMonitorReq *pRssiMonitorReqParams;
5680
5681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5682 "<------ %s " ,__func__);
5683
5684 if(NULL == pWdaParams)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5687 "%s: pWdaParams received NULL", __func__);
5688 VOS_ASSERT(0);
5689 return ;
5690 }
5691
5692 if(NULL == pWdaParams->wdaMsgParam)
5693 {
5694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5695 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5696 VOS_ASSERT(0);
5697 vos_mem_free(pWdaParams);
5698 return ;
5699 }
5700
5701 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5702
5703 if(pRssiMonitorReqParams->rssiMonitorCallback)
5704 {
5705 pRssiMonitorReqParams->rssiMonitorCallback(
5706 pRssiMonitorReqParams->rssiMonitorCbContext,
5707 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5708 }
5709 else
5710 {
5711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5712 "%s: pFWLoggingInitParams callback is NULL", __func__);
5713 }
5714
5715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5716 vos_mem_free(pWdaParams->wdaMsgParam);
5717 vos_mem_free(pWdaParams);
5718
5719 return;
5720}
5721
5722/*
5723 * FUNCTION: WDA_RssiMonitorStartRspCallback
5724 * recieves Rssi Monitor start response from FW
5725 */
5726void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5727 void* pUserData)
5728{
5729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5730 tSirRssiMonitorReq *pRssiMonitorReqParams;
5731
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5733 "<------ %s " ,__func__);
5734
5735 if(NULL == pWdaParams)
5736 {
5737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5738 "%s: pWdaParams received NULL", __func__);
5739 VOS_ASSERT(0);
5740 return ;
5741 }
5742
5743 if(NULL == pWdaParams->wdaMsgParam)
5744 {
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5746 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5747 VOS_ASSERT(0);
5748 vos_mem_free(pWdaParams);
5749 return ;
5750 }
5751
5752 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5753
5754 if(pRssiMonitorReqParams->rssiMonitorCallback)
5755 {
5756 pRssiMonitorReqParams->rssiMonitorCallback(
5757 pRssiMonitorReqParams->rssiMonitorCbContext,
5758 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5759 }
5760 else
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5763 "%s: pFWLoggingInitParams callback is NULL", __func__);
5764 }
5765
5766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5767 vos_mem_free(pWdaParams->wdaMsgParam);
5768 vos_mem_free(pWdaParams);
5769
5770 return;
5771}
5772
Siddharth Bhal64246172015-02-27 01:04:37 +05305773/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305774 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305775 * recieves Mgmt Logging init response from FW
5776 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305777void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305778 void* pUserData)
5779{
5780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305781 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305782 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305783
5784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5785 "<------ %s " ,__func__);
5786
5787 if(NULL == pWdaParams)
5788 {
5789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5790 "%s: pWdaParams received NULL", __func__);
5791 VOS_ASSERT(0);
5792 return ;
5793 }
5794
5795 if(NULL == pWdaParams->wdaMsgParam)
5796 {
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5798 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5799 VOS_ASSERT(0);
5800 vos_mem_free(pWdaParams);
5801 return ;
5802 }
5803
c_manjeecfd1efb2015-09-25 19:32:34 +05305804 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5805 if(NULL == pWdaParams)
5806 {
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5808 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5809 VOS_ASSERT(0);
5810 vos_mem_free(pWdaParams);
5811 return;
5812 }
5813
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305814 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305815 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305816
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305817 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305818 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305819 pFWLoggingInitParams->fwlogInitCallback(
5820 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305821 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305822 }
5823 else
5824 {
5825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305826 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305827 }
5828
c_manjeecfd1efb2015-09-25 19:32:34 +05305829 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5831 vos_mem_free(pWdaParams->wdaMsgParam);
5832 vos_mem_free(pWdaParams);
5833
5834 return;
5835}
5836
5837/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305838 * FUNCTION: WDA_SpoofMacAddrRspCallback
5839 * recieves spoof mac addr response from FW
5840 */
5841void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5842{
5843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5844 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305845
Siddharth Bhal171788a2014-09-29 21:02:40 +05305846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5847 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305848
Siddharth Bhal171788a2014-09-29 21:02:40 +05305849 if(NULL == pWdaParams)
5850 {
5851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5852 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305853 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305854 return ;
5855 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305856 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305857
Siddharth Bhal029d6732014-10-09 21:31:23 +05305858 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305860 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305861 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305862 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5863 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305864
Siddharth Bhal171788a2014-09-29 21:02:40 +05305865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305866 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305867 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305868
5869 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305870}
5871
Jeff Johnson295189b2012-06-20 16:38:30 -07005872/*
5873 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5874 * Request to WDI to remove the BSS key( key for broadcast/multicast
5875 * frames Encryption)
5876 */
5877VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5878 tRemoveBssKeyParams *removeBssKeyParams )
5879{
5880 WDI_Status status = WDI_STATUS_SUCCESS ;
5881 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5882 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5883 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5884 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 if(NULL == wdiRemoveBssKeyParam)
5888 {
5889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 VOS_ASSERT(0);
5892 return VOS_STATUS_E_NOMEM;
5893 }
5894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5895 if(NULL == pWdaParams)
5896 {
5897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 VOS_ASSERT(0);
5900 vos_mem_free(wdiRemoveBssKeyParam);
5901 return VOS_STATUS_E_NOMEM;
5902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 /* copy Remove BSS key params to WDI structure*/
5904 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5905 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5906 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5907 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5908 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 /* Store remove key pointer, as this will be used for response */
5910 /* store Params pass it to WDI */
5911 pWdaParams->pWdaContext = pWDA;
5912 pWdaParams->wdaMsgParam = removeBssKeyParams;
5913 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5915 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(IS_WDI_STATUS_FAILURE(status))
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5919 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5921 vos_mem_free(pWdaParams) ;
5922 removeBssKeyParams->status = eSIR_FAILURE ;
5923 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 return CONVERT_WDI2VOS_STATUS(status) ;
5926}
Jeff Johnson295189b2012-06-20 16:38:30 -07005927/*
5928 * FUNCTION: WDA_SetBssKeyReqCallback
5929 * send SET BSS key RSP back to PE
5930 */
5931void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5932{
5933 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5934 tWDA_CbContext *pWDA;
5935 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005937 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 if(NULL == pWdaParams)
5939 {
5940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005941 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_ASSERT(0) ;
5943 return ;
5944 }
5945 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5946 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305947 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5948 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5950 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005951 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 return ;
5954}
Jeff Johnson295189b2012-06-20 16:38:30 -07005955/*
5956 * FUNCTION: WDA_ProcessSetStaKeyReq
5957 * Request to WDI for programming the STA key( key for Unicast frames
5958 * Encryption)
5959 */
5960VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5961 tSetStaKeyParams *setStaKeyParams )
5962{
5963 WDI_Status status = WDI_STATUS_SUCCESS ;
5964 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5965 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5966 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5967 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005970 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 if(NULL == wdiSetStaKeyParam)
5972 {
5973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 VOS_ASSERT(0);
5976 return VOS_STATUS_E_NOMEM;
5977 }
5978 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5979 if(NULL == pWdaParams)
5980 {
5981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 VOS_ASSERT(0);
5984 vos_mem_free(wdiSetStaKeyParam);
5985 return VOS_STATUS_E_NOMEM;
5986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 /* copy set STA key params to WDI structure */
5990 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5991 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5992 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5993 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 if(setStaKeyParams->encType != eSIR_ED_NONE)
5995 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005996 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5998 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5999 {
6000 WDA_GetWepKeysFromCfg( pWDA,
6001 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6002 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6003 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6004 }
6005 else
6006 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6008 keyIndex++)
6009 {
6010 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6011 setStaKeyParams->key[keyIndex].keyId;
6012 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6013 setStaKeyParams->key[keyIndex].unicast;
6014 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6015 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6017 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6018 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6019 setStaKeyParams->key[keyIndex].paeRole;
6020 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6021 setStaKeyParams->key[keyIndex].keyLength;
6022 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6023 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6024 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6025 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6026 {
6027 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6028 }
6029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6031 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 }
6033 }
6034 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6035 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 /* Store set key pointer, as this will be used for response */
6037 /* store Params pass it to WDI */
6038 pWdaParams->pWdaContext = pWDA;
6039 pWdaParams->wdaMsgParam = setStaKeyParams;
6040 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006041 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6042 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 if(IS_WDI_STATUS_FAILURE(status))
6044 {
6045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6046 "Failure in set STA Key Req WDI API, free all the memory " );
6047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6048 vos_mem_free(pWdaParams) ;
6049 setStaKeyParams->status = eSIR_FAILURE ;
6050 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 return CONVERT_WDI2VOS_STATUS(status) ;
6053}
Jeff Johnson295189b2012-06-20 16:38:30 -07006054/*
6055 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6056 * send SET Bcast STA key RSP back to PE
6057 */
6058void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6059{
6060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6061 tWDA_CbContext *pWDA;
6062 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 if(NULL == pWdaParams)
6066 {
6067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 VOS_ASSERT(0) ;
6070 return ;
6071 }
6072 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6073 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6075 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006076 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 return ;
6079}
6080
Jeff Johnson295189b2012-06-20 16:38:30 -07006081/*
6082 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6083 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6084 * Encryption)
6085 */
6086VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6087 tSetStaKeyParams *setStaKeyParams )
6088{
6089 WDI_Status status = WDI_STATUS_SUCCESS ;
6090 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6091 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6092 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6093 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 if(NULL == wdiSetStaKeyParam)
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 VOS_ASSERT(0);
6102 return VOS_STATUS_E_NOMEM;
6103 }
6104 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6105 if(NULL == pWdaParams)
6106 {
6107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 VOS_ASSERT(0);
6110 vos_mem_free(wdiSetStaKeyParam);
6111 return VOS_STATUS_E_NOMEM;
6112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 /* copy set STA key params to WDI structure */
6116 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6117 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6118 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6119 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 if(setStaKeyParams->encType != eSIR_ED_NONE)
6121 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6123 keyIndex++)
6124 {
6125 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6126 setStaKeyParams->key[keyIndex].keyId;
6127 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6128 setStaKeyParams->key[keyIndex].unicast;
6129 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6130 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6132 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6133 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6134 setStaKeyParams->key[keyIndex].paeRole;
6135 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6136 setStaKeyParams->key[keyIndex].keyLength;
6137 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6138 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6141 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 }
6143 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 /* Store set key pointer, as this will be used for response */
6145 /* store Params pass it to WDI */
6146 pWdaParams->pWdaContext = pWDA;
6147 pWdaParams->wdaMsgParam = setStaKeyParams;
6148 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6150 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 if(IS_WDI_STATUS_FAILURE(status))
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6154 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6156 vos_mem_free(pWdaParams) ;
6157 setStaKeyParams->status = eSIR_FAILURE ;
6158 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 return CONVERT_WDI2VOS_STATUS(status) ;
6161}
Jeff Johnson295189b2012-06-20 16:38:30 -07006162/*
6163 * FUNCTION: WDA_RemoveStaKeyReqCallback
6164 * send SET BSS key RSP back to PE
6165 */
6166void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6167{
6168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6169 tWDA_CbContext *pWDA;
6170 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006172 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 if(NULL == pWdaParams)
6174 {
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006176 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 VOS_ASSERT(0) ;
6178 return ;
6179 }
6180 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6181 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6183 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006184 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 return ;
6187}
6188
Jeff Johnson295189b2012-06-20 16:38:30 -07006189/*
6190 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6191 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6192 */
6193VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6194 tRemoveStaKeyParams *removeStaKeyParams )
6195{
6196 WDI_Status status = WDI_STATUS_SUCCESS ;
6197 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6198 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6199 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6200 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 if(NULL == wdiRemoveStaKeyParam)
6204 {
6205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 VOS_ASSERT(0);
6208 return VOS_STATUS_E_NOMEM;
6209 }
6210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6211 if(NULL == pWdaParams)
6212 {
6213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 VOS_ASSERT(0);
6216 vos_mem_free(wdiRemoveStaKeyParam);
6217 return VOS_STATUS_E_NOMEM;
6218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 /* copy remove STA key params to WDI structure*/
6220 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6221 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6222 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6223 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6224 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 /* Store remove key pointer, as this will be used for response */
6226 /* store Params pass it to WDI */
6227 pWdaParams->pWdaContext = pWDA;
6228 pWdaParams->wdaMsgParam = removeStaKeyParams;
6229 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6231 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 if(IS_WDI_STATUS_FAILURE(status))
6233 {
6234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6235 "Failure in remove STA Key Req WDI API, free all the memory " );
6236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6237 vos_mem_free(pWdaParams) ;
6238 removeStaKeyParams->status = eSIR_FAILURE ;
6239 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 return CONVERT_WDI2VOS_STATUS(status) ;
6242}
Jeff Johnson295189b2012-06-20 16:38:30 -07006243/*
6244 * FUNCTION: WDA_IsHandleSetLinkStateReq
6245 * Update the WDA state and return the status to handle this message or not
6246 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006247WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6248 tWDA_CbContext *pWDA,
6249 tLinkStateParams *linkStateParams)
6250{
6251 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 switch(linkStateParams->state)
6253 {
6254 case eSIR_LINK_PREASSOC_STATE:
6255 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6256 /*
6257 * set the WDA state to PRE ASSOC
6258 * copy the BSSID into pWDA to use it in join request and return,
6259 * No need to handle these messages.
6260 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006261 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6262 {
6263 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006265 }
6266 else
6267 {
6268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006269 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006270 VOS_ASSERT(0);
6271 }
6272
6273 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6274 {
6275 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006277 }
6278 else
6279 {
6280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006282 VOS_ASSERT(0);
6283 }
6284
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6286 *channel and after ) so reset the WDA state to ready when the second
6287 * time UMAC issue the link state with PREASSOC
6288 */
6289 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6290 {
6291 /* RESET WDA state back to WDA_READY_STATE */
6292 pWDA->wdaState = WDA_READY_STATE;
6293 }
6294 else
6295 {
6296 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6297 }
6298 //populate linkState info in WDACbCtxt
6299 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006300 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 default:
6302 if(pWDA->wdaState != WDA_READY_STATE)
6303 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006304 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6305 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6306 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6307 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6308 *the ASSERT in WDA_Stop during module unload.*/
6309 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6310 {
6311 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006312 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006313 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006314 else
6315 {
6316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006317 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006318 status = WDA_IGNORE_SET_LINK_STATE;
6319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 }
6321 break;
6322 }
6323
6324 return status;
6325}
Jeff Johnson295189b2012-06-20 16:38:30 -07006326/*
6327 * FUNCTION: WDA_SetLinkStateCallback
6328 * call back function for set link state from WDI
6329 */
6330void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6331{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306332 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 tLinkStateParams *linkStateParams;
6334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006336 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306337 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006340 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 VOS_ASSERT(0) ;
6342 return ;
6343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306345 if (NULL == pWDA)
6346 {
6347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6348 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6350 vos_mem_free(pWdaParams->wdaMsgParam);
6351 vos_mem_free(pWdaParams);
6352
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306353 VOS_ASSERT(0);
6354 return ;
6355 }
6356
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 /*
6359 * In STA mode start the BA activity check timer after association
6360 * and in AP mode start BA activity check timer after BSS start */
6361 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6362 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006363 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6364 ((status == WDI_STATUS_SUCCESS) &&
6365 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 {
6367 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 /*
6371 * No respone required for WDA_SET_LINK_STATE so free the request
6372 * param here
6373 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6375 vos_mem_free(pWdaParams);
6376
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 return ;
6378}
Jeff Johnson295189b2012-06-20 16:38:30 -07006379/*
6380 * FUNCTION: WDA_ProcessSetLinkState
6381 * Request to WDI to set the link status.
6382 */
6383VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6384 tLinkStateParams *linkStateParams)
6385{
6386 WDI_Status status = WDI_STATUS_SUCCESS ;
6387 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6388 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6389 sizeof(WDI_SetLinkReqParamsType)) ;
6390 tWDA_ReqParams *pWdaParams ;
6391 tpAniSirGlobal pMac;
6392 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6393
6394 if(NULL == pMac)
6395 {
6396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006397 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006399 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return VOS_STATUS_E_FAILURE;
6401 }
6402
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006404 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 if(NULL == wdiSetLinkStateParam)
6406 {
6407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 VOS_ASSERT(0);
6410 return VOS_STATUS_E_NOMEM;
6411 }
6412 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6413 if(NULL == pWdaParams)
6414 {
6415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006416 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 VOS_ASSERT(0);
6418 vos_mem_free(wdiSetLinkStateParam);
6419 return VOS_STATUS_E_NOMEM;
6420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 if(WDA_IGNORE_SET_LINK_STATE ==
6422 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6423 {
6424 status = WDI_STATUS_E_FAILURE;
6425 }
6426 else
6427 {
6428 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6429 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6431 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6433 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 pWdaParams->pWdaContext = pWDA;
6435 /* Store remove key pointer, as this will be used for response */
6436 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 /* store Params pass it to WDI */
6438 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6439 /* Stop Timer only other than GO role and concurrent session */
6440 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006441 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6443 {
6444 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6447 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 if(IS_WDI_STATUS_FAILURE(status))
6449 {
6450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6451 "Failure in set link state Req WDI API, free all the memory " );
6452 }
6453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 if(IS_WDI_STATUS_FAILURE(status))
6455 {
6456 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006457 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 vos_mem_free(pWdaParams);
6459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 return CONVERT_WDI2VOS_STATUS(status) ;
6461}
Jeff Johnson295189b2012-06-20 16:38:30 -07006462/*
6463 * FUNCTION: WDA_GetStatsReqParamsCallback
6464 * send the response to PE with Stats received from WDI
6465 */
6466void WDA_GetStatsReqParamsCallback(
6467 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6468 void* pUserData)
6469{
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306471 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006472
6473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 pGetPEStatsRspParams =
6476 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6477 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6478
6479 if(NULL == pGetPEStatsRspParams)
6480 {
6481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 VOS_ASSERT(0);
6484 return;
6485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306487 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6489 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006490
6491 //Fill the Session Id Properly in PE
6492 pGetPEStatsRspParams->sessionId = 0;
6493 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006494 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006495 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6496 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 vos_mem_copy( pGetPEStatsRspParams + 1,
6498 wdiGetStatsRsp + 1,
6499 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306500
6501 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6502 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6503 vosMsg.bodyval = 0;
6504 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6505 (vos_msg_t*)&vosMsg))
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6508 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6509 vos_mem_free(pGetPEStatsRspParams);
6510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006511
6512 return;
6513}
6514
Jeff Johnson295189b2012-06-20 16:38:30 -07006515/*
6516 * FUNCTION: WDA_ProcessGetStatsReq
6517 * Request to WDI to get the statistics
6518 */
6519VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6520 tAniGetPEStatsReq *pGetStatsParams)
6521{
6522 WDI_Status status = WDI_STATUS_SUCCESS ;
6523 WDI_GetStatsReqParamsType wdiGetStatsParam;
6524 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306525 vos_msg_t vosMsg;
6526
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006528 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6530 pGetStatsParams->staId;
6531 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6532 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 status = WDI_GetStatsReq(&wdiGetStatsParam,
6535 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 if(IS_WDI_STATUS_FAILURE(status))
6537 {
6538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6539 "Failure in Get Stats Req WDI API, free all the memory " );
6540 pGetPEStatsRspParams =
6541 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6542 if(NULL == pGetPEStatsRspParams)
6543 {
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006547 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 return VOS_STATUS_E_NOMEM;
6549 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306550 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6552 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6553 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306554
6555 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6556 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6557 vosMsg.bodyval = 0;
6558 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6559 (vos_msg_t*)&vosMsg))
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6563 vos_mem_free(pGetPEStatsRspParams);
6564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 /* Free the request message */
6567 vos_mem_free(pGetStatsParams);
6568 return CONVERT_WDI2VOS_STATUS(status);
6569}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006570
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006571#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006572/*
6573 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6574 * send the response to PE with roam Rssi received from WDI
6575 */
6576void WDA_GetRoamRssiReqParamsCallback(
6577 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6578 void* pUserData)
6579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6581 tWDA_CbContext *pWDA = NULL;
6582 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6583 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6585 "<------ %s " ,__func__);
6586 if(NULL == pWdaParams)
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6589 "%s: pWdaParams received NULL", __func__);
6590 VOS_ASSERT(0) ;
6591 return ;
6592 }
6593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6594 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6595
6596 if(NULL == pGetRoamRssiReqParams)
6597 {
6598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6599 "%s: pGetRoamRssiReqParams received NULL", __func__);
6600 VOS_ASSERT(0);
6601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6602 vos_mem_free(pWdaParams);
6603 return ;
6604 }
6605 pGetRoamRssiRspParams =
6606 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6607
6608 if(NULL == pGetRoamRssiRspParams)
6609 {
6610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6611 "%s: VOS MEM Alloc Failure", __func__);
6612 VOS_ASSERT(0);
6613 return;
6614 }
6615 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6616 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006617 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006618 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6619 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6620
6621 /* Assign get roam rssi req (backup) in to the response */
6622 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6623
6624 /* free WDI command buffer */
6625 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6626 vos_mem_free(pWdaParams) ;
6627
6628 /* send response to UMAC*/
6629 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6630
6631 return;
6632}
6633
6634
6635
6636/*
6637 * FUNCTION: WDA_ProcessGetRoamRssiReq
6638 * Request to WDI to get the statistics
6639 */
6640VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6641 tAniGetRssiReq *pGetRoamRssiParams)
6642{
6643 WDI_Status status = WDI_STATUS_SUCCESS ;
6644 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6645 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6646 tWDA_ReqParams *pWdaParams = NULL;
6647
6648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6649 "------> %s " ,__func__);
6650 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6651 pGetRoamRssiParams->staId;
6652 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6653
6654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6655 if(NULL == pWdaParams)
6656 {
6657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6658 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306659 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006660 VOS_ASSERT(0);
6661 return VOS_STATUS_E_NOMEM;
6662 }
6663
6664 /* Store Init Req pointer, as this will be used for response */
6665 pWdaParams->pWdaContext = pWDA;
6666
6667 /* Take Get roam Rssi req backup as it stores the callback to be called after
6668 receiving the response */
6669 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6670 pWdaParams->wdaWdiApiMsgParam = NULL;
6671
6672 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6673 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6674 if(IS_WDI_STATUS_FAILURE(status))
6675 {
6676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6677 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6678 pGetRoamRssiRspParams =
6679 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6680 if(NULL == pGetRoamRssiRspParams)
6681 {
6682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6683 "%s: VOS MEM Alloc Failure", __func__);
6684 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306685 vos_mem_free(pGetRoamRssiParams);
6686 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006687 return VOS_STATUS_E_NOMEM;
6688 }
6689 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6690 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6691 pGetRoamRssiRspParams->rssi = 0;
6692 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6693 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6694 (void *)pGetRoamRssiRspParams, 0) ;
6695 }
6696 return CONVERT_WDI2VOS_STATUS(status);
6697}
6698#endif
6699
6700
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_UpdateEDCAParamCallback
6703 * call back function for Update EDCA params from WDI
6704 */
6705void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6706{
6707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6708 tEdcaParams *pEdcaParams;
6709
6710 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 == pWdaParams)
6713 {
6714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006715 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 VOS_ASSERT(0) ;
6717 return ;
6718 }
6719 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6721 vos_mem_free(pWdaParams);
6722 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006723 return ;
6724}
Jeff Johnson295189b2012-06-20 16:38:30 -07006725/*
6726 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6727 * Request to WDI to Update the EDCA params.
6728 */
6729VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6730 tEdcaParams *pEdcaParams)
6731{
6732 WDI_Status status = WDI_STATUS_SUCCESS ;
6733 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6734 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6735 sizeof(WDI_UpdateEDCAParamsType)) ;
6736 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006738 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 if(NULL == wdiEdcaParam)
6740 {
6741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006744 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 return VOS_STATUS_E_NOMEM;
6746 }
6747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6748 if(NULL == pWdaParams)
6749 {
6750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 VOS_ASSERT(0);
6753 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006754 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 return VOS_STATUS_E_NOMEM;
6756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006758 /*
6759 Since firmware is not using highperformance flag, we have removed
6760 this flag from wdiEDCAInfo structure to match sizeof the structure
6761 between host and firmware.In future if we are planning to use
6762 highperformance flag then Please define this flag in wdiEDCAInfo
6763 structure, update it here and send it to firmware. i.e.
6764 Following is the original line which we removed as part of the fix
6765 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6766 pEdcaParams->highPerformance;
6767 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6769 &pEdcaParams->acbe);
6770 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6771 &pEdcaParams->acbk);
6772 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6773 &pEdcaParams->acvi);
6774 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6775 &pEdcaParams->acvo);
6776 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 pWdaParams->pWdaContext = pWDA;
6778 /* Store remove key pointer, as this will be used for response */
6779 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 /* store Params pass it to WDI */
6781 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6783 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 if(IS_WDI_STATUS_FAILURE(status))
6785 {
6786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6787 "Failure in Update EDCA Params WDI API, free all the memory " );
6788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6789 vos_mem_free(pWdaParams);
6790 vos_mem_free(pEdcaParams);
6791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 return CONVERT_WDI2VOS_STATUS(status) ;
6793}
Jeff Johnson295189b2012-06-20 16:38:30 -07006794/*
6795 * FUNCTION: WDA_AddBAReqCallback
6796 * send ADD BA RSP back to PE
6797 */
6798void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6799 void* pUserData)
6800{
6801 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6802 tWDA_CbContext *pWDA;
6803 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006805 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306806 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 {
6808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006809 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 VOS_ASSERT(0) ;
6811 return ;
6812 }
6813 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306814 if (NULL == pWDA)
6815 {
6816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6817 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6819 vos_mem_free(pWdaParams->wdaMsgParam);
6820 vos_mem_free(pWdaParams);
6821
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306822 VOS_ASSERT(0);
6823 return ;
6824 }
6825
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6828 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006829 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 return ;
6832}
6833
Jeff Johnson295189b2012-06-20 16:38:30 -07006834/*
6835 * FUNCTION: WDA_ProcessAddBAReq
6836 * Request to WDI to Update the ADDBA REQ params.
6837 */
6838VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306839 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006840{
Jeff Johnson43971f52012-07-17 12:26:56 -07006841 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6843 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6844 sizeof(WDI_AddBAReqParamsType)) ;
6845 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006847 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 if(NULL == wdiAddBAReqParam)
6849 {
6850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 VOS_ASSERT(0);
6853 return VOS_STATUS_E_NOMEM;
6854 }
6855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6856 if(NULL == pWdaParams)
6857 {
6858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 VOS_ASSERT(0);
6861 vos_mem_free(wdiAddBAReqParam);
6862 return VOS_STATUS_E_NOMEM;
6863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 do
6865 {
6866 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 wdiAddBaInfo->ucSTAIdx = staIdx ;
6868 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306869 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 } while(0) ;
6871 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 pWdaParams->pWdaContext = pWDA;
6873 /* store Params pass it to WDI */
6874 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6875 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006876 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6877 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006878
Jeff Johnson43971f52012-07-17 12:26:56 -07006879 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 {
6881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006882 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6883 status = CONVERT_WDI2VOS_STATUS(wstatus);
6884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 vos_mem_free(pWdaParams);
6886 pAddBAReqParams->status = eSIR_FAILURE;
6887 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6888 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006889 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890}
Jeff Johnson295189b2012-06-20 16:38:30 -07006891/*
6892 * FUNCTION: WDA_AddBASessionReqCallback
6893 * send ADD BA SESSION RSP back to PE/(or TL)
6894 */
6895void WDA_AddBASessionReqCallback(
6896 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6897{
6898 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6899 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306900 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006903 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 if(NULL == pWdaParams)
6905 {
6906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006907 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 VOS_ASSERT(0) ;
6909 return ;
6910 }
6911 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306912 if (NULL == pWDA)
6913 {
6914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6915 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6917 vos_mem_free(pWdaParams->wdaMsgParam);
6918 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306919 VOS_ASSERT(0);
6920 return ;
6921 }
6922
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 if( NULL == pAddBAReqParams )
6925 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006927 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6930 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 return ;
6932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6934 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306936 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 * another request to HAL(/WDI) (ADD_BA_REQ)
6938 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 if((VOS_STATUS_SUCCESS ==
6940 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306941 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 {
6943 /* Update TL with BA info received from HAL/WDI */
6944 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6945 wdiAddBaSession->usBaSessionID,
6946 wdiAddBaSession->ucSTAIdx,
6947 wdiAddBaSession->ucBaTID,
6948 wdiAddBaSession->ucBaBufferSize,
6949 wdiAddBaSession->ucWinSize,
6950 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306952 wdiAddBaSession->ucSTAIdx,
6953 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 }
6955 else
6956 {
6957 pAddBAReqParams->status =
6958 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6959
6960 /* Setting Flag to indicate that Set BA is success */
6961 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6962 {
6963 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6964 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6965 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 /*Reset the WDA state to READY */
6970 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 return ;
6972}
6973
Jeff Johnson295189b2012-06-20 16:38:30 -07006974/*
6975 * FUNCTION: WDA_ProcessAddBASessionReq
6976 * Request to WDI to Update the ADDBA REQ params.
6977 */
6978VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6979 tAddBAParams *pAddBAReqParams)
6980{
6981 WDI_Status status = WDI_STATUS_SUCCESS ;
6982 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6983 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6984 sizeof(WDI_AddBASessionReqParamsType)) ;
6985 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006986 WLANTL_STAStateType tlSTAState = 0;
6987
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 if(NULL == wdiAddBASessionReqParam)
6991 {
6992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_ASSERT(0);
6995 return VOS_STATUS_E_NOMEM;
6996 }
6997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6998 if(NULL == pWdaParams)
6999 {
7000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 VOS_ASSERT(0);
7003 vos_mem_free(wdiAddBASessionReqParam);
7004 return VOS_STATUS_E_NOMEM;
7005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 /*
7007 * Populate ADD BA parameters and pass these paarmeters to WDI.
7008 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7009 * the state to track if these is BA recipient case or BA initiator
7010 * case.
7011 */
7012 do
7013 {
7014 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7015 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7016 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7017 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7018 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7019 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7020 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7023 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7024 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7025 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7026 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307027
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 }while(0) ;
7029 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 pWdaParams->pWdaContext = pWDA;
7031 /* Store ADD BA pointer, as this will be used for response */
7032 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7033 /* store Params pass it to WDI */
7034 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007035
7036 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7037 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7038 */
7039 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7040 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7041 {
7042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007043 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007044 status = WDI_STATUS_E_NOT_ALLOWED;
7045 pAddBAReqParams->status =
7046 CONVERT_WDI2SIR_STATUS(status) ;
7047 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7048 /*Reset the WDA state to READY */
7049 pWDA->wdaState = WDA_READY_STATE;
7050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7051 vos_mem_free(pWdaParams);
7052
7053 return CONVERT_WDI2VOS_STATUS(status) ;
7054 }
7055
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7057 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 if(IS_WDI_STATUS_FAILURE(status))
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007061 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007063 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007064 pAddBAReqParams->status =
7065 CONVERT_WDI2SIR_STATUS(status) ;
7066 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007067 /*Reset the WDA state to READY */
7068 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 vos_mem_free(pWdaParams);
7071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073}
Jeff Johnson295189b2012-06-20 16:38:30 -07007074/*
7075 * FUNCTION: WDA_DelBANotifyTL
7076 * send DEL BA IND to TL
7077 */
7078void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7079 tDelBAParams *pDelBAReqParams)
7080{
7081 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7082 //tSirMsgQ msg;
7083 vos_msg_t vosMsg;
7084 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 if(NULL == pDelBAInd)
7086 {
7087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 VOS_ASSERT(0) ;
7090 return;
7091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7093 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7094 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7095 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007096
Jeff Johnson295189b2012-06-20 16:38:30 -07007097
7098 vosMsg.type = WDA_DELETEBA_IND;
7099 vosMsg.bodyptr = pDelBAInd;
7100 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7101 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7102 {
7103 vosStatus = VOS_STATUS_E_BADMSG;
7104 }
7105}
Jeff Johnson295189b2012-06-20 16:38:30 -07007106/*
7107 * FUNCTION: WDA_DelBAReqCallback
7108 * send DEL BA RSP back to PE
7109 */
7110void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7111{
7112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7113 tWDA_CbContext *pWDA;
7114 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pWdaParams)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return ;
7123 }
7124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307125
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 /* Notify TL about DEL BA in case of recipinet */
7128 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7129 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7130 {
7131 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 /*
7134 * No respone required for WDA_DELBA_IND so just free the request
7135 * param here
7136 */
7137 vos_mem_free(pDelBAReqParams);
7138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7139 vos_mem_free(pWdaParams);
7140 return ;
7141}
7142
Jeff Johnson295189b2012-06-20 16:38:30 -07007143/*
7144 * FUNCTION: WDA_ProcessDelBAReq
7145 * Request to WDI to Update the DELBA REQ params.
7146 */
7147VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7148 tDelBAParams *pDelBAReqParams)
7149{
7150 WDI_Status status = WDI_STATUS_SUCCESS ;
7151 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7152 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7153 sizeof(WDI_DelBAReqParamsType)) ;
7154 tWDA_ReqParams *pWdaParams ;
7155 tANI_U16 staIdx = 0;
7156 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 if(NULL == wdiDelBAReqParam)
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_ASSERT(0);
7164 return VOS_STATUS_E_NOMEM;
7165 }
7166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7167 if(NULL == pWdaParams)
7168 {
7169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 VOS_ASSERT(0);
7172 vos_mem_free(wdiDelBAReqParam);
7173 return VOS_STATUS_E_NOMEM;
7174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7176 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7177 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7178 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 pWdaParams->pWdaContext = pWDA;
7180 /* Store DEL BA pointer, as this will be used for response */
7181 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 /* store Params pass it to WDI */
7183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7185 * maintained in WDA, so that WDA can retry for another BA session
7186 */
7187 staIdx = pDelBAReqParams->staIdx;
7188 tid = pDelBAReqParams->baTID;
7189 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 status = WDI_DelBAReq(wdiDelBAReqParam,
7191 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 if(IS_WDI_STATUS_FAILURE(status))
7193 {
7194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7195 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7197 vos_mem_free(pWdaParams->wdaMsgParam);
7198 vos_mem_free(pWdaParams);
7199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007201}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007202
7203/*
7204 * FUNCTION: WDA_UpdateChReqCallback
7205 *
7206 */
7207void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7208{
Siddharth Bhala006c122014-05-03 12:13:27 +05307209 tWDA_ReqParams *pWdaParams;
7210 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7211 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7212 WDI_UpdateChannelReqinfoType *pChanInfoType;
7213 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007214
7215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7216 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307217 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007218 {
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307220 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007221 VOS_ASSERT(0);
7222 return;
7223 }
7224
Siddharth Bhala006c122014-05-03 12:13:27 +05307225 pWdaParams = (tWDA_ReqParams *)pUserData;
7226 pwdiUpdateChReqParam =
7227 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7228 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7229 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7230 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007231 /*
7232 * currently there is no response message is expected between PE and
7233 * WDA, Failure return from WDI is a ASSERT condition
7234 */
7235 vos_mem_free(pChanInfoType);
7236 vos_mem_free(pChanList);
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7238 vos_mem_free(pWdaParams);
7239
7240 return;
7241}
7242
7243/*
7244 * FUNCTION: WDA_ProcessUpdateChannelList
7245 * Request to WDI to Update the ChannelList params.
7246 */
7247VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7248 tSirUpdateChanList *pChanList)
7249{
7250 WDI_Status status = WDI_STATUS_SUCCESS;
7251 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7252 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7253 WDI_UpdateChannelReqinfoType *pChanInfoType;
7254 tWDA_ReqParams *pWdaParams;
7255 wpt_uint8 i;
7256
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7258 "------> %s " ,__func__);
7259 if(NULL == pChanList)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7262 "%s: NULL pChanList", __func__);
7263 VOS_ASSERT(0);
7264 return VOS_STATUS_E_INVAL;
7265 }
7266
7267 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7268 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007270 "Update channel list capability Not Supported");
7271 vos_mem_free(pChanList);
7272 return VOS_STATUS_E_INVAL;
7273 }
7274
7275 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7276 sizeof(WDI_UpdateChReqParamsType));
7277 if(NULL == pwdiUpdateChReqParam)
7278 {
7279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7280 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7281 __func__);
7282 VOS_ASSERT(0);
7283 vos_mem_free(pChanList);
7284 return VOS_STATUS_E_NOMEM;
7285 }
7286 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7287 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7288 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7289 pChanList->numChan);
7290 if(NULL == pChanInfoType)
7291 {
7292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7293 "%s: VOS MEM Alloc Failure", __func__);
7294 VOS_ASSERT(0);
7295 vos_mem_free(pChanList);
7296 vos_mem_free(pwdiUpdateChReqParam);
7297 return VOS_STATUS_E_NOMEM;
7298 }
7299 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7300 * pChanList->numChan);
7301 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7302
7303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7304 if(NULL == pWdaParams)
7305 {
7306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "%s: VOS MEM Alloc Failure", __func__);
7308 VOS_ASSERT(0);
7309 vos_mem_free(pChanList);
7310 vos_mem_free(pChanInfoType);
7311 vos_mem_free(pwdiUpdateChReqParam);
7312 return VOS_STATUS_E_NOMEM;
7313 }
7314 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7315
7316 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7317 {
7318 pChanInfoType->mhz =
7319 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7320
7321 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7322 pChanInfoType->band_center_freq2 = 0;
7323
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7325 "chan[%d] = %u", i, pChanInfoType->mhz);
7326 if (pChanList->chanParam[i].dfsSet)
7327 {
7328 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7330 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7331 pChanList->chanParam[i].dfsSet);
7332 }
7333
7334 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7335 {
7336 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7337 }
7338 else
7339 {
7340 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7341 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7342 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7343 }
7344
7345 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7346 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307347 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007348 pChanInfoType++;
7349 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007350 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7351 pWdaParams->pWdaContext = pWDA;
7352 pWdaParams->wdaMsgParam = (void *)pChanList;
7353 /* store Params pass it to WDI */
7354 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7355 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7356 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7357 if(IS_WDI_STATUS_FAILURE(status))
7358 {
7359 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7360 "Failure in Update Channel REQ Params WDI API, free all the memory");
7361 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7362 vos_mem_free(pwdiUpdateChReqParam);
7363 vos_mem_free(pWdaParams->wdaMsgParam);
7364 vos_mem_free(pWdaParams);
7365 }
7366 return CONVERT_WDI2VOS_STATUS(status);
7367}
7368
Jeff Johnson295189b2012-06-20 16:38:30 -07007369/*
7370 * FUNCTION: WDA_AddTSReqCallback
7371 * send ADD TS RSP back to PE
7372 */
7373void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7374{
7375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307376 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 tAddTsParams *pAddTsReqParams;
7378
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007380 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 if(NULL == pWdaParams)
7382 {
7383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 VOS_ASSERT(0) ;
7386 return ;
7387 }
7388 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307389 if (NULL == pWDA)
7390 {
7391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7392 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7394 vos_mem_free(pWdaParams->wdaMsgParam);
7395 vos_mem_free(pWdaParams);
7396
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307397 VOS_ASSERT(0);
7398 return ;
7399 }
7400
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7403 vos_mem_free(pWdaParams);
7404
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007405 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 return ;
7408}
7409
Jeff Johnson295189b2012-06-20 16:38:30 -07007410/*
7411 * FUNCTION: WDA_ProcessAddTSReq
7412 * Request to WDI to Update the ADD TS REQ params.
7413 */
7414VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7415 tAddTsParams *pAddTsReqParams)
7416{
7417 WDI_Status status = WDI_STATUS_SUCCESS ;
7418 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7419 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7420 sizeof(WDI_AddTSReqParamsType)) ;
7421 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007423 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 if(NULL == wdiAddTSReqParam)
7425 {
7426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 VOS_ASSERT(0);
7429 return VOS_STATUS_E_NOMEM;
7430 }
7431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7432 if(NULL == pWdaParams)
7433 {
7434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 VOS_ASSERT(0);
7437 vos_mem_free(wdiAddTSReqParam);
7438 return VOS_STATUS_E_NOMEM;
7439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7441 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 //TS IE
7443 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7445 pAddTsReqParams->tspec.length;
7446
7447 //TS IE : TS INFO : TRAFFIC
7448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7449 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7451 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7453 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7455 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7457 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7459 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7460 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7461 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7463 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7464
7465 //TS IE : TS INFO : SCHEDULE
7466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7467 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7469 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 //TS IE
7471 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7472 pAddTsReqParams->tspec.nomMsduSz;
7473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7474 pAddTsReqParams->tspec.maxMsduSz;
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7476 pAddTsReqParams->tspec.minSvcInterval;
7477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7478 pAddTsReqParams->tspec.maxSvcInterval;
7479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7480 pAddTsReqParams->tspec.inactInterval;
7481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7482 pAddTsReqParams->tspec.suspendInterval;
7483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7484 pAddTsReqParams->tspec.svcStartTime;
7485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7486 pAddTsReqParams->tspec.minDataRate;
7487 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7488 pAddTsReqParams->tspec.meanDataRate;
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7490 pAddTsReqParams->tspec.peakDataRate;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7492 pAddTsReqParams->tspec.maxBurstSz;
7493 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7494 pAddTsReqParams->tspec.delayBound;
7495 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7496 pAddTsReqParams->tspec.minPhyRate;
7497 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7498 pAddTsReqParams->tspec.surplusBw;
7499 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7500 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 /* TODO: tAddTsParams doesn't have the following fields */
7502#if 0
7503 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7504 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7505 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7506 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7507#endif
7508 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7509
7510 pWdaParams->pWdaContext = pWDA;
7511 /* Store ADD TS pointer, as this will be used for response */
7512 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 /* store Params pass it to WDI */
7514 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 status = WDI_AddTSReq(wdiAddTSReqParam,
7516 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 if(IS_WDI_STATUS_FAILURE(status))
7518 {
7519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7520 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7522 vos_mem_free(pWdaParams);
7523 pAddTsReqParams->status = eSIR_FAILURE ;
7524 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007527}
7528
Jeff Johnson295189b2012-06-20 16:38:30 -07007529/*
7530 * FUNCTION: WDA_DelTSReqCallback
7531 * send DEL TS RSP back to PE
7532 */
7533void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7534{
7535 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007537 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7539 vos_mem_free(pWdaParams->wdaMsgParam) ;
7540 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 /*
7542 * No respone required for WDA_DEL_TS_REQ so just free the request
7543 * param here
7544 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 return ;
7546}
7547
Jeff Johnson295189b2012-06-20 16:38:30 -07007548/*
7549 * FUNCTION: WDA_ProcessDelTSReq
7550 * Request to WDI to Update the DELTS REQ params.
7551 */
7552VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7553 tDelTsParams *pDelTSReqParams)
7554{
7555 WDI_Status status = WDI_STATUS_SUCCESS ;
7556 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7557 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7558 sizeof(WDI_DelTSReqParamsType)) ;
7559 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007561 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 if(NULL == wdiDelTSReqParam)
7563 {
7564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 VOS_ASSERT(0);
7567 return VOS_STATUS_E_NOMEM;
7568 }
7569 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7570 if(NULL == pWdaParams)
7571 {
7572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 VOS_ASSERT(0);
7575 vos_mem_free(wdiDelTSReqParam);
7576 return VOS_STATUS_E_NOMEM;
7577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7579 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7580 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7581 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7582 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 pWdaParams->pWdaContext = pWDA;
7584 /* Store DEL TS pointer, as this will be used for response */
7585 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 /* store Params pass it to WDI */
7587 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 status = WDI_DelTSReq(wdiDelTSReqParam,
7589 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 if(IS_WDI_STATUS_FAILURE(status))
7591 {
7592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7593 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7595 vos_mem_free(pWdaParams->wdaMsgParam);
7596 vos_mem_free(pWdaParams);
7597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007599}
Jeff Johnson295189b2012-06-20 16:38:30 -07007600/*
7601 * FUNCTION: WDA_UpdateBeaconParamsCallback
7602 * Free the memory. No need to send any response to PE in this case
7603 */
7604void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7605{
7606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 if(NULL == pWdaParams)
7610 {
7611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 VOS_ASSERT(0) ;
7614 return ;
7615 }
7616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7617 vos_mem_free(pWdaParams->wdaMsgParam) ;
7618 vos_mem_free(pWdaParams);
7619 /*
7620 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7621 * param here
7622 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 return ;
7624}
Jeff Johnson295189b2012-06-20 16:38:30 -07007625/*
7626 * FUNCTION: WDA_ProcessUpdateBeaconParams
7627 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7628 */
7629VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7630 tUpdateBeaconParams *pUpdateBeaconParams)
7631{
7632 WDI_Status status = WDI_STATUS_SUCCESS ;
7633 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7634 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7635 sizeof(WDI_UpdateBeaconParamsType)) ;
7636 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007638 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 if(NULL == wdiUpdateBeaconParams)
7640 {
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 VOS_ASSERT(0);
7644 return VOS_STATUS_E_NOMEM;
7645 }
7646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7647 if(NULL == pWdaParams)
7648 {
7649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 VOS_ASSERT(0);
7652 vos_mem_free(wdiUpdateBeaconParams);
7653 return VOS_STATUS_E_NOMEM;
7654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7656 pUpdateBeaconParams->bssIdx;
7657 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7658 pUpdateBeaconParams->fShortPreamble;
7659 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7660 pUpdateBeaconParams->fShortSlotTime;
7661 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7662 pUpdateBeaconParams->beaconInterval;
7663 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7664 pUpdateBeaconParams->llaCoexist;
7665 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7666 pUpdateBeaconParams->llbCoexist;
7667 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7668 pUpdateBeaconParams->llgCoexist;
7669 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7670 pUpdateBeaconParams->ht20MhzCoexist;
7671 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7672 pUpdateBeaconParams->llnNonGFCoexist;
7673 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7674 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7675 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7676 pUpdateBeaconParams->fRIFSMode;
7677 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7678 pUpdateBeaconParams->paramChangeBitmap;
7679 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7680
7681 pWdaParams->pWdaContext = pWDA;
7682 /* Store UpdateBeacon Req pointer, as this will be used for response */
7683 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 /* store Params pass it to WDI */
7685 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7687 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7688 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 if(IS_WDI_STATUS_FAILURE(status))
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7692 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7694 vos_mem_free(pWdaParams->wdaMsgParam);
7695 vos_mem_free(pWdaParams);
7696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007698}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007699#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007700/*
7701 * FUNCTION: WDA_TSMStatsReqCallback
7702 * send TSM Stats RSP back to PE
7703 */
7704void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7705{
7706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7707 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007708 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7709 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007710
7711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007712 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 if(NULL == pWdaParams)
7714 {
7715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007716 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 VOS_ASSERT(0) ;
7718 return ;
7719 }
7720 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307721 if (NULL == pWDA)
7722 {
7723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7724 "%s:pWDA is NULL", __func__);
7725 VOS_ASSERT(0);
7726 return ;
7727 }
7728
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007729 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7730
7731 if(NULL == pGetTsmStatsReqParams)
7732 {
7733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7734 "%s: pGetTsmStatsReqParams received NULL", __func__);
7735 VOS_ASSERT(0);
7736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7737 vos_mem_free(pWdaParams);
7738 return;
7739 }
7740
7741 pTsmRspParams =
7742 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 if( NULL == pTsmRspParams )
7744 {
7745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 VOS_ASSERT( 0 );
7748 return ;
7749 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007750 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7751 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7752 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7753
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7755 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7756 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7757 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7758 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7759 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7760 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7761 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7762 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7763 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007764
7765 /* Assign get tsm stats req req (backup) in to the response */
7766 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7767
7768 /* free WDI command buffer */
7769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7770 vos_mem_free(pWdaParams);
7771
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 return ;
7774}
7775
7776
Jeff Johnson295189b2012-06-20 16:38:30 -07007777/*
7778 * FUNCTION: WDA_ProcessTsmStatsReq
7779 * Request to WDI to get the TSM Stats params.
7780 */
7781VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007782 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007783{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007784 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007786 tWDA_ReqParams *pWdaParams = NULL;
7787 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7788
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7792 sizeof(WDI_TSMStatsReqParamsType));
7793 if(NULL == wdiTSMReqParam)
7794 {
7795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007796 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 VOS_ASSERT(0);
7798 return VOS_STATUS_E_NOMEM;
7799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7801 if(NULL == pWdaParams)
7802 {
7803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 VOS_ASSERT(0);
7806 vos_mem_free(wdiTSMReqParam);
7807 return VOS_STATUS_E_NOMEM;
7808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7810 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7811 pTsmStats->bssId,
7812 sizeof(wpt_macAddr));
7813 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7814
7815 pWdaParams->pWdaContext = pWDA;
7816 /* Store TSM Stats pointer, as this will be used for response */
7817 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007818 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 status = WDI_TSMStatsReq(wdiTSMReqParam,
7820 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 if(IS_WDI_STATUS_FAILURE(status))
7822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7824 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007825 vos_mem_free(pWdaParams);
7826
7827 pGetTsmStatsRspParams =
7828 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7829 if(NULL == pGetTsmStatsRspParams)
7830 {
7831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7832 "%s: VOS MEM Alloc Failure", __func__);
7833 VOS_ASSERT(0);
7834 vos_mem_free(pTsmStats);
7835 return VOS_STATUS_E_NOMEM;
7836 }
7837 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7838 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7839 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7840
7841 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 return CONVERT_WDI2VOS_STATUS(status) ;
7844}
7845#endif
7846/*
7847 * FUNCTION: WDA_SendBeaconParamsCallback
7848 * No need to send any response to PE in this case
7849 */
7850void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7851{
7852
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007854 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 return ;
7856}
Jeff Johnson295189b2012-06-20 16:38:30 -07007857/*
7858 * FUNCTION: WDA_ProcessSendBeacon
7859 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7860 * start beacon trasmission
7861 */
7862VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7863 tSendbeaconParams *pSendbeaconParams)
7864{
7865 WDI_Status status = WDI_STATUS_SUCCESS ;
7866 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007868 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7870 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7871 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7872 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7874 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307875 /* p2pIeOffset should be atleast greater than timIeOffset */
7876 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7877 (pSendbeaconParams->p2pIeOffset <
7878 pSendbeaconParams->timIeOffset))
7879 {
7880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7881 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307882 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307883 VOS_ASSERT( 0 );
7884 return WDI_STATUS_E_FAILURE;
7885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7887 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 /* Copy the beacon template to local buffer */
7889 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7890 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7891 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7892
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7894 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 if(IS_WDI_STATUS_FAILURE(status))
7896 {
7897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7898 "Failure in SEND BEACON REQ Params WDI API" );
7899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 vos_mem_free(pSendbeaconParams);
7901 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007902}
Jeff Johnson295189b2012-06-20 16:38:30 -07007903/*
7904 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7905 * No need to send any response to PE in this case
7906 */
7907void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7908{
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007910 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 return ;
7912}
7913
Jeff Johnson295189b2012-06-20 16:38:30 -07007914/*
7915 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7916 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7917 * send probe response
7918 */
7919VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7920 tSendProbeRespParams *pSendProbeRspParams)
7921{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007922 WDI_Status status = WDI_STATUS_SUCCESS;
7923 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7924 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007926 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007927
7928 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307929 {
7930 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007931 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307932 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007933
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007935 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007937 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 /* Copy the Probe Response template to local buffer */
7940 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007941 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 pSendProbeRspParams->pProbeRespTemplate,
7943 pSendProbeRspParams->probeRespTemplateLen);
7944 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007945 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7947 WDI_PROBE_REQ_BITMAP_IE_LEN);
7948
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007949 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007950
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007951 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 if(IS_WDI_STATUS_FAILURE(status))
7954 {
7955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7956 "Failure in SEND Probe RSP Params WDI API" );
7957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007959 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007961}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007962#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007963/*
7964 * FUNCTION: WDA_SetMaxTxPowerCallBack
7965 * send the response to PE with power value received from WDI
7966 */
7967void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7968 void* pUserData)
7969{
7970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7971 tWDA_CbContext *pWDA = NULL;
7972 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7973
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007975 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if(NULL == pWdaParams)
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007979 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 VOS_ASSERT(0) ;
7981 return ;
7982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307984 if (NULL == pWDA)
7985 {
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7987 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7989 vos_mem_free(pWdaParams->wdaMsgParam);
7990 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307991 VOS_ASSERT(0);
7992 return ;
7993 }
7994
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 if( NULL == pMaxTxPowerParams )
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007999 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008000 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 return ;
8004 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008005
Jeff Johnson295189b2012-06-20 16:38:30 -07008006
8007 /*need to free memory for the pointers used in the
8008 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8010 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013
8014 /* send response to UMAC*/
8015 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8016
8017 return;
8018}
Jeff Johnson295189b2012-06-20 16:38:30 -07008019/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008020 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 * Request to WDI to send set Max Tx Power Request
8022 */
8023 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8024 tMaxTxPowerParams *MaxTxPowerParams)
8025{
8026 WDI_Status status = WDI_STATUS_SUCCESS;
8027 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8028 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008029
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008031 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8034 sizeof(WDI_SetMaxTxPowerParamsType));
8035 if(NULL == wdiSetMaxTxPowerParams)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 VOS_ASSERT(0);
8040 return VOS_STATUS_E_NOMEM;
8041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8043 if(NULL == pWdaParams)
8044 {
8045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 vos_mem_free(wdiSetMaxTxPowerParams);
8048 VOS_ASSERT(0);
8049 return VOS_STATUS_E_NOMEM;
8050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 /* Copy.Max.Tx.Power Params to WDI structure */
8052 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8053 MaxTxPowerParams->bssId,
8054 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8056 MaxTxPowerParams->selfStaMacAddr,
8057 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8059 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 pWdaParams->pWdaContext = pWDA;
8062 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 /* store Params pass it to WDI */
8064 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8066 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 if(IS_WDI_STATUS_FAILURE(status))
8068 {
8069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8070 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8072 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008073 /* send response to UMAC*/
8074 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 }
8076 return CONVERT_WDI2VOS_STATUS(status);
8077
8078}
Jeff Johnson295189b2012-06-20 16:38:30 -07008079#endif
schang86c22c42013-03-13 18:41:24 -07008080
8081/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008082 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8083 * send the response to PE with power value received from WDI
8084 */
8085void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8086 *pwdiSetMaxTxPowerPerBandRsp,
8087 void* pUserData)
8088{
8089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8090 tWDA_CbContext *pWDA = NULL;
8091 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8092
8093 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8094 "<------ %s ", __func__);
8095 if (NULL == pWdaParams)
8096 {
8097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8098 "%s: pWdaParams received NULL", __func__);
8099 VOS_ASSERT(0);
8100 return ;
8101 }
8102 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308103 if (NULL == pWDA)
8104 {
8105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8106 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8108 vos_mem_free(pWdaParams->wdaMsgParam);
8109 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308110 VOS_ASSERT(0);
8111 return ;
8112 }
8113
Arif Hussaina5ebce02013-08-09 15:09:58 -07008114 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8115 if ( NULL == pMxTxPwrPerBandParams )
8116 {
8117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8118 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8119 VOS_ASSERT(0);
8120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8121 vos_mem_free(pWdaParams);
8122 return;
8123 }
8124
8125 /*need to free memory for the pointers used in the
8126 WDA Process.Set Max Tx Power Req function*/
8127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8128 vos_mem_free(pWdaParams);
8129 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8130
8131 /* send response to UMAC*/
8132 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8133 pMxTxPwrPerBandParams, 0);
8134
8135 return;
8136}
8137
8138/*
8139 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8140 * Request to WDI to send set Max Tx Power Per band Request
8141 */
8142 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8143 tMaxTxPowerPerBandParams
8144 *MaxTxPowerPerBandParams)
8145{
8146 WDI_Status status = WDI_STATUS_SUCCESS;
8147 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8148 tWDA_ReqParams *pWdaParams = NULL;
8149
8150 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8151 "------> %s ", __func__);
8152
8153 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8154 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8155
8156 if (NULL == wdiSetMxTxPwrPerBandParams)
8157 {
8158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8159 "%s: VOS MEM Alloc Failure", __func__);
8160 VOS_ASSERT(0);
8161 return VOS_STATUS_E_NOMEM;
8162 }
8163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8164 if (NULL == pWdaParams)
8165 {
8166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8167 "%s: VOS MEM Alloc Failure", __func__);
8168 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8169 VOS_ASSERT(0);
8170 return VOS_STATUS_E_NOMEM;
8171 }
8172 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8173 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8174 MaxTxPowerPerBandParams->bandInfo;
8175 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8176 MaxTxPowerPerBandParams->power;
8177 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8178 pWdaParams->pWdaContext = pWDA;
8179 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8180 /* store Params pass it to WDI */
8181 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8182 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8183 WDA_SetMaxTxPowerPerBandCallBack,
8184 pWdaParams);
8185 if (IS_WDI_STATUS_FAILURE(status))
8186 {
8187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8188 "Failure in SET MAX TX Power REQ Params WDI API,"
8189 " free all the memory");
8190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8191 vos_mem_free(pWdaParams);
8192 /* send response to UMAC*/
8193 WDA_SendMsg(pWDA,
8194 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8195 MaxTxPowerPerBandParams, 0);
8196 }
8197 return CONVERT_WDI2VOS_STATUS(status);
8198}
8199
8200/*
schang86c22c42013-03-13 18:41:24 -07008201 * FUNCTION: WDA_SetTxPowerCallBack
8202 * send the response to PE with power value received from WDI
8203 */
8204void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8205 void* pUserData)
8206{
8207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8208 tWDA_CbContext *pWDA = NULL;
8209 tSirSetTxPowerReq *pTxPowerParams = NULL;
8210
8211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8212 "<------ %s ", __func__);
8213 if(NULL == pWdaParams)
8214 {
8215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8216 "%s: pWdaParams received NULL", __func__);
8217 VOS_ASSERT(0) ;
8218 return ;
8219 }
8220 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308221 if (NULL == pWDA)
8222 {
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8224 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8226 vos_mem_free(pWdaParams->wdaMsgParam);
8227 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308228 VOS_ASSERT(0);
8229 return ;
8230 }
8231
schang86c22c42013-03-13 18:41:24 -07008232 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8233 if(NULL == pTxPowerParams)
8234 {
8235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8236 "%s: pTxPowerParams received NULL " ,__func__);
8237 VOS_ASSERT(0);
8238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8239 vos_mem_free(pWdaParams);
8240 return ;
8241 }
8242
8243 /*need to free memory for the pointers used in the
8244 WDA Process.Set Max Tx Power Req function*/
8245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8246 vos_mem_free(pWdaParams);
8247
8248 /* send response to UMAC*/
8249 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8250 return;
8251}
8252
8253/*
8254 * FUNCTION: WDA_ProcessSetTxPowerReq
8255 * Request to WDI to send set Tx Power Request
8256 */
8257 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8258 tSirSetTxPowerReq *txPowerParams)
8259{
8260 WDI_Status status = WDI_STATUS_SUCCESS;
8261 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8262 tWDA_ReqParams *pWdaParams = NULL;
8263
8264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8265 "------> %s ", __func__);
8266
8267 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8268 sizeof(WDI_SetTxPowerParamsType));
8269 if(NULL == wdiSetTxPowerParams)
8270 {
8271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8272 "%s: VOS MEM Alloc Failure", __func__);
8273 VOS_ASSERT(0);
8274 return VOS_STATUS_E_NOMEM;
8275 }
8276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8277 if(NULL == pWdaParams)
8278 {
8279 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8280 "%s: VOS MEM Alloc Failure", __func__);
8281 vos_mem_free(wdiSetTxPowerParams);
8282 VOS_ASSERT(0);
8283 return VOS_STATUS_E_NOMEM;
8284 }
8285 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8286 txPowerParams->bssIdx;
8287 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8288 txPowerParams->mwPower;
8289 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8290 pWdaParams->pWdaContext = pWDA;
8291 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8292 /* store Params pass it to WDI */
8293 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8294 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8295 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8296 if(IS_WDI_STATUS_FAILURE(status))
8297 {
8298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8299 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8301 vos_mem_free(pWdaParams);
8302 /* send response to UMAC*/
8303 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8304 }
8305 return CONVERT_WDI2VOS_STATUS(status);
8306}
8307
Jeff Johnson295189b2012-06-20 16:38:30 -07008308/*
8309 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8310 * Free the memory. No need to send any response to PE in this case
8311 */
8312void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8313{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8315
Jeff Johnson295189b2012-06-20 16:38:30 -07008316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008317 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008318
8319 if(NULL == pWdaParams)
8320 {
8321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008322 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008323 VOS_ASSERT(0) ;
8324 return ;
8325 }
8326
8327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8328 vos_mem_free(pWdaParams->wdaMsgParam) ;
8329 vos_mem_free(pWdaParams);
8330
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 /*
8332 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8333 * so just free the request param here
8334 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 return ;
8336}
8337
Jeff Johnson295189b2012-06-20 16:38:30 -07008338/*
8339 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8340 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8341 */
8342VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8343 tP2pPsParams *pP2pPsConfigParams)
8344{
8345 WDI_Status status = WDI_STATUS_SUCCESS ;
8346 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8347 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8348 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008349 tWDA_ReqParams *pWdaParams = NULL;
8350
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 if(NULL == wdiSetP2PGONOAReqParam)
8354 {
8355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008356 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308357 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 VOS_ASSERT(0);
8359 return VOS_STATUS_E_NOMEM;
8360 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008361
8362 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8363 if(NULL == pWdaParams)
8364 {
8365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008366 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008367 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008368 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008369 VOS_ASSERT(0);
8370 return VOS_STATUS_E_NOMEM;
8371 }
8372
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8374 pP2pPsConfigParams->opp_ps;
8375 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8376 pP2pPsConfigParams->ctWindow;
8377 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8378 pP2pPsConfigParams->count;
8379 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8380 pP2pPsConfigParams->duration;
8381 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8382 pP2pPsConfigParams->interval;
8383 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8384 pP2pPsConfigParams->single_noa_duration;
8385 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8386 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008387
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8389 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008390 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8391
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008393 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8394 pWdaParams->pWdaContext = pWDA;
8395
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008397 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8398
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 if(IS_WDI_STATUS_FAILURE(status))
8400 {
8401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8402 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8404 vos_mem_free(pWdaParams->wdaMsgParam);
8405 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 return CONVERT_WDI2VOS_STATUS(status);
8408
Jeff Johnson295189b2012-06-20 16:38:30 -07008409}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308410
8411#ifdef FEATURE_WLAN_TDLS
8412/*
8413 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8414 * Free the memory. No need to send any response to PE in this case
8415 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308416void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8417 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308418{
8419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8420 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308421 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308422
8423
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8425 "<------ %s " ,__func__);
8426 if(NULL == pWdaParams)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8429 "%s: pWdaParams received NULL", __func__);
8430 VOS_ASSERT(0) ;
8431 return ;
8432 }
8433 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8434
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308435 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308436 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8438 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8440 vos_mem_free(pWdaParams->wdaMsgParam);
8441 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308442 VOS_ASSERT(0);
8443 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308444 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308445
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308446 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8447 if( NULL == pTdlsLinkEstablishParams )
8448 {
8449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8450 "%s: pTdlsLinkEstablishParams "
8451 "received NULL " ,__func__);
8452 VOS_ASSERT(0);
8453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8454 vos_mem_free(pWdaParams);
8455 return ;
8456 }
8457 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8458 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308460 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308461 /* send response to UMAC*/
8462 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8463
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308464 return ;
8465}
8466
8467VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8468 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8469{
8470 WDI_Status status = WDI_STATUS_SUCCESS ;
8471 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8472 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8473 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8474 tWDA_ReqParams *pWdaParams = NULL;
8475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8476 "------> %s " ,__func__);
8477 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8480 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308481 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308482 VOS_ASSERT(0);
8483 return VOS_STATUS_E_NOMEM;
8484 }
8485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8486 if(NULL == pWdaParams)
8487 {
8488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8489 "%s: VOS MEM Alloc Failure", __func__);
8490 vos_mem_free(pTdlsLinkEstablishParams);
8491 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8492 VOS_ASSERT(0);
8493 return VOS_STATUS_E_NOMEM;
8494 }
8495 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308496 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308497 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308498 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308499 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308500 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308501 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308502 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308503 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308504 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308505 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8506 pTdlsLinkEstablishParams->isOffChannelSupported;
8507
8508 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8509 pTdlsLinkEstablishParams->validChannels,
8510 pTdlsLinkEstablishParams->validChannelsLen);
8511
8512 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8513 pTdlsLinkEstablishParams->validChannelsLen;
8514
8515 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8516 pTdlsLinkEstablishParams->validOperClasses,
8517 pTdlsLinkEstablishParams->validOperClassesLen);
8518 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8519 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308520
8521 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8522 /* Store msg pointer from PE, as this will be used for response */
8523 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8524 /* store Params pass it to WDI */
8525 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8526 pWdaParams->pWdaContext = pWDA;
8527
8528 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8529 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8530 WDA_SetTDLSLinkEstablishReqParamsCallback,
8531 pWdaParams);
8532 if(IS_WDI_STATUS_FAILURE(status))
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8535 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8537 vos_mem_free(pWdaParams->wdaMsgParam);
8538 vos_mem_free(pWdaParams);
8539 }
8540 return CONVERT_WDI2VOS_STATUS(status);
8541}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308542
8543// tdlsoffchan
8544void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8545 void* pUserData)
8546{
8547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8548 tWDA_CbContext *pWDA = NULL;
8549 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8550
8551
8552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8553 "<------ %s " ,__func__);
8554 if(NULL == pWdaParams)
8555 {
8556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8557 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308558 VOS_ASSERT(0) ;
8559 return ;
8560 }
8561 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8562
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308563 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308564 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8566 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8568 vos_mem_free(pWdaParams->wdaMsgParam);
8569 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308570 VOS_ASSERT(0);
8571 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308572 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308573
Atul Mittalc0f739f2014-07-31 13:47:47 +05308574 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308575 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8578 "%s: pTdlsChanSwitchParams "
8579 "received NULL " ,__func__);
8580 VOS_ASSERT(0);
8581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8582 vos_mem_free(pWdaParams);
8583 return ;
8584 }
8585 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8586 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8588 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308589 /* send response to UMAC*/
8590 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308591
8592 return ;
8593}
8594VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8595 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8596{
8597 WDI_Status status = WDI_STATUS_SUCCESS ;
8598 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8599 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8600 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8601 tWDA_ReqParams *pWdaParams = NULL;
8602
8603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8604 "Enter: %s ",__func__);
8605 if(NULL == wdiSetTDLSChanSwitchReqParam)
8606 {
8607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8608 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308609 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308610 VOS_ASSERT(0);
8611 return VOS_STATUS_E_NOMEM;
8612 }
8613
8614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8615 if(NULL == pWdaParams)
8616 {
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8618 "%s: VOS MEM Alloc Failure", __func__);
8619 vos_mem_free(pTdlsChanSwitchParams);
8620 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8621 VOS_ASSERT(0);
8622 return VOS_STATUS_E_NOMEM;
8623 }
8624 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8625 pTdlsChanSwitchParams->staIdx;
8626 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8627 pTdlsChanSwitchParams->tdlsSwMode;
8628 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8629 pTdlsChanSwitchParams->operClass;
8630 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8631 pTdlsChanSwitchParams->tdlsOffCh;
8632 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8633 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8634
8635
8636 /* Store msg pointer from PE, as this will be used for response */
8637 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8638 /* store Params pass it to WDI */
8639 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8640 pWdaParams->pWdaContext = pWDA;
8641 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8642 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8643 WDA_SetTDLSChanSwitchReqParamsCallback,
8644 pWdaParams);
8645 if(IS_WDI_STATUS_FAILURE(status))
8646 {
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8648 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8650 vos_mem_free(pWdaParams->wdaMsgParam);
8651 vos_mem_free(pWdaParams);
8652 }
8653 return CONVERT_WDI2VOS_STATUS(status);
8654}
8655#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308656
8657
Jeff Johnson295189b2012-06-20 16:38:30 -07008658#ifdef WLAN_FEATURE_VOWIFI_11R
8659/*
8660 * FUNCTION: WDA_AggrAddTSReqCallback
8661 * send ADD AGGREGATED TS RSP back to PE
8662 */
8663void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8664{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308666 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008667 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008670 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008671 if(NULL == pWdaParams)
8672 {
8673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008674 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008675 VOS_ASSERT(0) ;
8676 return ;
8677 }
8678
8679 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308680 if (NULL == pWDA)
8681 {
8682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8683 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8685 vos_mem_free(pWdaParams->wdaMsgParam);
8686 vos_mem_free(pWdaParams);
8687
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308688 VOS_ASSERT(0);
8689 return ;
8690 }
8691
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008692 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008693
8694 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8695 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008696 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008699
8700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8701 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 return ;
8703}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008704/*
8705 * FUNCTION: WDA_ProcessAddTSReq
8706 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8707 */
8708VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8709 tAggrAddTsParams *pAggrAddTsReqParams)
8710{
8711 WDI_Status status = WDI_STATUS_SUCCESS ;
8712 int i;
8713 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008714 tWDA_ReqParams *pWdaParams = NULL;
8715
8716
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008718 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8720 sizeof(WDI_AggrAddTSReqParamsType)) ;
8721 if(NULL == wdiAggrAddTSReqParam)
8722 {
8723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008724 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308725 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 VOS_ASSERT(0);
8727 return VOS_STATUS_E_NOMEM;
8728 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008729
8730
8731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8732 if(NULL == pWdaParams)
8733 {
8734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008735 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008736 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008737 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008738 VOS_ASSERT(0);
8739 return VOS_STATUS_E_NOMEM;
8740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8742 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8743 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8745 {
8746 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8747 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8748 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8750 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8751 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8752 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8753 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8754 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8755 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8756 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8757 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8758 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8759 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8760 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8761 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8762 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8763 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8764 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8766 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8768 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8770 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8771 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8772 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8773 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8774 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8775 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8776 pAggrAddTsReqParams->tspec[i].inactInterval;
8777 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8778 pAggrAddTsReqParams->tspec[i].suspendInterval;
8779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8780 pAggrAddTsReqParams->tspec[i].svcStartTime;
8781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8782 pAggrAddTsReqParams->tspec[i].minDataRate;
8783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8784 pAggrAddTsReqParams->tspec[i].meanDataRate;
8785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8786 pAggrAddTsReqParams->tspec[i].peakDataRate;
8787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8788 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8790 pAggrAddTsReqParams->tspec[i].delayBound;
8791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8792 pAggrAddTsReqParams->tspec[i].minPhyRate;
8793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8794 pAggrAddTsReqParams->tspec[i].surplusBw;
8795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8796 pAggrAddTsReqParams->tspec[i].mediumTime;
8797 }
8798
8799 /* TODO: tAggrAddTsParams doesn't have the following fields */
8800#if 0
8801 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8802 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8803 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8804 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8805#endif
8806 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8807
8808 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008809 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008811 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8812
8813 pWdaParams->pWdaContext = pWDA;
8814
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008816 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8817
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 if(IS_WDI_STATUS_FAILURE(status))
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8821 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8823 vos_mem_free(pWdaParams);
8824
8825 /* send the failure response back to PE*/
8826 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8827 {
8828 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8829 }
8830
8831 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8832 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008834 return CONVERT_WDI2VOS_STATUS(status) ;
8835}
8836#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008837/*
Mihir Shetea4306052014-03-25 00:02:54 +05308838 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 * send Enter IMPS RSP back to PE
8840 */
Mihir Shetea4306052014-03-25 00:02:54 +05308841void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008842{
Mihir Shetea4306052014-03-25 00:02:54 +05308843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308844 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308845
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308847 "<------ %s status=%d" ,__func__,status);
8848 if(NULL == pWdaParams)
8849 {
8850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8851 "%s: pWdaParams received NULL", __func__);
8852 VOS_ASSERT(0);
8853 return;
8854 }
8855
8856 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308857 if (NULL == pWDA)
8858 {
8859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8860 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8862 vos_mem_free(pWdaParams->wdaMsgParam);
8863 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308864 VOS_ASSERT(0);
8865 return ;
8866 }
Mihir Shetea4306052014-03-25 00:02:54 +05308867
8868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8869 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308870 if (WDI_STATUS_SUCCESS != status)
8871 {
8872 pWDA->failureCounts.enterImpsFailureCount++;
8873 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8874 pWDA->failureCounts.enterImpsFailureCount)
8875 {
8876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8877 "%s: Status %d fail count %d", __func__, status,
8878 pWDA->failureCounts.enterImpsFailureCount);
8879 pWDA->failureCounts.enterImpsFailureCount = 0;
8880 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8881 WLAN_LOG_INDICATOR_HOST_DRIVER,
8882 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8883 FALSE, TRUE);
8884 }
8885 }
8886 else
8887 {
8888 pWDA->failureCounts.enterImpsFailureCount = 0;
8889 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008890 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008891 return ;
8892}
Mihir Shetea4306052014-03-25 00:02:54 +05308893
8894
8895/*
8896 * FUNCTION: WDA_EnterImpsReqCallback
8897 * Free memory and send Enter IMPS RSP back to PE.
8898 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8899 */
8900void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8901{
8902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308903 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308904
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8906 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8907
8908 if(NULL == pWdaParams)
8909 {
8910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8911 "%s: pWdaParams received NULL", __func__);
8912 VOS_ASSERT(0);
8913 return;
8914 }
8915
8916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308917 if (NULL == pWDA)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8920 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8922 vos_mem_free(pWdaParams->wdaMsgParam);
8923 vos_mem_free(pWdaParams);
8924
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308925 VOS_ASSERT(0);
8926 return ;
8927 }
8928
Mihir Shetea4306052014-03-25 00:02:54 +05308929
8930 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8931 {
8932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8933 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308934 pWDA->failureCounts.enterImpsFailureCount++;
8935 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8936 pWDA->failureCounts.enterImpsFailureCount)
8937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8939 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8940 pWDA->failureCounts.enterImpsFailureCount);
8941 pWDA->failureCounts.enterImpsFailureCount = 0;
8942 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8943 WLAN_LOG_INDICATOR_HOST_DRIVER,
8944 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8945 FALSE, TRUE);
8946 }
Mihir Shetea4306052014-03-25 00:02:54 +05308947 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8948 CONVERT_WDI2SIR_STATUS(wdiStatus));
8949 }
8950
8951 return;
8952}
Jeff Johnson295189b2012-06-20 16:38:30 -07008953/*
8954 * FUNCTION: WDA_ProcessEnterImpsReq
8955 * Request to WDI to Enter IMPS power state.
8956 */
8957VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8958{
8959 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308960 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8961 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308962 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008964 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308965
8966
8967 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8968 if (NULL == wdiEnterImpsReqParams)
8969 {
8970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8971 "%s: VOS MEM Alloc Failure", __func__);
8972 VOS_ASSERT(0);
8973 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8974 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8975 return VOS_STATUS_E_NOMEM;
8976 }
8977
8978 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8979 if (NULL == pWdaParams)
8980 {
8981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8982 "%s: VOS MEM Alloc Failure", __func__);
8983 VOS_ASSERT(0);
8984 vos_mem_free(wdiEnterImpsReqParams);
8985 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8986 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8987 return VOS_STATUS_E_NOMEM;
8988 }
8989
8990 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8991 wdiEnterImpsReqParams->pUserData = pWdaParams;
8992
8993 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8994 pWdaParams->wdaMsgParam = NULL;
8995 pWdaParams->pWdaContext = pWDA;
8996
8997 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8998 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8999 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 if(IS_WDI_STATUS_FAILURE(status))
9001 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309002 if (! (failcnt & 0xF))
9003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9004 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9005 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309006 vos_mem_free(wdiEnterImpsReqParams);
9007 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009008 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 return CONVERT_WDI2VOS_STATUS(status) ;
9011}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309012
9013/*
9014 * FUNCTION: WDA_ExitImpsRespCallback
9015 * send Exit IMPS RSP back to PE
9016 */
9017void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9018{
9019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9020 tWDA_CbContext *pWDA;
9021
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9023 "<------ %s " ,__func__);
9024
9025 if (NULL == pWdaParams)
9026 {
9027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9028 "%s: pWdaParams received NULL", __func__);
9029 VOS_ASSERT(0);
9030 return;
9031 }
9032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9033
9034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9035 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309036 if (WDI_STATUS_SUCCESS != status)
9037 {
9038 pWDA->failureCounts.exitImpsFailureCount++;
9039 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9040 pWDA->failureCounts.exitImpsFailureCount)
9041 {
9042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9043 "%s: Status %d fail count %d", __func__,
9044 status,
9045 pWDA->failureCounts.exitImpsFailureCount);
9046 pWDA->failureCounts.exitImpsFailureCount = 0;
9047 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9048 WLAN_LOG_INDICATOR_HOST_DRIVER,
9049 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9050 FALSE, TRUE);
9051 }
9052 }
9053 else
9054 {
9055 pWDA->failureCounts.exitImpsFailureCount = 0;
9056 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309057
9058 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9059 return;
9060}
9061
Jeff Johnson295189b2012-06-20 16:38:30 -07009062/*
9063 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 */
9065void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9066{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309068 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009070 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309071 if(NULL == pWdaParams)
9072 {
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9074 "%s: pWdaParams received NULL", __func__);
9075 VOS_ASSERT(0);
9076 return;
9077 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309078 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309079 if (IS_WDI_STATUS_FAILURE(status))
9080 {
9081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9082 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309083
9084 pWDA->failureCounts.exitImpsFailureCount++;
9085 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9086 pWDA->failureCounts.exitImpsFailureCount)
9087 {
9088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9089 "%s: wdiStatus %d fail count %d", __func__,
9090 status,
9091 pWDA->failureCounts.exitImpsFailureCount);
9092 pWDA->failureCounts.exitImpsFailureCount = 0;
9093 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9094 WLAN_LOG_INDICATOR_HOST_DRIVER,
9095 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9096 FALSE, TRUE);
9097 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309098 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9099 {
9100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9101 FL("reload wlan driver"));
9102 wpalWlanReload();
9103 }
9104 }
9105 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309107
Jeff Johnson295189b2012-06-20 16:38:30 -07009108/*
9109 * FUNCTION: WDA_ProcessExitImpsReq
9110 * Request to WDI to Exit IMPS power state.
9111 */
9112VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9113{
9114 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309115 tWDA_ReqParams *pWdaParams;
9116 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9117
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309120 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9121 sizeof(WDI_ExitImpsReqParamsType));
9122 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9125 "%s: VOS MEM Alloc Failure", __func__);
9126 VOS_ASSERT(0);
9127 return VOS_STATUS_E_NOMEM;
9128 }
9129 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9130 if(NULL == pWdaParams)
9131 {
9132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9133 "%s: VOS MEM Alloc Failure", __func__);
9134 VOS_ASSERT(0);
9135 vos_mem_free(wdiExitImpsReqParams);
9136 return VOS_STATUS_E_NOMEM;
9137 }
9138 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9139 wdiExitImpsReqParams->pUserData = pWdaParams;
9140
9141 /* Store param pointer as passed in by caller */
9142 /* store Params pass it to WDI */
9143 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9144 pWdaParams->pWdaContext = pWDA;
9145 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9146 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9147 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9148 pWdaParams);
9149 if (IS_WDI_STATUS_FAILURE(status))
9150 {
9151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9152 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9154 vos_mem_free(pWdaParams);
9155 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 return CONVERT_WDI2VOS_STATUS(status) ;
9158}
Jeff Johnson295189b2012-06-20 16:38:30 -07009159/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009160 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 * send Enter BMPS RSP back to PE
9162 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009163void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009164{
9165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309166 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009167 tEnterBmpsParams *pEnterBmpsRspParams;
9168
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009170 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 if(NULL == pWdaParams)
9172 {
9173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009174 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 VOS_ASSERT(0) ;
9176 return ;
9177 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009178
9179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309180 if (NULL == pWDA)
9181 {
9182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9183 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309184
9185 if(pWdaParams->wdaWdiApiMsgParam)
9186 {
9187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9188 }
9189 vos_mem_free(pWdaParams);
9190
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309191 VOS_ASSERT(0);
9192 return ;
9193 }
9194
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009195 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9196
9197 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009198 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009199
9200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309202 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9203 {
9204 pWDA->failureCounts.enterBmpsFailureCount++;
9205 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9206 pWDA->failureCounts.enterBmpsFailureCount)
9207 {
9208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9209 "%s: wdiStatus %d fail count %d", __func__,
9210 pwdiEnterBmpsRsp->wdiStatus,
9211 pWDA->failureCounts.enterBmpsFailureCount);
9212 pWDA->failureCounts.enterBmpsFailureCount = 0;
9213 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9214 WLAN_LOG_INDICATOR_HOST_DRIVER,
9215 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9216 FALSE, TRUE);
9217 }
9218 }
9219 else
9220 {
9221 pWDA->failureCounts.enterBmpsFailureCount = 0;
9222 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009223 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9224
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 return ;
9226}
Jeff Johnson295189b2012-06-20 16:38:30 -07009227/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009228 * FUNCTION: WDA_EnterBmpsReqCallback
9229 * Free memory and send Enter BMPS RSP back to PE.
9230 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9231 */
9232void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9233{
9234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309235 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009236 tEnterBmpsParams *pEnterBmpsRspParams;
9237
9238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9239 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9240
9241 if(NULL == pWdaParams)
9242 {
9243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9244 "%s: pWdaParams received NULL", __func__);
9245 VOS_ASSERT(0);
9246 return;
9247 }
9248
9249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309250 if (NULL == pWDA)
9251 {
9252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9253 "%s:pWDA is NULL", __func__);
9254 VOS_ASSERT(0);
9255 return ;
9256 }
9257
Yue Ma7f44bbe2013-04-12 11:47:39 -07009258 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9259 pEnterBmpsRspParams->status = wdiStatus;
9260
9261 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9262 {
9263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9264 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309265 pWDA->failureCounts.enterBmpsFailureCount++;
9266 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9267 pWDA->failureCounts.enterBmpsFailureCount)
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9270 "%s: wdiStatus %d fail count %d", __func__,
9271 wdiStatus,
9272 pWDA->failureCounts.enterBmpsFailureCount);
9273 pWDA->failureCounts.enterBmpsFailureCount = 0;
9274 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9275 WLAN_LOG_INDICATOR_HOST_DRIVER,
9276 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9277 FALSE, TRUE);
9278 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009279 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9280 }
9281
9282 return;
9283}
9284/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 * FUNCTION: WDA_ProcessEnterBmpsReq
9286 * Request to WDI to Enter BMPS power state.
9287 */
9288VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9289 tEnterBmpsParams *pEnterBmpsReqParams)
9290{
9291 WDI_Status status = WDI_STATUS_SUCCESS;
9292 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9293 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009295 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009296 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9297 {
9298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009299 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 VOS_ASSERT(0);
9301 return VOS_STATUS_E_FAILURE;
9302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9304 if (NULL == wdiEnterBmpsReqParams)
9305 {
9306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009309 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9310 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 return VOS_STATUS_E_NOMEM;
9312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9314 if (NULL == pWdaParams)
9315 {
9316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 VOS_ASSERT(0);
9319 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009320 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9321 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 return VOS_STATUS_E_NOMEM;
9323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9325 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9326 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9327 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009328 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9330 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9331 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009332 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9333 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009334
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 /* Store param pointer as passed in by caller */
9336 /* store Params pass it to WDI */
9337 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009338 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009339 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009341 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 if (IS_WDI_STATUS_FAILURE(status))
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9345 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009347 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009349 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 return CONVERT_WDI2VOS_STATUS(status);
9352}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009353
9354
9355static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9356 WDI_Status wdiStatus,
9357 tExitBmpsParams *pExitBmpsReqParams)
9358{
9359 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9360
9361 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9362}
9363
9364
Jeff Johnson295189b2012-06-20 16:38:30 -07009365/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009366 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 * send Exit BMPS RSP back to PE
9368 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009369void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009370{
9371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309372 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009373 tExitBmpsParams *pExitBmpsRspParams;
9374
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009376 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 if(NULL == pWdaParams)
9378 {
9379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009380 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 VOS_ASSERT(0) ;
9382 return ;
9383 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009384
9385 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309386 if (NULL == pWDA)
9387 {
9388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9389 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309390
9391 if(pWdaParams->wdaWdiApiMsgParam)
9392 {
9393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9394 }
9395 vos_mem_free(pWdaParams);
9396
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309397 VOS_ASSERT(0);
9398 return ;
9399 }
9400
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009401 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9402
9403 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009404 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009405
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309407 vos_mem_free(pWdaParams);
9408
9409 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9410 {
9411 pWDA->failureCounts.exitBmpsFailureCount++;
9412 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9413 pWDA->failureCounts.exitBmpsFailureCount)
9414 {
9415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9416 "%s: Status %d fail count %d", __func__,
9417 pExitBmpsRspParams->status,
9418 pWDA->failureCounts.exitBmpsFailureCount);
9419 pWDA->failureCounts.exitBmpsFailureCount = 0;
9420 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9421 WLAN_LOG_INDICATOR_HOST_DRIVER,
9422 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9423 FALSE, TRUE);
9424 }
9425 }
9426 else
9427 {
9428 pWDA->failureCounts.exitBmpsFailureCount = 0;
9429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009430
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009431 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 return ;
9433}
Jeff Johnson295189b2012-06-20 16:38:30 -07009434/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009435 * FUNCTION: WDA_ExitBmpsReqCallback
9436 * Free memory and send Exit BMPS RSP back to PE.
9437 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9438 */
9439void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9440{
9441 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309442 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009443 tExitBmpsParams *pExitBmpsRspParams;
9444
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9446 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9447
9448 if(NULL == pWdaParams)
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9451 "%s: pWdaParams received NULL", __func__);
9452 VOS_ASSERT(0);
9453 return;
9454 }
9455
9456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309457 if (NULL == pWDA)
9458 {
9459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9460 "%s:pWDA is NULL", __func__);
9461 VOS_ASSERT(0);
9462 return ;
9463 }
9464
Yue Ma7f44bbe2013-04-12 11:47:39 -07009465 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9466 pExitBmpsRspParams->status = wdiStatus;
9467
9468 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9469 {
9470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9471 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309472 pWDA->failureCounts.exitBmpsFailureCount++;
9473 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9474 pWDA->failureCounts.exitBmpsFailureCount)
9475 {
9476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9477 "%s: wdiStatus %d fail count %d", __func__,
9478 wdiStatus,
9479 pWDA->failureCounts.exitBmpsFailureCount);
9480 pWDA->failureCounts.exitBmpsFailureCount = 0;
9481 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9482 WLAN_LOG_INDICATOR_HOST_DRIVER,
9483 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9484 FALSE, TRUE);
9485 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009486 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9487 }
9488
9489 return;
9490}
9491/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 * FUNCTION: WDA_ProcessExitBmpsReq
9493 * Request to WDI to Exit BMPS power state.
9494 */
9495VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9496 tExitBmpsParams *pExitBmpsReqParams)
9497{
9498 WDI_Status status = WDI_STATUS_SUCCESS ;
9499 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9500 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9501 sizeof(WDI_ExitBmpsReqParamsType)) ;
9502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 if(NULL == wdiExitBmpsReqParams)
9506 {
9507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009510 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 return VOS_STATUS_E_NOMEM;
9512 }
9513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 VOS_ASSERT(0);
9519 vos_mem_free(wdiExitBmpsReqParams);
9520 return VOS_STATUS_E_NOMEM;
9521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009523
9524 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9525
Yue Ma7f44bbe2013-04-12 11:47:39 -07009526 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9527 wdiExitBmpsReqParams->pUserData = pWdaParams;
9528
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 /* Store param pointer as passed in by caller */
9530 /* store Params pass it to WDI */
9531 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9532 pWdaParams->pWdaContext = pWDA;
9533 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009535 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 if(IS_WDI_STATUS_FAILURE(status))
9537 {
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9539 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9541 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009542 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 return CONVERT_WDI2VOS_STATUS(status) ;
9545}
Jeff Johnson295189b2012-06-20 16:38:30 -07009546/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009547 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 * send Enter UAPSD RSP back to PE
9549 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009550void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009551{
9552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309553 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009554 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009556 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 if(NULL == pWdaParams)
9558 {
9559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009560 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 VOS_ASSERT(0) ;
9562 return ;
9563 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009564
9565 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309566 if (NULL == pWDA)
9567 {
9568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9569 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309570
9571 if(pWdaParams->wdaWdiApiMsgParam)
9572 {
9573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9574 }
9575 vos_mem_free(pWdaParams);
9576
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309577 VOS_ASSERT(0);
9578 return ;
9579 }
9580
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009581 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9582
9583 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009584 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009585
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9587 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009588 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 return ;
9590}
Jeff Johnson295189b2012-06-20 16:38:30 -07009591/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009592 * FUNCTION: WDA_EnterUapsdReqCallback
9593 * Free memory and send Enter UAPSD RSP back to PE.
9594 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9595 */
9596void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9597{
9598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9599 tWDA_CbContext *pWDA;
9600 tUapsdParams *pEnterUapsdRsqParams;
9601
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9603 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9604
9605 if(NULL == pWdaParams)
9606 {
9607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9608 "%s: pWdaParams received NULL", __func__);
9609 VOS_ASSERT(0);
9610 return;
9611 }
9612
9613 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309614 if (NULL == pWDA)
9615 {
9616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9617 "%s:pWDA is NULL", __func__);
9618 VOS_ASSERT(0);
9619 return ;
9620 }
9621
Yue Ma7f44bbe2013-04-12 11:47:39 -07009622 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9623 pEnterUapsdRsqParams->status = wdiStatus;
9624
9625 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9626 {
9627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9628 vos_mem_free(pWdaParams);
9629 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9630 }
9631
9632 return;
9633}
9634/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 * FUNCTION: WDA_ProcessEnterUapsdReq
9636 * Request to WDI to Enter UAPSD power state.
9637 */
9638VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9639 tUapsdParams *pEnterUapsdReqParams)
9640{
9641 WDI_Status status = WDI_STATUS_SUCCESS ;
9642 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9643 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9644 sizeof(WDI_EnterUapsdReqParamsType)) ;
9645 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009647 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 if(NULL == wdiEnterUapsdReqParams)
9649 {
9650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 VOS_ASSERT(0);
9653 return VOS_STATUS_E_NOMEM;
9654 }
9655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9656 if(NULL == pWdaParams)
9657 {
9658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009660 VOS_ASSERT(0);
9661 vos_mem_free(wdiEnterUapsdReqParams);
9662 return VOS_STATUS_E_NOMEM;
9663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9665 pEnterUapsdReqParams->beDeliveryEnabled;
9666 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9667 pEnterUapsdReqParams->beTriggerEnabled;
9668 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9669 pEnterUapsdReqParams->bkDeliveryEnabled;
9670 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9671 pEnterUapsdReqParams->bkTriggerEnabled;
9672 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9673 pEnterUapsdReqParams->viDeliveryEnabled;
9674 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9675 pEnterUapsdReqParams->viTriggerEnabled;
9676 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9677 pEnterUapsdReqParams->voDeliveryEnabled;
9678 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9679 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009680 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009681
Yue Ma7f44bbe2013-04-12 11:47:39 -07009682 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9683 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009684
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 /* Store param pointer as passed in by caller */
9686 /* store Params pass it to WDI */
9687 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9688 pWdaParams->pWdaContext = pWDA;
9689 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009691 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 if(IS_WDI_STATUS_FAILURE(status))
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9695 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9696 vos_mem_free(pWdaParams->wdaMsgParam) ;
9697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9698 vos_mem_free(pWdaParams) ;
9699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009700 return CONVERT_WDI2VOS_STATUS(status) ;
9701}
Jeff Johnson295189b2012-06-20 16:38:30 -07009702/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009703 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 * send Exit UAPSD RSP back to PE
9705 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009706void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009707{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009708
9709 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9710 tWDA_CbContext *pWDA;
9711 tExitUapsdParams *pExitUapsdRspParams;
9712
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009715 if(NULL == pWdaParams)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009719 VOS_ASSERT(0);
9720 return;
9721 }
9722
9723 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9724 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9725
9726 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009727 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009728
9729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9730 vos_mem_free(pWdaParams) ;
9731
9732 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 return ;
9734}
Jeff Johnson295189b2012-06-20 16:38:30 -07009735/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009736 * FUNCTION: WDA_ExitUapsdReqCallback
9737 * Free memory and send Exit UAPSD RSP back to PE.
9738 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9739 */
9740void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9741{
9742 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309743 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009744 tExitUapsdParams *pExitUapsdRspParams;
9745
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9747 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9748
9749 if(NULL == pWdaParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9752 "%s: pWdaParams received NULL", __func__);
9753 VOS_ASSERT(0);
9754 return;
9755 }
9756
9757 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309758 if (NULL == pWDA)
9759 {
9760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9761 "%s:pWDA is NULL", __func__);
9762 VOS_ASSERT(0);
9763 return ;
9764 }
9765
Yue Ma7f44bbe2013-04-12 11:47:39 -07009766 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9767 pExitUapsdRspParams->status = wdiStatus;
9768
9769 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9770 {
9771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9772 vos_mem_free(pWdaParams);
9773 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9774 }
9775
9776 return;
9777}
9778/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 * FUNCTION: WDA_ProcessExitUapsdReq
9780 * Request to WDI to Exit UAPSD power state.
9781 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009782VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9783 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009784{
9785 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009786 tWDA_ReqParams *pWdaParams ;
9787 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9788 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9789 sizeof(WDI_ExitUapsdReqParamsType)) ;
9790
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009792 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009793
9794 if(NULL == wdiExitUapsdReqParams)
9795 {
9796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009797 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009798 VOS_ASSERT(0);
9799 return VOS_STATUS_E_NOMEM;
9800 }
9801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9802 if(NULL == pWdaParams)
9803 {
9804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009805 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009806 VOS_ASSERT(0);
9807 vos_mem_free(wdiExitUapsdReqParams);
9808 return VOS_STATUS_E_NOMEM;
9809 }
9810
9811 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009812 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9813 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009814
9815 /* Store param pointer as passed in by caller */
9816 /* store Params pass it to WDI */
9817 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9818 pWdaParams->pWdaContext = pWDA;
9819 pWdaParams->wdaMsgParam = pExitUapsdParams;
9820
Yue Ma7f44bbe2013-04-12 11:47:39 -07009821 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009822 if(IS_WDI_STATUS_FAILURE(status))
9823 {
9824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9825 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009826 vos_mem_free(pWdaParams->wdaMsgParam) ;
9827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9828 vos_mem_free(pWdaParams) ;
9829
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009831 return CONVERT_WDI2VOS_STATUS(status) ;
9832}
9833
Jeff Johnson295189b2012-06-20 16:38:30 -07009834/*
9835 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9836 *
9837 */
9838void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9839{
9840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 if(NULL == pWdaParams)
9844 {
9845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009846 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 VOS_ASSERT(0) ;
9848 return ;
9849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 if( pWdaParams != NULL )
9851 {
9852 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9853 {
9854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9855 }
9856 if( pWdaParams->wdaMsgParam != NULL )
9857 {
9858 vos_mem_free(pWdaParams->wdaMsgParam) ;
9859 }
9860 vos_mem_free(pWdaParams) ;
9861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 return ;
9863}
Jeff Johnson295189b2012-06-20 16:38:30 -07009864/*
9865 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9866 * Request to WDI to set the power save params at start.
9867 */
9868VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9869 tSirPowerSaveCfg *pPowerSaveCfg)
9870{
9871 WDI_Status status = WDI_STATUS_SUCCESS ;
9872 tHalCfg *tlvStruct = NULL ;
9873 tANI_U8 *tlvStructStart = NULL ;
9874 v_PVOID_t *configParam;
9875 tANI_U32 configParamSize;
9876 tANI_U32 *configDataValue;
9877 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9878 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9882 {
9883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009884 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009886 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 return VOS_STATUS_E_FAILURE;
9888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9890 if (NULL == wdiPowerSaveCfg)
9891 {
9892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009895 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 return VOS_STATUS_E_NOMEM;
9897 }
9898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9899 if(NULL == pWdaParams)
9900 {
9901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009903 VOS_ASSERT(0);
9904 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009905 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 return VOS_STATUS_E_NOMEM;
9907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9909 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 if(NULL == configParam)
9911 {
9912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009913 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009914 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 vos_mem_free(pWdaParams);
9916 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009917 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 return VOS_STATUS_E_NOMEM;
9919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 vos_mem_set(configParam, configParamSize, 0);
9921 wdiPowerSaveCfg->pConfigBuffer = configParam;
9922 tlvStruct = (tHalCfg *)configParam;
9923 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9925 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9926 tlvStruct->length = sizeof(tANI_U32);
9927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9928 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9930 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9932 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9933 tlvStruct->length = sizeof(tANI_U32);
9934 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9935 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9937 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9939 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9940 tlvStruct->length = sizeof(tANI_U32);
9941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9942 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9944 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9946 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9947 tlvStruct->length = sizeof(tANI_U32);
9948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9949 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9951 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9953 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9954 tlvStruct->length = sizeof(tANI_U32);
9955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9956 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9958 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9960 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9961 tlvStruct->length = sizeof(tANI_U32);
9962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9963 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9965 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9967 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9968 tlvStruct->length = sizeof(tANI_U32);
9969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9970 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9972 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9974 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9975 tlvStruct->length = sizeof(tANI_U32);
9976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9977 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9978 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9979 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9981 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9982 tlvStruct->length = sizeof(tANI_U32);
9983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9984 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9985 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9986 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9988 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9989 tlvStruct->length = sizeof(tANI_U32);
9990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9991 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9993 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9995 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9996 tlvStruct->length = sizeof(tANI_U32);
9997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9998 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10000 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 /* store Params pass it to WDI */
10004 pWdaParams->wdaMsgParam = configParam;
10005 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10006 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10008 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 if(IS_WDI_STATUS_FAILURE(status))
10010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10012 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10013 vos_mem_free(pWdaParams->wdaMsgParam);
10014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10015 vos_mem_free(pWdaParams);
10016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 return CONVERT_WDI2VOS_STATUS(status);
10019}
Jeff Johnson295189b2012-06-20 16:38:30 -070010020/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010021 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 *
10023 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010024void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010025{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10027
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010029 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010030
10031 if(NULL == pWdaParams)
10032 {
10033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10034 "%s: pWdaParams received NULL", __func__);
10035 VOS_ASSERT(0);
10036 return ;
10037 }
10038
10039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 vos_mem_free(pWdaParams);
10041
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 return ;
10043}
Jeff Johnson295189b2012-06-20 16:38:30 -070010044/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010045 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10046 * Free memory.
10047 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10048 */
10049void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10050{
10051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10052
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10054 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10055
10056 if(NULL == pWdaParams)
10057 {
10058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10059 "%s: pWdaParams received NULL", __func__);
10060 VOS_ASSERT(0);
10061 return;
10062 }
10063
10064 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10065 {
10066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10067 vos_mem_free(pWdaParams);
10068 }
10069
10070 return;
10071}
10072/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 * FUNCTION: WDA_SetUapsdAcParamsReq
10074 * Request to WDI to set the UAPSD params for an ac (sta mode).
10075 */
10076VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10077 tUapsdInfo *pUapsdInfo)
10078{
10079 WDI_Status status = WDI_STATUS_SUCCESS;
10080 tWDA_CbContext *pWDA = NULL ;
10081 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10082 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10083 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10084 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010086 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 if(NULL == wdiUapsdParams)
10088 {
10089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 VOS_ASSERT(0);
10092 return VOS_STATUS_E_NOMEM;
10093 }
10094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10095 if(NULL == pWdaParams)
10096 {
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 VOS_ASSERT(0);
10100 vos_mem_free(wdiUapsdParams);
10101 return VOS_STATUS_E_NOMEM;
10102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10104 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10105 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10106 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10107 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10108 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010109 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10110 wdiUapsdParams->pUserData = pWdaParams;
10111
Jeff Johnson295189b2012-06-20 16:38:30 -070010112 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 pWdaParams->pWdaContext = pWDA;
10114 /* Store param pointer as passed in by caller */
10115 pWdaParams->wdaMsgParam = pUapsdInfo;
10116 /* store Params pass it to WDI */
10117 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010118 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010119 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 if(IS_WDI_STATUS_FAILURE(status))
10122 {
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10124 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10126 vos_mem_free(pWdaParams);
10127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10129 return VOS_STATUS_SUCCESS;
10130 else
10131 return VOS_STATUS_E_FAILURE;
10132
Jeff Johnson295189b2012-06-20 16:38:30 -070010133}
10134/*
10135 * FUNCTION: WDA_ClearUapsdAcParamsReq
10136 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10137 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10138 * and again enter the UPASD with the modified params. Hence the disable
10139 * function was kept empty.
10140 *
10141 */
10142VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10143{
10144 /* do nothing */
10145 return VOS_STATUS_SUCCESS;
10146}
Jeff Johnson295189b2012-06-20 16:38:30 -070010147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 *
10150 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010151void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010152{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10154
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010157
10158 if(NULL == pWdaParams)
10159 {
10160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010161 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010162 VOS_ASSERT(0) ;
10163 return ;
10164 }
10165
10166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10167 vos_mem_free(pWdaParams->wdaMsgParam);
10168 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 //print a msg, nothing else to do
10171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010172 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 return ;
10174}
Jeff Johnson295189b2012-06-20 16:38:30 -070010175/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010176 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10177 * Free memory.
10178 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10179 */
10180void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10181{
10182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10183
10184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10185 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10186
10187 if(NULL == pWdaParams)
10188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10190 "%s: pWdaParams received NULL", __func__);
10191 VOS_ASSERT(0);
10192 return;
10193 }
10194
10195 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10196 {
10197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10198 vos_mem_free(pWdaParams->wdaMsgParam);
10199 vos_mem_free(pWdaParams);
10200 }
10201
10202 return;
10203}
10204/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 * FUNCTION: WDA_UpdateUapsdParamsReq
10206 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10207 */
10208VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10209 tUpdateUapsdParams* pUpdateUapsdInfo)
10210{
10211 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010212 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10214 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10215 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010216 tWDA_ReqParams *pWdaParams = NULL;
10217
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010219 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 if(NULL == wdiUpdateUapsdParams)
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 VOS_ASSERT(0);
10225 return VOS_STATUS_E_NOMEM;
10226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10228 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10229 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010230 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10231 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010232
10233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10234 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 {
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010239 vos_mem_free(pUpdateUapsdInfo);
10240 vos_mem_free(wdiUpdateUapsdParams);
10241 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010244 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010246 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10247 pWdaParams->pWdaContext = pWDA;
10248
Jeff Johnson43971f52012-07-17 12:26:56 -070010249 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010250 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010251 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010252
Jeff Johnson43971f52012-07-17 12:26:56 -070010253 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 {
10255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10256 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010257 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10259 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010262 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010263}
Jeff Johnson295189b2012-06-20 16:38:30 -070010264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010265 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 *
10267 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010268void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010269{
10270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010272 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 if(WDI_STATUS_SUCCESS != wdiStatus)
10274 {
10275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010276 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 if(NULL == pWdaParams)
10279 {
10280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010281 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 VOS_ASSERT(0) ;
10283 return ;
10284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10286 vos_mem_free(pWdaParams->wdaMsgParam);
10287 vos_mem_free(pWdaParams);
10288 return ;
10289}
Jeff Johnson295189b2012-06-20 16:38:30 -070010290/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010291 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10292 * Free memory.
10293 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10294 */
10295void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10296{
10297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10298
10299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10300 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10301
10302 if(NULL == pWdaParams)
10303 {
10304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10305 "%s: pWdaParams received NULL", __func__);
10306 VOS_ASSERT(0);
10307 return;
10308 }
10309
10310 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10311 {
10312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10313 vos_mem_free(pWdaParams->wdaMsgParam);
10314 vos_mem_free(pWdaParams);
10315 }
10316
10317 return;
10318}
10319/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010320 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10321 *
10322 */
10323VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10324 tSirWlanSetRxpFilters *pWlanSuspendParam)
10325{
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010327 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010328 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010330 /* Sanity Check
10331 * This is very unlikely and add assert to collect more info next time */
10332 if(NULL == pWlanSuspendParam)
10333 {
10334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10335 "%s: pWlanSuspendParam received NULL", __func__);
10336 VOS_ASSERT(0) ;
10337 return VOS_STATUS_E_FAULT;
10338 }
10339 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10340 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010342 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 if(NULL == wdiRxpFilterParams)
10344 {
10345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 VOS_ASSERT(0);
10348 vos_mem_free(pWlanSuspendParam);
10349 return VOS_STATUS_E_NOMEM;
10350 }
10351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10352 if(NULL == pWdaParams)
10353 {
10354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 VOS_ASSERT(0);
10357 vos_mem_free(wdiRxpFilterParams);
10358 vos_mem_free(pWlanSuspendParam);
10359 return VOS_STATUS_E_NOMEM;
10360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10362 pWlanSuspendParam->setMcstBcstFilter;
10363 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10364 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10365
Yue Ma7f44bbe2013-04-12 11:47:39 -070010366 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10367 wdiRxpFilterParams->pUserData = pWdaParams;
10368
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 pWdaParams->pWdaContext = pWDA;
10370 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10371 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010372 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010373 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010375 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10378 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010379 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10381 vos_mem_free(pWdaParams->wdaMsgParam);
10382 vos_mem_free(pWdaParams);
10383 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010384 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010386
10387/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010388 * FUNCTION: WDA_ProcessGetFrameLogReq
10389 * Request to WDI to get the Frame Log.
10390 */
10391VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10392 tAniGetFrameLogReq *pGetFrameLog)
10393{
10394 VOS_STATUS status = VOS_STATUS_SUCCESS;
10395 WDI_Status wstatus;
10396 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10397 tWDA_ReqParams *pWdaParams ;
10398
10399 /* Sanity Check*/
10400 if(NULL == pGetFrameLog)
10401 {
10402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010403 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010404 VOS_ASSERT(0) ;
10405 return VOS_STATUS_E_FAULT;
10406 }
10407
10408 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10409 sizeof(WDI_GetFrameLogReqInfoType));
10410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10411 "------> %s " ,__func__);
10412
10413 if(NULL == wdiGetFrameLogInfo)
10414 {
10415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10416 "%s: VOS MEM Alloc Failure", __func__);
10417 VOS_ASSERT(0);
10418 vos_mem_free(pGetFrameLog);
10419 return VOS_STATUS_E_NOMEM;
10420 }
10421
10422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10423 if(NULL == pWdaParams)
10424 {
10425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10426 "%s: VOS MEM Alloc Failure", __func__);
10427 VOS_ASSERT(0);
10428 vos_mem_free(wdiGetFrameLogInfo);
10429 vos_mem_free(pGetFrameLog);
10430 return VOS_STATUS_E_NOMEM;
10431 }
10432
10433 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10434
10435 pWdaParams->pWdaContext = pWDA;
10436 pWdaParams->wdaMsgParam = pGetFrameLog;
10437 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10438
10439 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10440 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10441 pWdaParams);
10442 if(IS_WDI_STATUS_FAILURE(wstatus))
10443 {
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10445 "Failure in get frame log REQ WDI API, free all the memory" );
10446 status = CONVERT_WDI2VOS_STATUS(wstatus);
10447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10448 vos_mem_free(pWdaParams->wdaMsgParam);
10449 vos_mem_free(pWdaParams);
10450 }
10451 return status;
10452}
10453
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010454
10455/*
10456 * FUNCTION: WDA_FatalEventLogsRspCallback
10457 * recieves Flush Logs response from FW
10458 */
10459
10460void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10461 void* pUserData)
10462{
10463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10464
10465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10466 "<------ %s,wdiStatus:%d " ,
10467 __func__, wdiRsp->wdiStatus);
10468 if(NULL == pWdaParams)
10469 {
10470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10471 "%s: pWdaParams received NULL", __func__);
10472 VOS_ASSERT(0);
10473 return ;
10474 }
10475
10476 if(NULL == pWdaParams->wdaMsgParam)
10477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10479 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10480 VOS_ASSERT(0);
10481 vos_mem_free(pWdaParams);
10482 return ;
10483 }
10484
10485 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10486 {
10487 /*
10488 * If it is failure, it means JOb is already posted by FW
10489 * for logging, so for failure scenario also we will get the
10490 * done indication
10491 */
10492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10493 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10494 __func__, wdiRsp->wdiStatus);
10495 }
10496
10497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10498 vos_mem_free(pWdaParams->wdaMsgParam);
10499 vos_mem_free(pWdaParams);
10500
10501 return;
10502
10503}
10504
10505/*
10506 * FUNCTION: WDA_ProcessFatalEventLogsReq
10507 * Request to WDI to send the fatal Event Logs Req.
10508 */
10509
10510VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10511 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10512{
10513 VOS_STATUS status = VOS_STATUS_SUCCESS;
10514 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10515 tWDA_ReqParams *pWdaParams ;
10516 WDI_Status wstatus;
10517
10518
10519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10520 "------> %s " ,__func__);
10521 if (NULL == pFatalEventLogsReqParam)
10522 {
10523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10524 "%s: pMgmtLoggingInitParam received NULL", __func__);
10525 VOS_ASSERT(0) ;
10526 return VOS_STATUS_E_FAULT;
10527 }
10528 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10529 sizeof(WDI_FatalEventLogsReqInfoType));
10530 if(NULL == wdiFatalEventLogsReqInfo)
10531 {
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10533 "%s: VOS MEM Alloc Failure", __func__);
10534 VOS_ASSERT(0);
10535 vos_mem_free(pFatalEventLogsReqParam);
10536 return VOS_STATUS_E_NOMEM;
10537 }
10538 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10539 if(NULL == pWdaParams)
10540 {
10541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10542 "%s: VOS MEM Alloc Failure", __func__);
10543 VOS_ASSERT(0);
10544 vos_mem_free(wdiFatalEventLogsReqInfo);
10545 vos_mem_free(pFatalEventLogsReqParam);
10546 return VOS_STATUS_E_NOMEM;
10547 }
10548 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10549 pWdaParams->pWdaContext = pWDA;
10550 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10551 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10552
10553 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10554 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10555 pWdaParams);
10556 if(IS_WDI_STATUS_FAILURE(wstatus))
10557 {
10558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10559 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10560 status = CONVERT_WDI2VOS_STATUS(wstatus);
10561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10562 vos_mem_free(pWdaParams->wdaMsgParam);
10563 vos_mem_free(pWdaParams);
10564 }
10565
10566 return status;
10567
10568}
10569
Siddharth Bhal64246172015-02-27 01:04:37 +053010570/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010571 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010572 *
10573 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010574VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10575 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010576{
10577 VOS_STATUS status = VOS_STATUS_SUCCESS;
10578 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010579 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010580 tWDA_ReqParams *pWdaParams ;
10581
10582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10583 "------> %s " ,__func__);
10584
10585 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010586 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010587 {
10588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010589 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010590 VOS_ASSERT(0) ;
10591 return VOS_STATUS_E_FAULT;
10592 }
10593
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010594 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10595 sizeof(WDI_FWLoggingInitReqInfoType));
10596 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010597 {
10598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10599 "%s: VOS MEM Alloc Failure", __func__);
10600 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010601 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010602 return VOS_STATUS_E_NOMEM;
10603 }
10604
10605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10606 if(NULL == pWdaParams)
10607 {
10608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10609 "%s: VOS MEM Alloc Failure", __func__);
10610 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010611 vos_mem_free(wdiFWLoggingInitInfo);
10612 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010613 return VOS_STATUS_E_NOMEM;
10614 }
10615
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010616 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10617 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10618 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10619 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10620 wdiFWLoggingInitInfo->continuousFrameLogging =
10621 pFWLoggingInitParam->continuousFrameLogging;
10622 wdiFWLoggingInitInfo->minLogBufferSize=
10623 pFWLoggingInitParam->minLogBufferSize;
10624 wdiFWLoggingInitInfo->maxLogBufferSize=
10625 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010626
10627 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010628 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10629 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010630
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010631 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10632 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010633 pWdaParams);
10634 if(IS_WDI_STATUS_FAILURE(wstatus))
10635 {
10636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10637 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10638 status = CONVERT_WDI2VOS_STATUS(wstatus);
10639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10640 vos_mem_free(pWdaParams->wdaMsgParam);
10641 vos_mem_free(pWdaParams);
10642 }
10643
10644 return status;
10645}
10646
Jeff Johnson295189b2012-06-20 16:38:30 -070010647/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010648 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10649 *
10650 */
10651VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10652 tSirRssiMonitorReq *pRssiMonitorReqParam)
10653{
10654 VOS_STATUS status = VOS_STATUS_SUCCESS;
10655 WDI_Status wstatus;
10656 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10657 tWDA_ReqParams *pWdaParams ;
10658
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10660 "------> %s " ,__func__);
10661
10662 /* Sanity Check*/
10663 if(NULL == pRssiMonitorReqParam)
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "%s: pRssiMonitorReqParam received NULL", __func__);
10667 VOS_ASSERT(0) ;
10668 return VOS_STATUS_E_FAULT;
10669 }
10670
10671 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10672 sizeof(WDI_RssiMonitorReqInfoType));
10673 if(NULL == wdiRssiMonitorInfo)
10674 {
10675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10676 "%s: VOS MEM Alloc Failure", __func__);
10677 VOS_ASSERT(0);
10678 vos_mem_free(pRssiMonitorReqParam);
10679 return VOS_STATUS_E_NOMEM;
10680 }
10681
10682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10683 if(NULL == pWdaParams)
10684 {
10685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10686 "%s: VOS MEM Alloc Failure", __func__);
10687 VOS_ASSERT(0);
10688 vos_mem_free(wdiRssiMonitorInfo);
10689 vos_mem_free(pRssiMonitorReqParam);
10690 return VOS_STATUS_E_NOMEM;
10691 }
10692
10693 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10694 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10695 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10696 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10697 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10698
10699 pWdaParams->pWdaContext = pWDA;
10700 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10701 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10702
10703 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10704 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10705 pWdaParams);
10706 if(IS_WDI_STATUS_FAILURE(wstatus))
10707 {
10708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10709 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10710 status = CONVERT_WDI2VOS_STATUS(wstatus);
10711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10712 vos_mem_free(pWdaParams->wdaMsgParam);
10713 vos_mem_free(pWdaParams);
10714 }
10715
10716 return status;
10717}
10718
10719/*
10720 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10721 *
10722 */
10723VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10724 tSirRssiMonitorReq *pRssiMonitorReqParam)
10725{
10726 VOS_STATUS status = VOS_STATUS_SUCCESS;
10727 WDI_Status wstatus;
10728 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10729 tWDA_ReqParams *pWdaParams ;
10730
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10732 "------> %s " ,__func__);
10733
10734 /* Sanity Check*/
10735 if(NULL == pRssiMonitorReqParam)
10736 {
10737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10738 "%s: pRssiMonitorReqParam received NULL", __func__);
10739 VOS_ASSERT(0) ;
10740 return VOS_STATUS_E_FAULT;
10741 }
10742
10743 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10744 sizeof(WDI_RssiMonitorReqInfoType));
10745 if(NULL == wdiRssiMonitorInfo)
10746 {
10747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10748 "%s: VOS MEM Alloc Failure", __func__);
10749 VOS_ASSERT(0);
10750 vos_mem_free(pRssiMonitorReqParam);
10751 return VOS_STATUS_E_NOMEM;
10752 }
10753
10754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10755 if(NULL == pWdaParams)
10756 {
10757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10758 "%s: VOS MEM Alloc Failure", __func__);
10759 VOS_ASSERT(0);
10760 vos_mem_free(wdiRssiMonitorInfo);
10761 vos_mem_free(pRssiMonitorReqParam);
10762 return VOS_STATUS_E_NOMEM;
10763 }
10764
10765 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10766 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10767 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10768
10769 pWdaParams->pWdaContext = pWDA;
10770 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10771 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10772
10773 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10774 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10775 pWdaParams);
10776 if(IS_WDI_STATUS_FAILURE(wstatus))
10777 {
10778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10779 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10780 status = CONVERT_WDI2VOS_STATUS(wstatus);
10781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10782 vos_mem_free(pWdaParams->wdaMsgParam);
10783 vos_mem_free(pWdaParams);
10784 }
10785
10786 return status;
10787}
10788
10789
10790/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 * FUNCTION: WDA_WdiIndicationCallback
10792 *
10793 */
10794void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10795 void* pUserData)
10796{
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010799}
Jeff Johnson295189b2012-06-20 16:38:30 -070010800/*
10801 * FUNCTION: WDA_ProcessWlanSuspendInd
10802 *
10803 */
10804VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10805 tSirWlanSuspendParam *pWlanSuspendParam)
10806{
10807 WDI_Status wdiStatus;
10808 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10812 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10813 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10814 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10817 if(WDI_STATUS_PENDING == wdiStatus)
10818 {
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010820 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 }
10822 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10823 {
10824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010825 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 vos_mem_free(pWlanSuspendParam);
10828 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10829}
10830
Chet Lanctot186b5732013-03-18 10:26:30 -070010831#ifdef WLAN_FEATURE_11W
10832/*
10833 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10834 *
10835 */
10836VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10837 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10838{
10839 WDI_Status wdiStatus;
10840 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10842 "------> %s ", __func__);
10843
10844 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10845 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10846 sizeof(tSirMacAddr));
10847
10848 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10849 wdiExclUnencryptParams.pUserData = pWDA;
10850
10851 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10852 if(WDI_STATUS_PENDING == wdiStatus)
10853 {
10854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10855 "Pending received for %s:%d ", __func__, __LINE__ );
10856 }
10857 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10858 {
10859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10860 "Failure in %s:%d ", __func__, __LINE__ );
10861 }
10862 vos_mem_free(pExclUnencryptParam);
10863 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10864}
10865#endif
10866
Jeff Johnson295189b2012-06-20 16:38:30 -070010867/*
10868 * FUNCTION: WDA_ProcessWlanResumeCallback
10869 *
10870 */
10871void WDA_ProcessWlanResumeCallback(
10872 WDI_SuspendResumeRspParamsType *resumeRspParams,
10873 void* pUserData)
10874{
10875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 if(NULL == pWdaParams)
10879 {
10880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010881 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 VOS_ASSERT(0) ;
10883 return ;
10884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010885 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10886 {
10887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010888 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaMsgParam);
10892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010893 return ;
10894}
Jeff Johnson295189b2012-06-20 16:38:30 -070010895/*
10896 * FUNCTION: WDA_ProcessWlanResumeReq
10897 *
10898 */
10899VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10900 tSirWlanResumeParam *pWlanResumeParam)
10901{
10902 WDI_Status wdiStatus;
10903 WDI_ResumeParamsType *wdiResumeParams =
10904 (WDI_ResumeParamsType *)vos_mem_malloc(
10905 sizeof(WDI_ResumeParamsType) ) ;
10906 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 if(NULL == wdiResumeParams)
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 VOS_ASSERT(0);
10914 return VOS_STATUS_E_NOMEM;
10915 }
10916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10917 if(NULL == pWdaParams)
10918 {
10919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 VOS_ASSERT(0);
10922 vos_mem_free(wdiResumeParams);
10923 return VOS_STATUS_E_NOMEM;
10924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10926 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 wdiResumeParams->wdiReqStatusCB = NULL;
10929 pWdaParams->wdaMsgParam = pWlanResumeParam;
10930 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10931 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10933 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10934 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10938 "Failure in Host Resume REQ WDI API, free all the memory " );
10939 VOS_ASSERT(0);
10940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10941 vos_mem_free(pWdaParams->wdaMsgParam);
10942 vos_mem_free(pWdaParams);
10943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10945}
10946
Jeff Johnson295189b2012-06-20 16:38:30 -070010947/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010948 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010949 *
10950 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010951void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010952{
10953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 if(NULL == pWdaParams)
10957 {
10958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010959 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010960 VOS_ASSERT(0) ;
10961 return ;
10962 }
10963
10964 vos_mem_free(pWdaParams->wdaMsgParam) ;
10965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10966 vos_mem_free(pWdaParams) ;
10967 /*
10968 * No respone required for SetBeaconFilter req so just free the request
10969 * param here
10970 */
10971
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 return ;
10973}
Jeff Johnson295189b2012-06-20 16:38:30 -070010974/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010975 * FUNCTION: WDA_SetBeaconFilterReqCallback
10976 * Free memory.
10977 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10978 */
10979void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10980{
10981 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10982
10983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10984 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10985
10986 if(NULL == pWdaParams)
10987 {
10988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10989 "%s: pWdaParams received NULL", __func__);
10990 VOS_ASSERT(0);
10991 return;
10992 }
10993
10994 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10995 {
10996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10997 vos_mem_free(pWdaParams->wdaMsgParam);
10998 vos_mem_free(pWdaParams);
10999 }
11000
11001 return;
11002}
11003/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 * FUNCTION: WDA_SetBeaconFilterReq
11005 * Request to WDI to send the beacon filtering related information.
11006 */
11007VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11008 tBeaconFilterMsg* pBeaconFilterInfo)
11009{
11010 WDI_Status status = WDI_STATUS_SUCCESS;
11011 tANI_U8 *dstPtr, *srcPtr;
11012 tANI_U8 filterLength;
11013 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11014 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11015 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 if(NULL == wdiBeaconFilterInfo)
11020 {
11021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 VOS_ASSERT(0);
11024 return VOS_STATUS_E_NOMEM;
11025 }
11026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11027 if(NULL == pWdaParams)
11028 {
11029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 VOS_ASSERT(0);
11032 vos_mem_free(wdiBeaconFilterInfo);
11033 return VOS_STATUS_E_NOMEM;
11034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11036 pBeaconFilterInfo->beaconInterval;
11037 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11038 pBeaconFilterInfo->capabilityInfo;
11039 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11040 pBeaconFilterInfo->capabilityMask;
11041 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011042
11043 //Fill the BssIdx
11044 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11045
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 //Fill structure with info contained in the beaconFilterTable
11047 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11048 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11049 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11050 if(WDI_BEACON_FILTER_LEN < filterLength)
11051 {
11052 filterLength = WDI_BEACON_FILTER_LEN;
11053 }
11054 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011055 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11056 wdiBeaconFilterInfo->pUserData = pWdaParams;
11057
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 /* Store param pointer as passed in by caller */
11059 /* store Params pass it to WDI */
11060 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11061 pWdaParams->pWdaContext = pWDA;
11062 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11063
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011065 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 if(IS_WDI_STATUS_FAILURE(status))
11067 {
11068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11069 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11070 vos_mem_free(pWdaParams->wdaMsgParam) ;
11071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11072 vos_mem_free(pWdaParams) ;
11073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 return CONVERT_WDI2VOS_STATUS(status) ;
11075}
Jeff Johnson295189b2012-06-20 16:38:30 -070011076/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011077 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 *
11079 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011080void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011081{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11083
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011085 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011086
11087 if(NULL == pWdaParams)
11088 {
11089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011090 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011091 VOS_ASSERT(0) ;
11092 return ;
11093 }
11094
11095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11096 vos_mem_free(pWdaParams->wdaMsgParam);
11097 vos_mem_free(pWdaParams);
11098
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 //print a msg, nothing else to do
11100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011101 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 return ;
11103}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011104/*
11105 * FUNCTION: WDA_RemBeaconFilterReqCallback
11106 * Free memory.
11107 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11108 */
11109void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11110{
11111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11112
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11114 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11115
11116 if(NULL == pWdaParams)
11117 {
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11119 "%s: pWdaParams received NULL", __func__);
11120 VOS_ASSERT(0);
11121 return;
11122 }
11123
11124 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11125 {
11126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11127 vos_mem_free(pWdaParams->wdaMsgParam);
11128 vos_mem_free(pWdaParams);
11129 }
11130
11131 return;
11132}
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 // TODO: PE does not have this feature for now implemented,
11134 // but the support for removing beacon filter exists between
11135 // HAL and FW. This function can be called whenever PE defines
11136 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011137/*
11138 * FUNCTION: WDA_RemBeaconFilterReq
11139 * Request to WDI to send the removal of beacon filtering related information.
11140 */
11141VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11142 tRemBeaconFilterMsg* pBeaconFilterInfo)
11143{
11144 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011145 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11147 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11148 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011149 tWDA_ReqParams *pWdaParams ;
11150
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 if(NULL == wdiBeaconFilterInfo)
11154 {
11155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011157 VOS_ASSERT(0);
11158 return VOS_STATUS_E_NOMEM;
11159 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11161 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 {
11163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011166 vos_mem_free(wdiBeaconFilterInfo);
11167 vos_mem_free(pBeaconFilterInfo);
11168 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011170
11171 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11172 pBeaconFilterInfo->ucIeCount;
11173 //Fill structure with info contained in the ucRemIeId
11174 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11175 pBeaconFilterInfo->ucRemIeId,
11176 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11177 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11178 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011179
11180 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011181 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11184
11185 pWdaParams->pWdaContext = pWDA;
11186
Jeff Johnson43971f52012-07-17 12:26:56 -070011187 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011188 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011189 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 {
11191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11192 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011193 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11195 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011196 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011198 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199}
Jeff Johnson295189b2012-06-20 16:38:30 -070011200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011201 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011202 *
11203 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011205{
11206 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011209 if(NULL == pWdaParams)
11210 {
11211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011212 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 VOS_ASSERT(0) ;
11214 return ;
11215 }
11216
11217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11218 vos_mem_free(pWdaParams) ;
11219
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 return ;
11221}
Jeff Johnson295189b2012-06-20 16:38:30 -070011222/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011223 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11224 * Free memory.
11225 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11226 */
11227void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11228{
11229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11230
11231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11232 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11233
11234 if(NULL == pWdaParams)
11235 {
11236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11237 "%s: pWdaParams received NULL", __func__);
11238 VOS_ASSERT(0);
11239 return;
11240 }
11241
11242 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11243 {
11244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11245 vos_mem_free(pWdaParams);
11246 }
11247
11248 return;
11249}
11250/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 * FUNCTION: WDA_SetRSSIThresholdsReq
11252 * Request to WDI to set the RSSI thresholds (sta mode).
11253 */
11254VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11255{
11256 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011257 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 tWDA_CbContext *pWDA = NULL ;
11259 v_PVOID_t pVosContext = NULL;
11260 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11261 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11262 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11263 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 if(NULL == wdiRSSIThresholdsInfo)
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011270 VOS_ASSERT(0);
11271 return VOS_STATUS_E_NOMEM;
11272 }
11273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11274 if(NULL == pWdaParams)
11275 {
11276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 VOS_ASSERT(0);
11279 vos_mem_free(wdiRSSIThresholdsInfo);
11280 return VOS_STATUS_E_NOMEM;
11281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11290 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11291 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011292 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11293 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11295 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11296
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 /* Store param pointer as passed in by caller */
11298 /* store Params pass it to WDI */
11299 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11300 pWdaParams->pWdaContext = pWDA;
11301 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011302 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011303 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011304 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011305 {
11306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11307 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011308 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11310 vos_mem_free(pWdaParams) ;
11311 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011312 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011313
11314}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011315/*
Yue Madb90ac12013-04-04 13:39:13 -070011316 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 *
11318 */
Yue Madb90ac12013-04-04 13:39:13 -070011319void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011320{
11321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11322
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 if(NULL == pWdaParams)
11326 {
11327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 VOS_ASSERT(0) ;
11330 return ;
11331 }
11332
11333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11334 vos_mem_free(pWdaParams->wdaMsgParam);
11335 vos_mem_free(pWdaParams) ;
11336
11337 //print a msg, nothing else to do
11338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011339 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 return ;
11341}
Jeff Johnson295189b2012-06-20 16:38:30 -070011342/*
Yue Madb90ac12013-04-04 13:39:13 -070011343 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011344 * Free memory.
11345 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011346 */
11347void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11348{
11349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11350
11351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11353
11354 if(NULL == pWdaParams)
11355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11357 "%s: Invalid pWdaParams pointer", __func__);
11358 VOS_ASSERT(0);
11359 return;
11360 }
11361
11362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11363 {
11364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11365 vos_mem_free(pWdaParams->wdaMsgParam);
11366 vos_mem_free(pWdaParams);
11367 }
11368
11369 return;
11370}
11371/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 * FUNCTION: WDA_ProcessHostOffloadReq
11373 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11374 * to broadcast traffic (sta mode).
11375 */
11376VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11377 tSirHostOffloadReq *pHostOffloadParams)
11378{
11379 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011380 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11382 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11383 sizeof(WDI_HostOffloadReqParamsType)) ;
11384 tWDA_ReqParams *pWdaParams ;
11385
11386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011387 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011388
11389 if(NULL == wdiHostOffloadInfo)
11390 {
11391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 VOS_ASSERT(0);
11394 return VOS_STATUS_E_NOMEM;
11395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11397 if(NULL == pWdaParams)
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 VOS_ASSERT(0);
11402 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011403 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 return VOS_STATUS_E_NOMEM;
11405 }
11406
11407 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11408 pHostOffloadParams->offloadType;
11409 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11410 pHostOffloadParams->enableOrDisable;
11411
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011412 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11413 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11414
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11416 {
11417 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11418 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11419 pHostOffloadParams->params.hostIpv4Addr,
11420 4);
11421 break;
11422 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11423 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11424 pHostOffloadParams->params.hostIpv6Addr,
11425 16);
11426 break;
11427 case SIR_IPV6_NS_OFFLOAD:
11428 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11429 pHostOffloadParams->params.hostIpv6Addr,
11430 16);
11431
11432#ifdef WLAN_NS_OFFLOAD
11433 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11434 {
11435 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11436 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11437 16);
11438 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11439 }
11440 else
11441 {
11442 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11443 }
11444
11445 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11446 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11447 16);
11448 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11449 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11450 6);
11451
11452 //Only two are supported so let's go through them without a loop
11453 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11454 {
11455 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11456 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11457 16);
11458 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11459 }
11460 else
11461 {
11462 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11463 }
11464
11465 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11466 {
11467 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11468 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11469 16);
11470 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11471 }
11472 else
11473 {
11474 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11475 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011476 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11477 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 break;
11479#endif //WLAN_NS_OFFLOAD
11480 default:
11481 {
11482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11483 "No Handling for Offload Type %x in WDA "
11484 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11485 //WDA_VOS_ASSERT(0) ;
11486 }
11487 }
Yue Madb90ac12013-04-04 13:39:13 -070011488 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11489 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011490
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011492 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 /* store Params pass it to WDI */
11494 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11495 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011496
Jeff Johnson295189b2012-06-20 16:38:30 -070011497
Jeff Johnson43971f52012-07-17 12:26:56 -070011498 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011499 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011500
Jeff Johnson43971f52012-07-17 12:26:56 -070011501 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 {
11503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011504 "Failure in host offload REQ WDI API, free all the memory %d",
11505 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011506 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11508 vos_mem_free(pWdaParams->wdaMsgParam);
11509 vos_mem_free(pWdaParams) ;
11510 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512
11513}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011514/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011515 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 *
11517 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011518void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011519{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11521
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011523 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011524
11525 if(NULL == pWdaParams)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011529 VOS_ASSERT(0) ;
11530 return ;
11531 }
11532
11533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11534 vos_mem_free(pWdaParams->wdaMsgParam);
11535 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011536
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 //print a msg, nothing else to do
11538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011539 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 return ;
11541}
Jeff Johnson295189b2012-06-20 16:38:30 -070011542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011543 * FUNCTION: WDA_KeepAliveReqCallback
11544 * Free memory.
11545 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11546 */
11547void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11548{
11549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11550
11551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11553
11554 if(NULL == pWdaParams)
11555 {
11556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11557 "%s: pWdaParams received NULL", __func__);
11558 VOS_ASSERT(0);
11559 return;
11560 }
11561
11562 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11563 {
11564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11565 vos_mem_free(pWdaParams->wdaMsgParam);
11566 vos_mem_free(pWdaParams);
11567 }
11568
11569 return;
11570}
11571/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 * FUNCTION: WDA_ProcessKeepAliveReq
11573 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11574 * wakeup due to broadcast traffic (sta mode).
11575 */
11576VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11577 tSirKeepAliveReq *pKeepAliveParams)
11578{
11579 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011580 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11582 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11583 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011584 tWDA_ReqParams *pWdaParams;
11585
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 if(NULL == wdiKeepAliveInfo)
11589 {
11590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011593 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 return VOS_STATUS_E_NOMEM;
11595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011596
11597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11598 if(NULL == pWdaParams)
11599 {
11600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011601 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011602 VOS_ASSERT(0);
11603 vos_mem_free(wdiKeepAliveInfo);
11604 vos_mem_free(pKeepAliveParams);
11605 return VOS_STATUS_E_NOMEM;
11606 }
11607
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11609 pKeepAliveParams->packetType;
11610 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11611 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011612
11613 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11614 pKeepAliveParams->bssId,
11615 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011616
11617 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11618 {
11619 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11620 pKeepAliveParams->hostIpv4Addr,
11621 SIR_IPV4_ADDR_LEN);
11622 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11623 pKeepAliveParams->destIpv4Addr,
11624 SIR_IPV4_ADDR_LEN);
11625 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11626 pKeepAliveParams->destMacAddr,
11627 SIR_MAC_ADDR_LEN);
11628 }
11629 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11630 {
11631 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11632 SIR_IPV4_ADDR_LEN,
11633 0);
11634 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11635 SIR_IPV4_ADDR_LEN,
11636 0);
11637 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11638 SIR_MAC_ADDR_LEN,
11639 0);
11640 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011641 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11642 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011643
Jeff Johnson295189b2012-06-20 16:38:30 -070011644 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011645 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11648 pWdaParams->pWdaContext = pWDA;
11649
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11651 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11652 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11653 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11654 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11657 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11658 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11661 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11662 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11663 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11664 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11665 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11666 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11667 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11669 "TimePeriod %d PacketType %d",
11670 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11671 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011672 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011673 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011674
Jeff Johnson43971f52012-07-17 12:26:56 -070011675 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11678 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011679 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11681 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011683 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011684 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011685
11686}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011687/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011688 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 *
11690 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011691void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011692 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11693 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011694{
11695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 if(NULL == pWdaParams)
11699 {
11700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 VOS_ASSERT(0) ;
11703 return ;
11704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11706 vos_mem_free(pWdaParams->wdaMsgParam);
11707 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 return ;
11709}
Jeff Johnson295189b2012-06-20 16:38:30 -070011710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011711 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11712 * Free memory.
11713 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11714 */
11715void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11716{
11717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11718
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11720 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11721
11722 if(NULL == pWdaParams)
11723 {
11724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11725 "%s: pWdaParams received NULL", __func__);
11726 VOS_ASSERT(0);
11727 return;
11728 }
11729
11730 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11731 {
11732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11733 vos_mem_free(pWdaParams->wdaMsgParam);
11734 vos_mem_free(pWdaParams);
11735 }
11736
11737 return;
11738}
11739
11740/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11742 * Request to WDI to add WOWL Bcast pattern
11743 */
11744VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11745 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11746{
11747 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011748 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11750 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11751 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11752 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011754 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 if(NULL == wdiWowlAddBcPtrnInfo)
11756 {
11757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 VOS_ASSERT(0);
11760 return VOS_STATUS_E_NOMEM;
11761 }
11762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11763 if(NULL == pWdaParams)
11764 {
11765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 VOS_ASSERT(0);
11768 vos_mem_free(wdiWowlAddBcPtrnInfo);
11769 return VOS_STATUS_E_NOMEM;
11770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011771 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11772 pWowlAddBcPtrnParams->ucPatternId;
11773 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11774 pWowlAddBcPtrnParams->ucPatternByteOffset;
11775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11776 pWowlAddBcPtrnParams->ucPatternMaskSize;
11777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11778 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11780 {
11781 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11782 pWowlAddBcPtrnParams->ucPattern,
11783 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11784 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11785 pWowlAddBcPtrnParams->ucPatternMask,
11786 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11787 }
11788 else
11789 {
11790 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11791 pWowlAddBcPtrnParams->ucPattern,
11792 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11793 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11794 pWowlAddBcPtrnParams->ucPatternMask,
11795 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11796
11797 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11798 pWowlAddBcPtrnParams->ucPatternExt,
11799 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11800 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11801 pWowlAddBcPtrnParams->ucPatternMaskExt,
11802 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11803 }
11804
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011805 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11806 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11807
Yue Ma7f44bbe2013-04-12 11:47:39 -070011808 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11809 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 /* Store param pointer as passed in by caller */
11811 /* store Params pass it to WDI */
11812 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11813 pWdaParams->pWdaContext = pWDA;
11814 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011815 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011816 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011817 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011821 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011822 vos_mem_free(pWdaParams->wdaMsgParam) ;
11823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11824 vos_mem_free(pWdaParams) ;
11825 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011826 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011827
11828}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011830 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011831 *
11832 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011833void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011834 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11835 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011836{
11837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 if(NULL == pWdaParams)
11841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 VOS_ASSERT(0) ;
11845 return ;
11846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11848 vos_mem_free(pWdaParams->wdaMsgParam);
11849 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 return ;
11851}
Jeff Johnson295189b2012-06-20 16:38:30 -070011852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011853 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11854 * Free memory.
11855 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11856 */
11857void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11858{
11859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11860
11861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11862 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11863
11864 if(NULL == pWdaParams)
11865 {
11866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11867 "%s: pWdaParams received NULL", __func__);
11868 VOS_ASSERT(0);
11869 return;
11870 }
11871
11872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11873 {
11874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11875 vos_mem_free(pWdaParams->wdaMsgParam);
11876 vos_mem_free(pWdaParams);
11877 }
11878
11879 return;
11880}
11881/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11883 * Request to WDI to delete WOWL Bcast pattern
11884 */
11885VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11886 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11887{
11888 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011889 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11891 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11892 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11893 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 if(NULL == wdiWowlDelBcPtrnInfo)
11897 {
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 VOS_ASSERT(0);
11901 return VOS_STATUS_E_NOMEM;
11902 }
11903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11904 if(NULL == pWdaParams)
11905 {
11906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 VOS_ASSERT(0);
11909 vos_mem_free(wdiWowlDelBcPtrnInfo);
11910 return VOS_STATUS_E_NOMEM;
11911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11913 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011914
11915 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11916 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11917
Yue Ma7f44bbe2013-04-12 11:47:39 -070011918 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11919 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011920 /* Store param pointer as passed in by caller */
11921 /* store Params pass it to WDI */
11922 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11923 pWdaParams->pWdaContext = pWDA;
11924 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011925 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011926 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011927 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11930 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011931 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 vos_mem_free(pWdaParams->wdaMsgParam) ;
11933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11934 vos_mem_free(pWdaParams) ;
11935 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011936 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011937
11938}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011939/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011940 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 *
11942 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011943void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011944{
11945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011946 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 if(NULL == pWdaParams)
11951 {
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011953 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 VOS_ASSERT(0) ;
11955 return ;
11956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011957 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011958 if (NULL == pWDA)
11959 {
11960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11961 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011962
11963 if(pWdaParams->wdaWdiApiMsgParam)
11964 {
11965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11966 }
11967 vos_mem_free(pWdaParams);
11968
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011969 VOS_ASSERT(0);
11970 return ;
11971 }
11972
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11974
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011975 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11976
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11978 vos_mem_free(pWdaParams) ;
11979
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011980 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011981 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011983 return ;
11984}
Jeff Johnson295189b2012-06-20 16:38:30 -070011985/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011986 * FUNCTION: WDA_WowlEnterReqCallback
11987 * Free memory and send WOWL Enter RSP back to PE.
11988 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11989 */
11990void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11991{
11992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011993 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011994 tSirHalWowlEnterParams *pWowlEnterParams;
11995
11996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11997 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11998
11999 if(NULL == pWdaParams)
12000 {
12001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12002 "%s: pWdaParams received NULL", __func__);
12003 VOS_ASSERT(0);
12004 return;
12005 }
12006
12007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012008 if (NULL == pWDA)
12009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12011 "%s:pWDA is NULL", __func__);
12012 VOS_ASSERT(0);
12013 return ;
12014 }
12015
Yue Ma7f44bbe2013-04-12 11:47:39 -070012016 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12017 pWowlEnterParams->status = wdiStatus;
12018
12019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12020 {
12021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12022 vos_mem_free(pWdaParams);
12023 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12024 }
12025
12026 return;
12027}
12028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 * FUNCTION: WDA_ProcessWowlEnterReq
12030 * Request to WDI to enter WOWL
12031 */
12032VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12033 tSirHalWowlEnterParams *pWowlEnterParams)
12034{
12035 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012036 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12038 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12039 sizeof(WDI_WowlEnterReqParamsType)) ;
12040 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012042 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 if(NULL == wdiWowlEnterInfo)
12044 {
12045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 VOS_ASSERT(0);
12048 return VOS_STATUS_E_NOMEM;
12049 }
12050 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12051 if(NULL == pWdaParams)
12052 {
12053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 VOS_ASSERT(0);
12056 vos_mem_free(wdiWowlEnterInfo);
12057 return VOS_STATUS_E_NOMEM;
12058 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012059
12060 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12061
Jeff Johnson295189b2012-06-20 16:38:30 -070012062 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12063 pWowlEnterParams->magicPtrn,
12064 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12066 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12068 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12070 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12072 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12074 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12076 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12078 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12080 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012081#ifdef WLAN_WAKEUP_EVENTS
12082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12083 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12084
12085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12086 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12087
12088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12089 pWowlEnterParams->ucWowNetScanOffloadMatch;
12090
12091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12092 pWowlEnterParams->ucWowGTKRekeyError;
12093
12094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12095 pWowlEnterParams->ucWoWBSSConnLoss;
12096#endif // WLAN_WAKEUP_EVENTS
12097
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012098 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12099 pWowlEnterParams->bssIdx;
12100
Yue Ma7f44bbe2013-04-12 11:47:39 -070012101 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12102 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 /* Store param pointer as passed in by caller */
12104 /* store Params pass it to WDI */
12105 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12106 pWdaParams->pWdaContext = pWDA;
12107 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012108 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012109 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012110 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 {
12112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12113 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012114 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 vos_mem_free(pWdaParams->wdaMsgParam) ;
12116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12117 vos_mem_free(pWdaParams) ;
12118 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012119 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012120
12121}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012122/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012123 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 *
12125 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012126void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012127{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012129 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012130 tSirHalWowlExitParams *pWowlExitParams;
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012132 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012133 if(NULL == pWdaParams)
12134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012136 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012137 VOS_ASSERT(0) ;
12138 return ;
12139 }
12140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012141 if (NULL == pWDA)
12142 {
12143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12144 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012145
12146 if(pWdaParams->wdaWdiApiMsgParam)
12147 {
12148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12149 }
12150 vos_mem_free(pWdaParams);
12151
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012152 VOS_ASSERT(0);
12153 return ;
12154 }
12155
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012156 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12157
12158 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012159 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012160
12161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12162 vos_mem_free(pWdaParams) ;
12163
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012165 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012166 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012167 return ;
12168}
Jeff Johnson295189b2012-06-20 16:38:30 -070012169/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012170 * FUNCTION: WDA_WowlExitReqCallback
12171 * Free memory and send WOWL Exit RSP back to PE.
12172 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12173 */
12174void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12175{
12176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012177 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012178 tSirHalWowlExitParams *pWowlExitParams;
12179
12180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12181 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12182
12183 if(NULL == pWdaParams)
12184 {
12185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12186 "%s: pWdaParams received NULL", __func__);
12187 VOS_ASSERT(0);
12188 return;
12189 }
12190
12191 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012192 if (NULL == pWDA)
12193 {
12194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12195 "%s:pWDA is NULL", __func__);
12196 VOS_ASSERT(0);
12197 return ;
12198 }
12199
Yue Ma7f44bbe2013-04-12 11:47:39 -070012200 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12201 pWowlExitParams->status = wdiStatus;
12202
12203 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12204 {
12205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12206 vos_mem_free(pWdaParams);
12207 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12208 }
12209
12210 return;
12211}
12212/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 * FUNCTION: WDA_ProcessWowlExitReq
12214 * Request to WDI to add WOWL Bcast pattern
12215 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012216VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12217 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012218{
12219 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012220 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012221 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12222 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12223 sizeof(WDI_WowlExitReqParamsType)) ;
12224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012226 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012227 if(NULL == wdiWowlExitInfo)
12228 {
12229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012230 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012231 VOS_ASSERT(0);
12232 return VOS_STATUS_E_NOMEM;
12233 }
12234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12235 if(NULL == pWdaParams)
12236 {
12237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012238 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012239 VOS_ASSERT(0);
12240 vos_mem_free(wdiWowlExitInfo);
12241 return VOS_STATUS_E_NOMEM;
12242 }
12243
12244 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12245 pWowlExitParams->bssIdx;
12246
Yue Ma7f44bbe2013-04-12 11:47:39 -070012247 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12248 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012249
12250 /* Store param pointer as passed in by caller */
12251 /* store Params pass it to WDI */
12252 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12253 pWdaParams->pWdaContext = pWDA;
12254 pWdaParams->wdaMsgParam = pWowlExitParams;
12255
12256 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012257 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012258
Jeff Johnson43971f52012-07-17 12:26:56 -070012259 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12262 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012263 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12265 vos_mem_free(pWdaParams->wdaMsgParam);
12266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012267 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012268 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012269}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012270/*
12271 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12272 * Request to WDI to determine whether a given station is capable of
12273 * using HW-based frame translation
12274 */
12275v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12276 tANI_U8 staIdx)
12277{
12278 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12279}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012280
12281/*
12282 * FUNCTION: WDA_IsSelfSTA
12283 * Request to WDI to determine whether a given STAID is self station
12284 * index.
12285 */
12286v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12287{
12288
12289 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12290
Girish Gowli05cf44e2014-06-12 21:53:37 +053012291 if (NULL != pWDA)
12292 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12293 else
12294 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012295}
Jeff Johnson295189b2012-06-20 16:38:30 -070012296/*
12297 * FUNCTION: WDA_NvDownloadReqCallback
12298 * send NV Download RSP back to PE
12299 */
12300void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12301 void* pUserData)
12302{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012303
12304 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012305 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012306
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012308 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012309
12310 if(NULL == pWdaParams)
12311 {
12312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012313 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012314 VOS_ASSERT(0) ;
12315 return ;
12316 }
12317
12318 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012319 if (NULL == pWDA)
12320 {
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12322 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012323
12324 if(pWdaParams->wdaWdiApiMsgParam)
12325 {
12326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12327 }
12328 vos_mem_free(pWdaParams);
12329
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012330 VOS_ASSERT(0);
12331 return ;
12332 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012333
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12336 vos_mem_free(pWdaParams);
12337
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 return ;
12340}
Jeff Johnson295189b2012-06-20 16:38:30 -070012341/*
12342 * FUNCTION: WDA_ProcessNvDownloadReq
12343 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12344 */
12345VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12346{
12347 /* Initialize the local Variables*/
12348 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12349 v_VOID_t *pNvBuffer=NULL;
12350 v_SIZE_t bufferSize = 0;
12351 WDI_Status status = WDI_STATUS_E_FAILURE;
12352 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012353 tWDA_ReqParams *pWdaParams ;
12354
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012356 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012357 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012360 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012361 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012362 return VOS_STATUS_E_FAILURE;
12363 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012364
Jeff Johnson295189b2012-06-20 16:38:30 -070012365 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012366 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12367
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12369 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 if(NULL == wdiNvDownloadReqParam)
12371 {
12372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012374 VOS_ASSERT(0);
12375 return VOS_STATUS_E_NOMEM;
12376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 /* Copy Params to wdiNvDownloadReqParam*/
12378 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12379 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012380
12381 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12382 if(NULL == pWdaParams)
12383 {
12384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012385 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012386 VOS_ASSERT(0);
12387 vos_mem_free(wdiNvDownloadReqParam);
12388 return VOS_STATUS_E_NOMEM;
12389 }
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12393 pWdaParams->wdaMsgParam = NULL;
12394 pWdaParams->pWdaContext = pWDA;
12395
12396
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012398
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012400 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12401
Jeff Johnson295189b2012-06-20 16:38:30 -070012402 if(IS_WDI_STATUS_FAILURE(status))
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12405 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12407 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012410}
12411/*
12412 * FUNCTION: WDA_FlushAcReqCallback
12413 * send Flush AC RSP back to TL
12414 */
12415void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12416{
12417 vos_msg_t wdaMsg = {0} ;
12418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12419 tFlushACReq *pFlushACReqParams;
12420 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012422 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 if(NULL == pWdaParams)
12424 {
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012426 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 VOS_ASSERT(0) ;
12428 return ;
12429 }
12430
12431 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12432 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12433 if(NULL == pFlushACRspParams)
12434 {
12435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012437 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012438 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012439 return ;
12440 }
12441 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12442 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12443 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12444 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12445 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012446 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012447 vos_mem_free(pWdaParams->wdaMsgParam) ;
12448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12449 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012450 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12451 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12452 // POST message to TL
12453 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12454
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 return ;
12456}
Jeff Johnson295189b2012-06-20 16:38:30 -070012457/*
12458 * FUNCTION: WDA_ProcessFlushAcReq
12459 * Request to WDI to Update the DELBA REQ params.
12460 */
12461VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12462 tFlushACReq *pFlushAcReqParams)
12463{
12464 WDI_Status status = WDI_STATUS_SUCCESS ;
12465 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12466 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12467 sizeof(WDI_FlushAcReqParamsType)) ;
12468 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 if(NULL == wdiFlushAcReqParam)
12470 {
12471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 VOS_ASSERT(0);
12474 return VOS_STATUS_E_NOMEM;
12475 }
12476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12477 if(NULL == pWdaParams)
12478 {
12479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 VOS_ASSERT(0);
12482 vos_mem_free(wdiFlushAcReqParam);
12483 return VOS_STATUS_E_NOMEM;
12484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012487 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12488 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12489 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12490 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012491 /* Store Flush AC pointer, as this will be used for response */
12492 /* store Params pass it to WDI */
12493 pWdaParams->pWdaContext = pWDA;
12494 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12495 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12497 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 if(IS_WDI_STATUS_FAILURE(status))
12499 {
12500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12501 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12502 vos_mem_free(pWdaParams->wdaMsgParam) ;
12503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12504 vos_mem_free(pWdaParams) ;
12505 //TODO: respond to TL with failure
12506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012508}
Jeff Johnson295189b2012-06-20 16:38:30 -070012509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012510 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012511 *
12512 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012513void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012514{
12515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012516 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012517 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012518
12519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 if(NULL == pWdaParams)
12522 {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012524 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 VOS_ASSERT(0) ;
12526 return ;
12527 }
12528 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012529 if (NULL == pWDA)
12530 {
12531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12532 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012533 vos_mem_free(pWdaParams->wdaMsgParam) ;
12534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12535 vos_mem_free(pWdaParams) ;
12536
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012537 VOS_ASSERT(0);
12538 return ;
12539 }
12540
Jeff Johnson295189b2012-06-20 16:38:30 -070012541 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12542 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12543 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12544 {
12545 pWDA->wdaAmpSessionOn = VOS_FALSE;
12546 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012547 vos_mem_free(pWdaParams->wdaMsgParam) ;
12548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12549 vos_mem_free(pWdaParams) ;
12550 /*
12551 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12552 * param here
12553 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 return ;
12555}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012556/*
12557 * FUNCTION: WDA_BtAmpEventReqCallback
12558 * Free memory.
12559 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12560 */
12561void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12562{
12563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012564 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012565 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012566
Yue Ma7f44bbe2013-04-12 11:47:39 -070012567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12568 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12569
12570 if(NULL == pWdaParams)
12571 {
12572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12573 "%s: pWdaParams received NULL", __func__);
12574 VOS_ASSERT(0);
12575 return;
12576 }
12577
12578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012579 if (NULL == pWDA)
12580 {
12581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12582 "%s:pWDA is NULL", __func__);
12583 VOS_ASSERT(0);
12584 return ;
12585 }
12586
Yue Ma7f44bbe2013-04-12 11:47:39 -070012587 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12588
12589 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12590 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12591 {
12592 pWDA->wdaAmpSessionOn = VOS_FALSE;
12593 }
12594
12595 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12596 {
12597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12598 vos_mem_free(pWdaParams->wdaMsgParam);
12599 vos_mem_free(pWdaParams);
12600 }
12601
12602 return;
12603}
Jeff Johnson295189b2012-06-20 16:38:30 -070012604/*
12605 * FUNCTION: WDA_ProcessBtAmpEventReq
12606 * Request to WDI to Update with BT AMP events.
12607 */
12608VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12609 tSmeBtAmpEvent *pBtAmpEventParams)
12610{
12611 WDI_Status status = WDI_STATUS_SUCCESS ;
12612 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12613 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12614 sizeof(WDI_BtAmpEventParamsType)) ;
12615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 if(NULL == wdiBtAmpEventParam)
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 VOS_ASSERT(0);
12623 return VOS_STATUS_E_NOMEM;
12624 }
12625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12626 if(NULL == pWdaParams)
12627 {
12628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012630 VOS_ASSERT(0);
12631 vos_mem_free(wdiBtAmpEventParam);
12632 return VOS_STATUS_E_NOMEM;
12633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012634 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12635 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012636 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12637 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 /* Store BT AMP event pointer, as this will be used for response */
12639 /* store Params pass it to WDI */
12640 pWdaParams->pWdaContext = pWDA;
12641 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12642 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012643 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012644 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 if(IS_WDI_STATUS_FAILURE(status))
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12648 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12649 vos_mem_free(pWdaParams->wdaMsgParam) ;
12650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12651 vos_mem_free(pWdaParams) ;
12652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12654 {
12655 pWDA->wdaAmpSessionOn = VOS_TRUE;
12656 }
12657 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012658}
12659
Jeff Johnson295189b2012-06-20 16:38:30 -070012660/*
12661 * FUNCTION: WDA_FTMCommandReqCallback
12662 * Handle FTM CMD response came from HAL
12663 * Route responce to HDD FTM
12664 */
12665void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12666 void *usrData)
12667{
12668 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12670 {
12671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012672 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 return;
12674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 /* Release Current FTM Command Request */
12676 vos_mem_free(pWDA->wdaFTMCmdReq);
12677 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 /* Post FTM Responce to HDD FTM */
12679 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012680 return;
12681}
Jeff Johnson295189b2012-06-20 16:38:30 -070012682/*
12683 * FUNCTION: WDA_ProcessFTMCommand
12684 * Send FTM command to WDI
12685 */
12686VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12687 tPttMsgbuffer *pPTTFtmCmd)
12688{
12689 WDI_Status status = WDI_STATUS_SUCCESS;
12690 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 ftmCMDReq = (WDI_FTMCommandReqType *)
12692 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12693 if(NULL == ftmCMDReq)
12694 {
12695 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12696 "WDA FTM Command buffer alloc fail");
12697 return VOS_STATUS_E_NOMEM;
12698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012699 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12700 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012702 /* Send command to WDI */
12703 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 return status;
12705}
Jeff Johnsone7245742012-09-05 17:12:55 -070012706#ifdef FEATURE_OEM_DATA_SUPPORT
12707/*
12708 * FUNCTION: WDA_StartOemDataReqCallback
12709 *
12710 */
12711void WDA_StartOemDataReqCallback(
12712 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12713 void* pUserData)
12714{
12715 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012717 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012718 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012719
Jeff Johnsone7245742012-09-05 17:12:55 -070012720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012721 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012722
12723 if(NULL == pWdaParams)
12724 {
12725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012726 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012727 VOS_ASSERT(0) ;
12728 return ;
12729 }
12730 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12731
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012732 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012733 {
12734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012735 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012736 VOS_ASSERT(0);
12737 return ;
12738 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012739
Jeff Johnsone7245742012-09-05 17:12:55 -070012740 /*
12741 * Allocate memory for response params sent to PE
12742 */
12743 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12744
12745 // Check if memory is allocated for OemdataMeasRsp Params.
12746 if(NULL == pOemDataRspParams)
12747 {
12748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12749 "OEM DATA WDA callback alloc fail");
12750 VOS_ASSERT(0) ;
12751 return;
12752 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012753
Jeff Johnsone7245742012-09-05 17:12:55 -070012754 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12756 vos_mem_free(pWdaParams->wdaMsgParam);
12757 vos_mem_free(pWdaParams) ;
12758
Jeff Johnsone7245742012-09-05 17:12:55 -070012759 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012760 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012761 * Also, here success always means that we have atleast one BSSID.
12762 */
12763 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12764
12765 //enable Tx
12766 status = WDA_ResumeDataTx(pWDA);
12767 if(status != VOS_STATUS_SUCCESS)
12768 {
12769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12770 }
12771 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12772 return ;
12773}
12774/*
12775 * FUNCTION: WDA_ProcessStartOemDataReq
12776 * Send Start Oem Data Req to WDI
12777 */
12778VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12779 tStartOemDataReq *pOemDataReqParams)
12780{
12781 WDI_Status status = WDI_STATUS_SUCCESS;
12782 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012783 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012784
12785 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12786
12787 if(NULL == wdiOemDataReqParams)
12788 {
12789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012791 VOS_ASSERT(0);
12792 return VOS_STATUS_E_NOMEM;
12793 }
12794
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012795 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12796 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12797 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12798 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012799
12800 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12801
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12803 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012804 {
12805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012807 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012808 vos_mem_free(pOemDataReqParams);
12809 VOS_ASSERT(0);
12810 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012811 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012812
Bernald44a1ae2013-01-09 08:30:39 -080012813 pWdaParams->pWdaContext = (void*)pWDA;
12814 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12815 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012816
12817 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12818 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012819
12820 if(IS_WDI_STATUS_FAILURE(status))
12821 {
12822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12823 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12825 vos_mem_free(pWdaParams->wdaMsgParam);
12826 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012827 }
12828 return CONVERT_WDI2VOS_STATUS(status) ;
12829}
12830#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012832 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012833 *
12834 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012835void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012836{
12837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012840 if(NULL == pWdaParams)
12841 {
12842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 VOS_ASSERT(0) ;
12845 return ;
12846 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012847
12848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12849 vos_mem_free(pWdaParams->wdaMsgParam);
12850 vos_mem_free(pWdaParams);
12851
12852 return ;
12853}
12854/*
12855 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12856 * Free memory.
12857 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12858 */
12859void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12860{
12861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12862
12863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12864 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12865
12866 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12869 "%s: pWdaParams received NULL", __func__);
12870 VOS_ASSERT(0);
12871 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012873
12874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 {
12876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012877 vos_mem_free(pWdaParams->wdaMsgParam);
12878 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012880
12881 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012882}
Jeff Johnson295189b2012-06-20 16:38:30 -070012883#ifdef WLAN_FEATURE_GTK_OFFLOAD
12884/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012885 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 *
12887 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012888void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012889 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012890{
12891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12892
12893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012894 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012895 if(NULL == pWdaParams)
12896 {
12897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12898 "%s: pWdaParams received NULL", __func__);
12899 VOS_ASSERT(0);
12900 return;
12901 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012902
Jeff Johnson295189b2012-06-20 16:38:30 -070012903 vos_mem_free(pWdaParams->wdaMsgParam) ;
12904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12905 vos_mem_free(pWdaParams) ;
12906
12907 //print a msg, nothing else to do
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012910
12911 return ;
12912}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012913/*
12914 * FUNCTION: WDA_GTKOffloadReqCallback
12915 * Free memory.
12916 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12917 */
12918void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12919{
12920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012921
Yue Ma7f44bbe2013-04-12 11:47:39 -070012922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12923 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12924
12925 if(NULL == pWdaParams)
12926 {
12927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12928 "%s: pWdaParams received NULL", __func__);
12929 VOS_ASSERT(0);
12930 return;
12931 }
12932
12933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12934 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012935 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12936 sizeof(WDI_GtkOffloadReqMsg));
12937 vos_mem_zero(pWdaParams->wdaMsgParam,
12938 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12940 vos_mem_free(pWdaParams->wdaMsgParam);
12941 vos_mem_free(pWdaParams);
12942 }
12943
12944 return;
12945}
Jeff Johnson295189b2012-06-20 16:38:30 -070012946/*
12947 * FUNCTION: WDA_ProcessGTKOffloadReq
12948 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12949 * to broadcast traffic (sta mode).
12950 */
12951VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12952 tpSirGtkOffloadParams pGtkOffloadParams)
12953{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012954 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012955 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12956 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12957 sizeof(WDI_GtkOffloadReqMsg)) ;
12958 tWDA_ReqParams *pWdaParams ;
12959
12960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012961 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012962
12963 if(NULL == wdiGtkOffloadReqMsg)
12964 {
12965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 VOS_ASSERT(0);
12968 return VOS_STATUS_E_NOMEM;
12969 }
12970
12971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12972 if(NULL == pWdaParams)
12973 {
12974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 VOS_ASSERT(0);
12977 vos_mem_free(wdiGtkOffloadReqMsg);
12978 return VOS_STATUS_E_NOMEM;
12979 }
12980
12981 //
12982 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12983 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012984
12985 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012986 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012987
Jeff Johnson295189b2012-06-20 16:38:30 -070012988 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12989 // Copy KCK
12990 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12991 // Copy KEK
12992 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12993 // Copy KeyReplayCounter
12994 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12995 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12996
Yue Ma7f44bbe2013-04-12 11:47:39 -070012997 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
12998 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012999
Jeff Johnson295189b2012-06-20 16:38:30 -070013000
13001 /* Store Params pass it to WDI */
13002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13003 pWdaParams->pWdaContext = pWDA;
13004 /* Store param pointer as passed in by caller */
13005 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13006
Yue Ma7f44bbe2013-04-12 11:47:39 -070013007 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013008
13009 if(IS_WDI_STATUS_FAILURE(status))
13010 {
13011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13012 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013013 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13014 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13016 vos_mem_free(pWdaParams->wdaMsgParam);
13017 vos_mem_free(pWdaParams);
13018 }
13019
13020 return CONVERT_WDI2VOS_STATUS(status) ;
13021}
13022
13023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013024 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013025 *
13026 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013027void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013028 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013029{
13030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13031 tWDA_CbContext *pWDA;
13032 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013033 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013034 vos_msg_t vosMsg;
13035
13036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013037 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013038
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013039 if(NULL == pWdaParams)
13040 {
13041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13042 "%s: pWdaParams received NULL", __func__);
13043 VOS_ASSERT(0);
13044 return;
13045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013046
Nirav Shah374de6e2014-02-13 16:40:01 +053013047 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13048 if(NULL == pGtkOffloadGetInfoRsp)
13049 {
13050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13051 "%s: vos_mem_malloc failed ", __func__);
13052 VOS_ASSERT(0);
13053 return;
13054 }
13055
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13057 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13058
13059 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13060 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13061
13062 /* Message Header */
13063 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013064 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013065
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013066 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13067 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13068 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13069 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13070 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013071
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013072 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13073 pwdiGtkOffloadGetInfoRsparams->bssId,
13074 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013075 /* VOS message wrapper */
13076 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13077 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13078 vosMsg.bodyval = 0;
13079
13080 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13081 {
13082 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013083 vos_mem_zero(pGtkOffloadGetInfoRsp,
13084 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13086 }
13087
13088 vos_mem_free(pWdaParams->wdaMsgParam) ;
13089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13090 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013091
13092 return;
13093}
13094/*
13095 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13096 * Free memory and send RSP back to SME.
13097 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13098 */
13099void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13100{
13101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13102 vos_msg_t vosMsg;
13103
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13105 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13106
13107 if(NULL == pWdaParams)
13108 {
13109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13110 "%s: pWdaParams received NULL", __func__);
13111 VOS_ASSERT(0);
13112 return;
13113 }
13114
13115 /* VOS message wrapper */
13116 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13117 vosMsg.bodyptr = NULL;
13118 vosMsg.bodyval = 0;
13119
13120 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13121 {
13122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13123 vos_mem_free(pWdaParams->wdaMsgParam);
13124 vos_mem_free(pWdaParams);
13125 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13126 }
13127
13128 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013129}
13130#endif
13131
13132/*
13133 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13134 * Request to WDI to set Tx Per Tracking configurations
13135 */
13136VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13137{
13138 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013139 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013140 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13141 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13142 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 if(NULL == pwdiSetTxPerTrackingReqParams)
13147 {
13148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 vos_mem_free(pTxPerTrackingParams);
13151 VOS_ASSERT(0);
13152 return VOS_STATUS_E_NOMEM;
13153 }
13154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13155 if(NULL == pWdaParams)
13156 {
13157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13160 vos_mem_free(pTxPerTrackingParams);
13161 VOS_ASSERT(0);
13162 return VOS_STATUS_E_NOMEM;
13163 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13165 pTxPerTrackingParams->ucTxPerTrackingEnable;
13166 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13167 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13168 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13169 pTxPerTrackingParams->ucTxPerTrackingRatio;
13170 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13171 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013172 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13173 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 /* Store param pointer as passed in by caller */
13175 /* store Params pass it to WDI
13176 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13177 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13178 pWdaParams->pWdaContext = pWDA;
13179 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013180 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013181 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013182 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013183 {
13184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13185 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013186 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 vos_mem_free(pWdaParams->wdaMsgParam) ;
13188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13189 vos_mem_free(pWdaParams) ;
13190 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013191 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013192
13193}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013194/*
13195 * FUNCTION: WDA_HALDumpCmdCallback
13196 * Send the VOS complete .
13197 */
13198void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13199 void* pUserData)
13200{
13201 tANI_U8 *buffer = NULL;
13202 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013203 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 if(NULL == pWdaParams)
13205 {
13206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013207 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013208 VOS_ASSERT(0) ;
13209 return ;
13210 }
13211
13212 pWDA = pWdaParams->pWdaContext;
13213 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 if(wdiRspParams->usBufferLen > 0)
13215 {
13216 /*Copy the Resp data to UMAC supplied buffer*/
13217 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13218 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013219
13220 if (!pWdaParams->wdaHALDumpAsync)
13221 {/* Indicate VOSS about the start complete */
13222 vos_WDAComplete_cback(pWDA->pVosContext);
13223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13225 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 return ;
13227}
13228
Jeff Johnson295189b2012-06-20 16:38:30 -070013229/*
13230 * FUNCTION: WDA_ProcessHALDumpCmdReq
13231 * Send Dump command to WDI
13232 */
13233VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13234 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013235 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013236{
13237 WDI_Status status = WDI_STATUS_SUCCESS;
13238 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13239 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013240 tWDA_HalDumpReqParams *pWdaParams ;
13241
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 pVosContextType pVosContext = NULL;
13243 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013244 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13245 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013246 if(pVosContext)
13247 {
13248 if (pVosContext->isLogpInProgress)
13249 {
13250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13251 "%s:LOGP in Progress. Ignore!!!", __func__);
13252 return VOS_STATUS_E_BUSY;
13253 }
13254 }
13255 else
13256 {
13257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13258 "%s: VOS Context Null", __func__);
13259 return VOS_STATUS_E_RESOURCES;
13260 }
13261
Siddharth Bhal68115602015-01-18 20:44:55 +053013262 if (NULL == pVosContext->pWDAContext)
13263 {
13264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13265 "%s: WDA Context Null", __func__);
13266 return VOS_STATUS_E_RESOURCES;
13267 }
13268 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013269 if(NULL == pWdaParams)
13270 {
13271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 return VOS_STATUS_E_NOMEM;
13274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 /* Allocate memory WDI request structure*/
13276 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13277 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13278 if(NULL == wdiHALDumpCmdReqParam)
13279 {
13280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13281 "WDA HAL DUMP Command buffer alloc fail");
13282 vos_mem_free(pWdaParams);
13283 return WDI_STATUS_E_FAILURE;
13284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013286 /* Extract the arguments */
13287 wdiHalDumpCmdInfo->command = cmd;
13288 wdiHalDumpCmdInfo->argument1 = arg1;
13289 wdiHalDumpCmdInfo->argument2 = arg2;
13290 wdiHalDumpCmdInfo->argument3 = arg3;
13291 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013293 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013294 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013295
13296 /* Response message will be passed through the buffer */
13297 pWdaParams->wdaMsgParam = (void *)pBuffer;
13298
13299 /* store Params pass it to WDI */
13300 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013302 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13303 pWdaParams);
13304 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13305 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013307 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13308 WDA_DUMPCMD_WAIT_TIMEOUT );
13309 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013311 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13312 {
13313 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13314 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13315 }
13316 else
13317 {
13318 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13319 "%s: WDA_HALDUMP reporting other error",__func__);
13320 }
13321 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 }
13324 return status;
13325}
Jeff Johnson295189b2012-06-20 16:38:30 -070013326#ifdef WLAN_FEATURE_GTK_OFFLOAD
13327/*
13328 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13329 * Request to WDI to get GTK Offload Information
13330 */
13331VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13332 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13333{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013334 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013335 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13336 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13337 tWDA_ReqParams *pWdaParams ;
13338
13339 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13340 {
13341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 VOS_ASSERT(0);
13344 return VOS_STATUS_E_NOMEM;
13345 }
13346
13347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13348 if(NULL == pWdaParams)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 VOS_ASSERT(0);
13353 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13354 return VOS_STATUS_E_NOMEM;
13355 }
13356
Yue Ma7f44bbe2013-04-12 11:47:39 -070013357 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13358 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013359
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 /* Store Params pass it to WDI */
13361 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13362 pWdaParams->pWdaContext = pWDA;
13363 /* Store param pointer as passed in by caller */
13364 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13365
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013366 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013367 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013368
Yue Ma7f44bbe2013-04-12 11:47:39 -070013369 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013370
13371 if(IS_WDI_STATUS_FAILURE(status))
13372 {
13373 /* failure returned by WDI API */
13374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13375 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13377 vos_mem_free(pWdaParams) ;
13378 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13379 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13380 }
13381
13382 return CONVERT_WDI2VOS_STATUS(status) ;
13383}
13384#endif // WLAN_FEATURE_GTK_OFFLOAD
13385
13386/*
Yue Mab9c86f42013-08-14 15:59:08 -070013387 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13388 *
13389 */
13390VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13391 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13392{
13393 WDI_Status wdiStatus;
13394 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13395
13396 addPeriodicTxPtrnParams =
13397 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13398
13399 if (NULL == addPeriodicTxPtrnParams)
13400 {
13401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13402 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13403 __func__);
13404
13405 return VOS_STATUS_E_NOMEM;
13406 }
13407
13408 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13409 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13410
13411 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13412 addPeriodicTxPtrnParams->pUserData = pWDA;
13413
13414 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13415
13416 if (WDI_STATUS_PENDING == wdiStatus)
13417 {
13418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13419 "Pending received for %s:%d", __func__, __LINE__ );
13420 }
13421 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13422 {
13423 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13424 "Failure in %s:%d", __func__, __LINE__ );
13425 }
13426
13427 vos_mem_free(addPeriodicTxPtrnParams);
13428
13429 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13430}
13431
13432/*
13433 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13434 *
13435 */
13436VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13437 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13438{
13439 WDI_Status wdiStatus;
13440 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13441
13442 delPeriodicTxPtrnParams =
13443 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13444
13445 if (NULL == delPeriodicTxPtrnParams)
13446 {
13447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13448 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13449 __func__);
13450
13451 return VOS_STATUS_E_NOMEM;
13452 }
13453
13454 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13455 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13456
13457 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13458 delPeriodicTxPtrnParams->pUserData = pWDA;
13459
13460 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13461
13462 if (WDI_STATUS_PENDING == wdiStatus)
13463 {
13464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13465 "Pending received for %s:%d", __func__, __LINE__ );
13466 }
13467 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13468 {
13469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13470 "Failure in %s:%d", __func__, __LINE__ );
13471 }
13472
13473 vos_mem_free(delPeriodicTxPtrnParams);
13474
13475 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13476}
13477
Rajeev79dbe4c2013-10-05 11:03:42 +053013478#ifdef FEATURE_WLAN_BATCH_SCAN
13479/*
13480 * FUNCTION: WDA_ProcessStopBatchScanInd
13481 *
13482 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13483 *
13484 * PARAM:
13485 * pWDA: pointer to WDA context
13486 * pReq: pointer to stop batch scan request
13487 */
13488VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13489 tSirStopBatchScanInd *pReq)
13490{
13491 WDI_Status wdiStatus;
13492 WDI_StopBatchScanIndType wdiReq;
13493
13494 wdiReq.param = pReq->param;
13495
13496 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13497
13498 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13499 {
13500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13501 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13502 }
13503
13504 vos_mem_free(pReq);
13505
13506 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13507}
13508/*==========================================================================
13509 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13510
13511 DESCRIPTION
13512 API to pull batch scan result from FW
13513
13514 PARAMETERS
13515 pWDA: Pointer to WDA context
13516 pGetBatchScanReq: Pointer to get batch scan result indication
13517
13518 RETURN VALUE
13519 NONE
13520
13521===========================================================================*/
13522VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13523 tSirTriggerBatchScanResultInd *pReq)
13524{
13525 WDI_Status wdiStatus;
13526 WDI_TriggerBatchScanResultIndType wdiReq;
13527
13528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13529 "------> %s " ,__func__);
13530
13531 wdiReq.param = pReq->param;
13532
13533 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13534
13535 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13536 {
13537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13538 "Trigger batch scan result ind failed %s:%d",
13539 __func__, wdiStatus);
13540 }
13541
13542 vos_mem_free(pReq);
13543
13544 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13545}
13546
13547/*==========================================================================
13548 FUNCTION WDA_SetBatchScanRespCallback
13549
13550 DESCRIPTION
13551 API to process set batch scan response from FW
13552
13553 PARAMETERS
13554 pRsp: Pointer to set batch scan response
13555 pUserData: Pointer to user data
13556
13557 RETURN VALUE
13558 NONE
13559
13560===========================================================================*/
13561void WDA_SetBatchScanRespCallback
13562(
13563 WDI_SetBatchScanRspType *pRsp,
13564 void* pUserData
13565)
13566{
13567 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13568 tpAniSirGlobal pMac;
13569 void *pCallbackContext;
13570 tWDA_CbContext *pWDA = NULL ;
13571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13572
13573
13574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13575 "<------ %s " ,__func__);
13576 if (NULL == pWdaParams)
13577 {
13578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13579 "%s: pWdaParams received NULL", __func__);
13580 VOS_ASSERT(0) ;
13581 return ;
13582 }
13583
13584 /*extract WDA context*/
13585 pWDA = pWdaParams->pWdaContext;
13586 if (NULL == pWDA)
13587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13589 "%s:pWDA is NULL can't invole HDD callback",
13590 __func__);
13591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13592 vos_mem_free(pWdaParams->wdaMsgParam);
13593 vos_mem_free(pWdaParams);
13594 VOS_ASSERT(0);
13595 return;
13596 }
13597
13598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13599 vos_mem_free(pWdaParams->wdaMsgParam);
13600 vos_mem_free(pWdaParams);
13601
13602 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13603 if (NULL == pMac)
13604 {
13605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13606 "%s:pMac is NULL", __func__);
13607 VOS_ASSERT(0);
13608 return;
13609 }
13610
13611 pHddSetBatchScanRsp =
13612 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13613 if (NULL == pHddSetBatchScanRsp)
13614 {
13615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13616 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13617 VOS_ASSERT(0);
13618 return;
13619 }
13620
13621 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13622
13623 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13624 /*call hdd callback with set batch scan response data*/
13625 if(pMac->pmc.setBatchScanReqCallback)
13626 {
13627 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13628 }
13629 else
13630 {
13631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13632 "%s:HDD callback is null", __func__);
13633 VOS_ASSERT(0);
13634 }
13635
13636 vos_mem_free(pHddSetBatchScanRsp);
13637 return ;
13638}
13639
13640/*==========================================================================
13641 FUNCTION WDA_ProcessSetBatchScanReq
13642
13643 DESCRIPTION
13644 API to send set batch scan request to WDI
13645
13646 PARAMETERS
13647 pWDA: Pointer to WDA context
13648 pSetBatchScanReq: Pointer to set batch scan req
13649
13650 RETURN VALUE
13651 NONE
13652
13653===========================================================================*/
13654VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13655 tSirSetBatchScanReq *pSetBatchScanReq)
13656{
13657 WDI_Status status;
13658 tWDA_ReqParams *pWdaParams ;
13659 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13660
13661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13662 "------> %s " ,__func__);
13663
13664 pWdiSetBatchScanReq =
13665 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13666 if (NULL == pWdiSetBatchScanReq)
13667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13669 "%s: VOS MEM Alloc Failure", __func__);
13670 vos_mem_free(pSetBatchScanReq);
13671 VOS_ASSERT(0);
13672 return VOS_STATUS_E_NOMEM;
13673 }
13674
13675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13676 if (NULL == pWdaParams)
13677 {
13678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13679 "%s: VOS MEM Alloc Failure", __func__);
13680 VOS_ASSERT(0);
13681 vos_mem_free(pSetBatchScanReq);
13682 vos_mem_free(pWdiSetBatchScanReq);
13683 return VOS_STATUS_E_NOMEM;
13684 }
13685
13686 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13687 pWdiSetBatchScanReq->numberOfScansToBatch =
13688 pSetBatchScanReq->numberOfScansToBatch;
13689 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13690 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13691 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13692
13693 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13694 pWdaParams->pWdaContext = pWDA;
13695 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13696
13697 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13698 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13699 if (IS_WDI_STATUS_FAILURE(status))
13700 {
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13702 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13704 vos_mem_free(pWdaParams->wdaMsgParam);
13705 vos_mem_free(pWdaParams);
13706 }
13707 return CONVERT_WDI2VOS_STATUS(status);
13708}
13709
13710#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013711/*
13712 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13713 *
13714 * DESCRIPTION: This function sends start/update OBSS scan
13715 * inidcation message to WDI
13716 *
13717 * PARAM:
13718 * pWDA: pointer to WDA context
13719 * pReq: pointer to start OBSS scan request
13720 */
13721VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13722 tSirHT40OBSSScanInd *pReq)
13723{
13724 WDI_Status status;
13725 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13726 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013727
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13729 "------> %s " ,__func__);
13730 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13731 wdiOBSSScanParams.pUserData = pWDA;
13732
13733 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13734 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13735 pWdiOBSSScanInd->scanType = pReq->scanType;
13736 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13737 pReq->OBSSScanActiveDwellTime;
13738 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13739 pReq->OBSSScanPassiveDwellTime;
13740 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13741 pReq->BSSChannelWidthTriggerScanInterval;
13742 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13743 pReq->BSSWidthChannelTransitionDelayFactor;
13744 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13745 pReq->OBSSScanActiveTotalPerChannel;
13746 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13747 pReq->OBSSScanPassiveTotalPerChannel;
13748 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13749 pReq->OBSSScanActivityThreshold;
13750 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13751 vos_mem_copy(pWdiOBSSScanInd->channels,
13752 pReq->channels,
13753 pReq->channelCount);
13754 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13755 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13756 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13757 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13758 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13759
13760 vos_mem_copy(pWdiOBSSScanInd->ieField,
13761 pReq->ieField,
13762 pReq->ieFieldLen);
13763
13764 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13765 if (WDI_STATUS_PENDING == status)
13766 {
13767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13768 "Pending received for %s:%d ",__func__,__LINE__ );
13769 }
13770 else if (WDI_STATUS_SUCCESS_SYNC != status)
13771 {
13772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13773 "Failure in %s:%d ",__func__,__LINE__ );
13774 }
13775 return CONVERT_WDI2VOS_STATUS(status) ;
13776}
13777/*
13778 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13779 *
13780 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13781 *
13782 * PARAM:
13783 * pWDA: pointer to WDA context
13784 * pReq: pointer to stop batch scan request
13785 */
13786VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13787 tANI_U8 *bssIdx)
13788{
13789 WDI_Status status;
13790
13791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13792 "------> %s " ,__func__);
13793
13794 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13795 if (WDI_STATUS_PENDING == status)
13796 {
13797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13798 "Pending received for %s:%d ",__func__,__LINE__ );
13799 }
13800 else if (WDI_STATUS_SUCCESS_SYNC != status)
13801 {
13802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13803 "Failure in %s:%d ",__func__,__LINE__ );
13804 }
13805 return CONVERT_WDI2VOS_STATUS(status) ;
13806}
Yue Mab9c86f42013-08-14 15:59:08 -070013807/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013808 * FUNCTION: WDA_ProcessRateUpdateInd
13809 *
13810 */
13811VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13812 tSirRateUpdateInd *pRateUpdateParams)
13813{
13814 WDI_Status wdiStatus;
13815 WDI_RateUpdateIndParams rateUpdateParams;
13816
13817 vos_mem_copy(rateUpdateParams.bssid,
13818 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13819
13820 rateUpdateParams.ucastDataRateTxFlag =
13821 pRateUpdateParams->ucastDataRateTxFlag;
13822 rateUpdateParams.reliableMcastDataRateTxFlag =
13823 pRateUpdateParams->reliableMcastDataRateTxFlag;
13824 rateUpdateParams.mcastDataRate24GHzTxFlag =
13825 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13826 rateUpdateParams.mcastDataRate5GHzTxFlag =
13827 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13828
13829 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13830 rateUpdateParams.reliableMcastDataRate =
13831 pRateUpdateParams->reliableMcastDataRate;
13832 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13833 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13834
13835 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13836 rateUpdateParams.pUserData = pWDA;
13837
13838 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13839
13840 if (WDI_STATUS_PENDING == wdiStatus)
13841 {
13842 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13843 "Pending received for %s:%d", __func__, __LINE__ );
13844 }
13845 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13846 {
13847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13848 "Failure in %s:%d", __func__, __LINE__ );
13849 }
13850
13851 vos_mem_free(pRateUpdateParams);
13852
13853 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13854}
13855
13856/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013857 * -------------------------------------------------------------------------
13858 * DATA interface with WDI for Mgmt Frames
13859 * -------------------------------------------------------------------------
13860 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013861/*
13862 * FUNCTION: WDA_TxComplete
13863 * Callback function for the WDA_TxPacket
13864 */
13865VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13866 VOS_STATUS status )
13867{
13868
13869 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13870 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Anjaneedevi Kapparapuf4883a72015-11-12 18:18:35 +053013871 tANI_U64 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013872
Mihir Shete63341222015-03-24 15:39:18 +053013873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13874
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 if(NULL == wdaContext)
13876 {
13877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13878 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013879 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013880 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013881 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013882 return VOS_STATUS_E_FAILURE;
13883 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013884
13885 /*Check if frame was timed out or not*/
13886 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13887 (v_PVOID_t)&uUserData);
13888
13889 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13890 {
13891 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13893 "%s: MGMT Frame Tx timed out",
13894 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013895 vos_pkt_return_packet(pData);
13896 return VOS_STATUS_SUCCESS;
13897 }
13898
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13900 if( NULL!=wdaContext->pTxCbFunc)
13901 {
13902 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013903 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 {
13905 wdaContext->pTxCbFunc(pMac, pData);
13906 }
13907 else
13908 {
13909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013910 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013911 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013912 //Return from here since we reaching here because the packet already timeout
13913 return status;
13914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 }
13916
13917 /*
13918 * Trigger the event to bring the HAL TL Tx complete function to come
13919 * out of wait
13920 * Let the coe above to complete the packet first. When this event is set,
13921 * the thread waiting for the event may run and set Vospacket_freed causing the original
13922 * packet not being freed.
13923 */
13924 status = vos_event_set(&wdaContext->txFrameEvent);
13925 if(!VOS_IS_STATUS_SUCCESS(status))
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013928 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 return status;
13931}
Jeff Johnson295189b2012-06-20 16:38:30 -070013932/*
13933 * FUNCTION: WDA_TxPacket
13934 * Forward TX management frame to WDI
13935 */
13936VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13937 void *pFrmBuf,
13938 tANI_U16 frmLen,
13939 eFrameType frmType,
13940 eFrameTxDir txDir,
13941 tANI_U8 tid,
13942 pWDATxRxCompFunc pCompFunc,
13943 void *pData,
13944 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013945 tANI_U32 txFlag,
13946 tANI_U32 txBdToken
13947 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013948{
13949 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13950 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13951 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13952 tANI_U8 eventIdx = 0;
13953 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13954 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013955 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singh447839d2015-11-30 14:22:10 +053013956 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013957
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 if((NULL == pWDA)||(NULL == pFrmBuf))
13959 {
13960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013961 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013962 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 VOS_ASSERT(0);
13964 return VOS_STATUS_E_FAILURE;
13965 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013966
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013968 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13969 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13971 if(NULL == pMac)
13972 {
13973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013974 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013975 VOS_ASSERT(0);
13976 return VOS_STATUS_E_FAILURE;
13977 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013978
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 /* store the call back function in WDA context */
13980 pWDA->pTxCbFunc = pCompFunc;
13981 /* store the call back for the function of ackTxComplete */
13982 if( pAckTxComp )
13983 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013984 if( NULL != pWDA->pAckTxCbFunc )
13985 {
13986 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013988 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013989 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013990 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013991
Jeff Johnsone7245742012-09-05 17:12:55 -070013992 if( VOS_STATUS_SUCCESS !=
13993 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13994 {
13995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13996 "Tx Complete timeout Timer Stop Failed ");
13997 }
13998 else
13999 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014001 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014002 }
14003 }
14004
14005 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14006 pWDA->pAckTxCbFunc = pAckTxComp;
14007 if( VOS_STATUS_SUCCESS !=
14008 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14009 {
14010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14011 "Tx Complete Timer Start Failed ");
14012 pWDA->pAckTxCbFunc = NULL;
14013 return eHAL_STATUS_FAILURE;
14014 }
14015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 /* Reset the event to be not signalled */
14017 status = vos_event_reset(&pWDA->txFrameEvent);
14018 if(!VOS_IS_STATUS_SUCCESS(status))
14019 {
14020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014021 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014022 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14023 if( pAckTxComp )
14024 {
14025 pWDA->pAckTxCbFunc = NULL;
14026 if( VOS_STATUS_SUCCESS !=
14027 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14028 {
14029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14030 "Tx Complete timeout Timer Stop Failed ");
14031 }
14032 }
14033 return VOS_STATUS_E_FAILURE;
14034 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014035
14036 /* If Peer Sta mask is set don't overwrite to self sta */
14037 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014038 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014039 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014041 else
14042 {
Ganesh K08bce952012-12-13 15:04:41 -080014043 /* Get system role, use the self station if in unknown role or STA role */
14044 systemRole = wdaGetGlobalSystemRole(pMac);
14045 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14046 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014047#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014048 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014049#endif
Ganesh K08bce952012-12-13 15:04:41 -080014050 ))
14051 {
14052 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14053 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014055
Jeff Johnsone7245742012-09-05 17:12:55 -070014056 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14057 disassoc frame reaches the HW, HAL has already deleted the peer station */
14058 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014060 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014061 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014062 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014063 /*Send Probe request frames on self sta idx*/
14064 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014065 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014066 /* Since we donot want probe responses to be retried, send probe responses
14067 through the NO_ACK queues */
14068 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14069 {
14070 //probe response is sent out using self station and no retries options.
14071 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14072 }
14073 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14074 {
14075 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14076 }
14077 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014078#ifdef FEATURE_WLAN_TDLS
14079 /* TDLS Management frames are sent using Peer Sta mask */
14080 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14081 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14082 {
14083 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14084
14085 }
14086#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014087 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014088
14089 /*Set frame tag to 0
14090 We will use the WDA user data in order to tag a frame as expired*/
14091 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14092 (v_PVOID_t)0);
14093
14094
14095 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014096 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14097 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014098 {
14099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014100 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014101 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014102 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 -070014103 if( pAckTxComp )
14104 {
14105 pWDA->pAckTxCbFunc = NULL;
14106 if( VOS_STATUS_SUCCESS !=
14107 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14108 {
14109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14110 "Tx Complete timeout Timer Stop Failed ");
14111 }
14112 }
14113 return VOS_STATUS_E_FAILURE;
14114 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014115 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014116 /*
14117 * Wait for the event to be set by the TL, to get the response of TX
14118 * complete, this event should be set by the Callback function called by TL
14119 */
14120 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14121 &eventIdx);
14122 if(!VOS_IS_STATUS_SUCCESS(status))
14123 {
14124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14125 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014126 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014127
14128 /*Tag Frame as timed out for later deletion*/
14129 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14130 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014131 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14132 after the packet gets completed(packet freed once)*/
14133
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014134 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014135 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014136
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 /* check whether the packet was freed already,so need not free again when
14138 * TL calls the WDA_Txcomplete routine
14139 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014140 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14141 /*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 -070014142 {
14143 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014144 } */
Abhishek Singhb74bfc02015-11-26 16:53:47 +053014145
14146 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14147
Abhishek Singh837adf22015-10-01 17:37:37 +053014148 if (vos_isFatalEventEnabled())
14149 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14150 WLAN_LOG_INDICATOR_HOST_DRIVER,
14151 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14152 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014153
Jeff Johnson295189b2012-06-20 16:38:30 -070014154 if( pAckTxComp )
14155 {
14156 pWDA->pAckTxCbFunc = NULL;
14157 if( VOS_STATUS_SUCCESS !=
14158 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14159 {
14160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14161 "Tx Complete timeout Timer Stop Failed ");
14162 }
14163 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014164 pWDA->mgmtTxfailureCnt++;
14165
14166 /* SSR if timeout continously for
14167 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14168 */
14169 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14170 pWDA->mgmtTxfailureCnt)
14171 {
14172 vos_wlanRestart();
14173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 status = VOS_STATUS_E_FAILURE;
14175 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014176
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014177#ifdef WLAN_DUMP_MGMTFRAMES
14178 if (VOS_IS_STATUS_SUCCESS(status))
14179 {
14180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14181 "%s() TX packet : SubType %d", __func__,pFc->subType);
14182 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14183 pData, frmLen);
14184 }
14185#endif
14186
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014187 if (VOS_IS_STATUS_SUCCESS(status))
14188 {
Abhishek Singh447839d2015-11-30 14:22:10 +053014189 pWDA->mgmtTxfailureCnt = 0;
14190 if ((vos_timer_get_system_time() - time_snapshot) >=
14191 WDA_TX_TIME_THRESHOLD)
14192 {
14193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14194 "Tx Complete took %lu ms",
14195 vos_timer_get_system_time() - time_snapshot);
14196 }
14197
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014198 if (pMac->fEnableDebugLog & 0x1)
14199 {
14200 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14201 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14202 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14203 {
14204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14205 pFc->type, pFc->subType);
14206 }
14207 }
14208 }
14209
14210
Jeff Johnson295189b2012-06-20 16:38:30 -070014211 return status;
14212}
Jeff Johnson295189b2012-06-20 16:38:30 -070014213/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014214 * FUNCTION: WDA_ProcessDHCPStartInd
14215 * Forward DHCP Start to WDI
14216 */
14217static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14218 tAniDHCPInd *dhcpStartInd)
14219{
14220 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014221 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014222
c_hpothu0b0cab72014-02-13 21:52:40 +053014223 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14224 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014225 sizeof(tSirMacAddr));
14226
c_hpothu0b0cab72014-02-13 21:52:40 +053014227 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014228
c_hpothu0b0cab72014-02-13 21:52:40 +053014229 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014230 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14232 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014233 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014234 else if (WDI_STATUS_SUCCESS_SYNC != status)
14235 {
14236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14237 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14238 }
14239
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014240 vos_mem_free(dhcpStartInd);
14241 return CONVERT_WDI2VOS_STATUS(status) ;
14242}
14243
14244 /*
14245 * FUNCTION: WDA_ProcessDHCPStopInd
14246 * Forward DHCP Stop to WDI
14247 */
14248 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14249 tAniDHCPInd *dhcpStopInd)
14250 {
14251 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014252 WDI_DHCPInd wdiDHCPInd;
14253
14254 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14255 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14256
14257 status = WDI_dhcpStopInd(&wdiDHCPInd);
14258
14259 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014260 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14262 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014263 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014264 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014265 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14267 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014268 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014269
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014270 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014271
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014272 return CONVERT_WDI2VOS_STATUS(status) ;
14273 }
14274
14275/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014276 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14277 *
14278 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14279 *
14280 * PARAM:
14281 * pWDA: pointer to WDA context
14282 * pReq: pointer to stop batch scan request
14283 */
14284VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14285 tpSpoofMacAddrReqParams pReq)
14286{
14287 WDI_Status wdiStatus;
14288 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14289 tWDA_ReqParams *pWdaParams;
14290
14291 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14292 sizeof(WDI_SpoofMacAddrInfoType));
14293 if(NULL == WDI_SpoofMacAddrInfoParams) {
14294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14295 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14296 VOS_ASSERT(0);
14297 return VOS_STATUS_E_NOMEM;
14298 }
14299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14300 if(NULL == pWdaParams) {
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014303 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014304 VOS_ASSERT(0);
14305 return VOS_STATUS_E_NOMEM;
14306 }
14307
14308 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14309 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14310
14311 pWdaParams->pWdaContext = pWDA;
14312 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014313 pWdaParams->wdaMsgParam = (void *)pReq;
14314
14315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14316 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14317
Siddharth Bhal171788a2014-09-29 21:02:40 +053014318 /* store Params pass it to WDI */
14319 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14320
14321 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014322 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14323 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014324
14325 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14326 {
14327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14328 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14330 vos_mem_free(pWdaParams->wdaMsgParam);
14331 vos_mem_free(pWdaParams);
14332 }
14333
14334 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14335}
14336
c_manjeecfd1efb2015-09-25 19:32:34 +053014337
14338/*
14339 * FUNCTION: WDA_FwrMemDumpRespCallback
14340 * recieves Mgmt Logging init response from FW
14341 */
14342 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14343 void* pUserData)
14344{
14345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14346 tAniFwrDumpReq *pFwrMemDumpReq;
14347 tAniFwrDumpRsp *pFwrMemDumpRsp;
14348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14349 "<------ %s " ,__func__);
14350
14351 if(NULL == pWdaParams)
14352 {
14353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14354 "%s: pWdaParams received NULL", __func__);
14355 VOS_ASSERT(0);
14356 return ;
14357 }
14358
14359 if(NULL == pWdaParams->wdaMsgParam)
14360 {
14361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14362 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14363 VOS_ASSERT(0);
14364 vos_mem_free(pWdaParams);
14365 return ;
14366 }
14367
14368 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14369 if(pFwrMemDumpRsp == NULL)
14370 {
14371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14372 "%s: pFwrMemDumpRsp is NULL", __func__);
14373 VOS_ASSERT(0);
14374 vos_mem_free(pWdaParams);
14375 return ;
14376 }
14377
14378 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14379 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14380
14381 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14382 {
14383 pFwrMemDumpReq->fwMemDumpReqCallback(
14384 pFwrMemDumpReq->fwMemDumpReqContext,
14385 pFwrMemDumpRsp);
14386 }
14387 else
14388 {
14389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14390 "%s: FwrMemDump callback is NULL", __func__);
14391 }
14392
14393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14394 vos_mem_free(pWdaParams->wdaMsgParam);
14395 vos_mem_free(pWdaParams);
14396 vos_mem_free(pFwrMemDumpRsp);
14397
14398 return ;
14399}
14400
14401VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14402 tAniFwrDumpReq* pFwrMemDumpReq)
14403{
14404 VOS_STATUS status = VOS_STATUS_SUCCESS;
14405 WDI_Status wstatus;
14406 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14407 tWDA_ReqParams *pWdaParams ;
14408
14409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14410 "------> %s " ,__func__);
14411 /* Sanity Check*/
14412 if(NULL == pFwrMemDumpReq)
14413 {
14414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14415 "%s: pFwrMemDumpReq received NULL", __func__);
14416 VOS_ASSERT(0) ;
14417 return VOS_STATUS_E_FAULT;
14418 }
14419
14420 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14421 if(NULL == pWdiFwrMemDumpReq)
14422 {
14423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14424 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14425 VOS_ASSERT(0);
14426 return VOS_STATUS_E_NOMEM;
14427 }
14428
14429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14430 if(NULL == pWdaParams)
14431 {
14432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14433 "%s: pWdaParams Alloc Failure", __func__);
14434 VOS_ASSERT(0);
14435 vos_mem_free(pWdiFwrMemDumpReq);
14436 return VOS_STATUS_E_NOMEM;
14437 }
14438
14439 /* Store Params pass it to WDI */
14440 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14441 pWdaParams->pWdaContext = pWDA;
14442 /* Store param pointer as passed in by caller */
14443 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14444
14445 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14446 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14447 pWdaParams);
14448
14449 if(IS_WDI_STATUS_FAILURE(wstatus))
14450 {
14451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14452 FL("Fwr Mem Dump Req failed, free all the memory"));
14453 status = CONVERT_WDI2VOS_STATUS(wstatus);
14454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14455 vos_mem_free(pWdaParams->wdaMsgParam);
14456 vos_mem_free(pWdaParams);
14457 pWdaParams->wdaWdiApiMsgParam = NULL;
14458 pWdaParams->wdaMsgParam = NULL;
14459 }
14460
14461 return status;
14462
14463}
14464
14465
14466
Siddharth Bhal171788a2014-09-29 21:02:40 +053014467/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014468 * FUNCTION: WDA_McProcessMsg
14469 * Trigger DAL-AL to start CFG download
14470 */
14471VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14472{
14473 VOS_STATUS status = VOS_STATUS_SUCCESS;
14474 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014475 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014476 {
14477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014478 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 VOS_ASSERT(0);
14480 return VOS_STATUS_E_FAILURE;
14481 }
14482
14483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014484 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070014485
14486 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
14487 if(NULL == pWDA )
14488 {
14489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014490 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014491 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070014492 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 return VOS_STATUS_E_FAILURE;
14494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 /* Process all the WDA messages.. */
14496 switch( pMsg->type )
14497 {
14498 case WNI_CFG_DNLD_REQ:
14499 {
14500 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 /* call WDA complete event if config download success */
14502 if( VOS_IS_STATUS_SUCCESS(status) )
14503 {
14504 vos_WDAComplete_cback(pVosContext);
14505 }
14506 else
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14509 "WDA Config Download failure" );
14510 }
14511 break ;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 /*
14514 * Init SCAN request from PE, convert it into DAL format
14515 * and send it to DAL
14516 */
14517 case WDA_INIT_SCAN_REQ:
14518 {
14519 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
14520 break ;
14521 }
14522 /* start SCAN request from PE */
14523 case WDA_START_SCAN_REQ:
14524 {
14525 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
14526 break ;
14527 }
14528 /* end SCAN request from PE */
14529 case WDA_END_SCAN_REQ:
14530 {
14531 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
14532 break ;
14533 }
14534 /* end SCAN request from PE */
14535 case WDA_FINISH_SCAN_REQ:
14536 {
14537 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
14538 break ;
14539 }
14540 /* join request from PE */
14541 case WDA_CHNL_SWITCH_REQ:
14542 {
14543 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
14544 {
14545 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
14546 }
14547 else
14548 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080014549 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
14550 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
14551 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
14552 {
14553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14554 "call ProcessChannelSwitchReq_V1" );
14555 WDA_ProcessChannelSwitchReq_V1(pWDA,
14556 (tSwitchChannelParams*)pMsg->bodyptr) ;
14557 }
14558 else
14559 {
14560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14561 "call ProcessChannelSwitchReq" );
14562 WDA_ProcessChannelSwitchReq(pWDA,
14563 (tSwitchChannelParams*)pMsg->bodyptr) ;
14564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 }
14566 break ;
14567 }
14568 /* ADD BSS request from PE */
14569 case WDA_ADD_BSS_REQ:
14570 {
14571 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
14572 break ;
14573 }
14574 case WDA_ADD_STA_REQ:
14575 {
14576 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
14577 break ;
14578 }
14579 case WDA_DELETE_BSS_REQ:
14580 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014581 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
14582 break ;
14583 }
14584 case WDA_DELETE_STA_REQ:
14585 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014586 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
14587 break ;
14588 }
14589 case WDA_CONFIG_PARAM_UPDATE_REQ:
14590 {
14591 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
14592 break ;
14593 }
14594 case WDA_SET_BSSKEY_REQ:
14595 {
14596 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
14597 break ;
14598 }
14599 case WDA_SET_STAKEY_REQ:
14600 {
14601 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14602 break ;
14603 }
14604 case WDA_SET_STA_BCASTKEY_REQ:
14605 {
14606 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14607 break ;
14608 }
14609 case WDA_REMOVE_BSSKEY_REQ:
14610 {
14611 WDA_ProcessRemoveBssKeyReq(pWDA,
14612 (tRemoveBssKeyParams *)pMsg->bodyptr);
14613 break ;
14614 }
14615 case WDA_REMOVE_STAKEY_REQ:
14616 {
14617 WDA_ProcessRemoveStaKeyReq(pWDA,
14618 (tRemoveStaKeyParams *)pMsg->bodyptr);
14619 break ;
14620 }
14621 case WDA_REMOVE_STA_BCASTKEY_REQ:
14622 {
14623 /* TODO: currently UMAC is not sending this request, Add the code for
14624 handling this request when UMAC supports */
14625 break;
14626 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014627#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 case WDA_TSM_STATS_REQ:
14629 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070014630 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014631 break;
14632 }
14633#endif
14634 case WDA_UPDATE_EDCA_PROFILE_IND:
14635 {
14636 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
14637 break;
14638 }
14639 case WDA_ADD_TS_REQ:
14640 {
14641 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
14642 break;
14643 }
14644 case WDA_DEL_TS_REQ:
14645 {
14646 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
14647 break;
14648 }
14649 case WDA_ADDBA_REQ:
14650 {
14651 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
14652 break;
14653 }
14654 case WDA_DELBA_IND:
14655 {
14656 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
14657 break;
14658 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080014659 case WDA_UPDATE_CHAN_LIST_REQ:
14660 {
14661 WDA_ProcessUpdateChannelList(pWDA,
14662 (tSirUpdateChanList *)pMsg->bodyptr);
14663 break;
14664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014665 case WDA_SET_LINK_STATE:
14666 {
14667 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
14668 break;
14669 }
14670 case WDA_GET_STATISTICS_REQ:
14671 {
14672 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
14673 break;
14674 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014675#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080014676 case WDA_GET_ROAM_RSSI_REQ:
14677 {
14678 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
14679 break;
14680 }
14681#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014682 case WDA_PWR_SAVE_CFG:
14683 {
14684 if(pWDA->wdaState == WDA_READY_STATE)
14685 {
14686 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
14687 }
14688 else
14689 {
14690 if(NULL != pMsg->bodyptr)
14691 {
14692 vos_mem_free(pMsg->bodyptr);
14693 }
14694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14695 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
14696 }
14697 break;
14698 }
14699 case WDA_ENTER_IMPS_REQ:
14700 {
14701 if(pWDA->wdaState == WDA_READY_STATE)
14702 {
14703 WDA_ProcessEnterImpsReq(pWDA);
14704 }
14705 else
14706 {
14707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14708 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14709 }
14710 break;
14711 }
14712 case WDA_EXIT_IMPS_REQ:
14713 {
14714 if(pWDA->wdaState == WDA_READY_STATE)
14715 {
14716 WDA_ProcessExitImpsReq(pWDA);
14717 }
14718 else
14719 {
14720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14721 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14722 }
14723 break;
14724 }
14725 case WDA_ENTER_BMPS_REQ:
14726 {
14727 if(pWDA->wdaState == WDA_READY_STATE)
14728 {
14729 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
14730 }
14731 else
14732 {
14733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14734 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14735 }
14736 break;
14737 }
14738 case WDA_EXIT_BMPS_REQ:
14739 {
14740 if(pWDA->wdaState == WDA_READY_STATE)
14741 {
14742 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
14743 }
14744 else
14745 {
14746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14747 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14748 }
14749 break;
14750 }
14751 case WDA_ENTER_UAPSD_REQ:
14752 {
14753 if(pWDA->wdaState == WDA_READY_STATE)
14754 {
14755 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
14756 }
14757 else
14758 {
14759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14760 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14761 }
14762 break;
14763 }
14764 case WDA_EXIT_UAPSD_REQ:
14765 {
14766 if(pWDA->wdaState == WDA_READY_STATE)
14767 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014768 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014769 }
14770 else
14771 {
14772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14773 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14774 }
14775 break;
14776 }
14777 case WDA_UPDATE_UAPSD_IND:
14778 {
14779 if(pWDA->wdaState == WDA_READY_STATE)
14780 {
14781 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14782 }
14783 else
14784 {
14785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14786 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14787 }
14788 break;
14789 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 case WDA_REGISTER_PE_CALLBACK :
14791 {
14792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14793 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14794 /*TODO: store the PE callback */
14795 /* Do Nothing? MSG Body should be freed at here */
14796 if(NULL != pMsg->bodyptr)
14797 {
14798 vos_mem_free(pMsg->bodyptr);
14799 }
14800 break;
14801 }
14802 case WDA_SYS_READY_IND :
14803 {
14804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14805 "Handling msg type WDA_SYS_READY_IND " );
14806 pWDA->wdaState = WDA_READY_STATE;
14807 if(NULL != pMsg->bodyptr)
14808 {
14809 vos_mem_free(pMsg->bodyptr);
14810 }
14811 break;
14812 }
14813 case WDA_BEACON_FILTER_IND :
14814 {
14815 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14816 break;
14817 }
14818 case WDA_BTC_SET_CFG:
14819 {
14820 /*TODO: handle this while dealing with BTC */
14821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14822 "Handling msg type WDA_BTC_SET_CFG " );
14823 /* Do Nothing? MSG Body should be freed at here */
14824 if(NULL != pMsg->bodyptr)
14825 {
14826 vos_mem_free(pMsg->bodyptr);
14827 }
14828 break;
14829 }
14830 case WDA_SIGNAL_BT_EVENT:
14831 {
14832 /*TODO: handle this while dealing with BTC */
14833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14834 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14835 /* Do Nothing? MSG Body should be freed at here */
14836 if(NULL != pMsg->bodyptr)
14837 {
14838 vos_mem_free(pMsg->bodyptr);
14839 }
14840 break;
14841 }
14842 case WDA_CFG_RXP_FILTER_REQ:
14843 {
14844 WDA_ProcessConfigureRxpFilterReq(pWDA,
14845 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14846 break;
14847 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014848 case WDA_MGMT_LOGGING_INIT_REQ:
14849 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014850 WDA_ProcessFWLoggingInitReq(pWDA,
14851 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014852 break;
14853 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014854 case WDA_GET_FRAME_LOG_REQ:
14855 {
14856 WDA_ProcessGetFrameLogReq(pWDA,
14857 (tAniGetFrameLogReq *)pMsg->bodyptr);
14858 break;
14859 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053014860 case WDA_START_RSSI_MONITOR_REQ:
14861 {
14862 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14863 break;
14864 }
14865 case WDA_STOP_RSSI_MONITOR_REQ:
14866 {
14867 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14868 break;
14869 }
Karthick Sa35b0692015-08-21 15:57:05 +053014870 case WDA_SEND_LOG_DONE_IND:
14871 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014872 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014873 break;
14874 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014875 case WDA_FATAL_EVENT_LOGS_REQ:
14876 {
14877 WDA_ProcessFatalEventLogsReq(pWDA,
14878 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14879 break;
14880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014881 case WDA_SET_HOST_OFFLOAD:
14882 {
14883 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14884 break;
14885 }
14886 case WDA_SET_KEEP_ALIVE:
14887 {
14888 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14889 break;
14890 }
14891#ifdef WLAN_NS_OFFLOAD
14892 case WDA_SET_NS_OFFLOAD:
14893 {
14894 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14895 break;
14896 }
14897#endif //WLAN_NS_OFFLOAD
14898 case WDA_ADD_STA_SELF_REQ:
14899 {
14900 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14901 break;
14902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014903 case WDA_DEL_STA_SELF_REQ:
14904 {
14905 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14906 break;
14907 }
14908 case WDA_WOWL_ADD_BCAST_PTRN:
14909 {
14910 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14911 break;
14912 }
14913 case WDA_WOWL_DEL_BCAST_PTRN:
14914 {
14915 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14916 break;
14917 }
14918 case WDA_WOWL_ENTER_REQ:
14919 {
14920 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14921 break;
14922 }
14923 case WDA_WOWL_EXIT_REQ:
14924 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014925 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 break;
14927 }
14928 case WDA_TL_FLUSH_AC_REQ:
14929 {
14930 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14931 break;
14932 }
14933 case WDA_SIGNAL_BTAMP_EVENT:
14934 {
14935 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14936 break;
14937 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014938 case WDA_FW_STATS_GET_REQ:
14939 {
14940 WDA_ProcessFWStatsGetReq(pWDA,
14941 (tSirFWStatsGetReq *)pMsg->bodyptr);
14942 break;
14943 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014944#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14945 case WDA_LINK_LAYER_STATS_SET_REQ:
14946 {
14947 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14948 break;
14949 }
14950 case WDA_LINK_LAYER_STATS_GET_REQ:
14951 {
14952 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14953 break;
14954 }
14955 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14956 {
14957 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14958 break;
14959 }
14960#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014961#ifdef WLAN_FEATURE_EXTSCAN
14962 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14963 {
14964 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14965 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14966 break;
14967 }
14968 case WDA_EXTSCAN_START_REQ:
14969 {
14970 WDA_ProcessEXTScanStartReq(pWDA,
14971 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14972 break;
14973 }
14974 case WDA_EXTSCAN_STOP_REQ:
14975 {
14976 WDA_ProcessEXTScanStopReq(pWDA,
14977 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14978 break;
14979 }
14980 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14981 {
14982 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
14983 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
14984 break;
14985 }
14986 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
14987 {
14988 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
14989 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
14990 break;
14991 }
14992 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
14993 {
14994 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
14995 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
14996 break;
14997 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053014998 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
14999 {
15000 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15001 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15002 break;
15003 }
15004 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15005 {
15006 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15007 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15008 break;
15009 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015010 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15011 {
15012 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15013 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15014 break;
15015 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015016#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015017#ifdef WDA_UT
15018 case WDA_WDI_EVENT_MSG:
15019 {
15020 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15021 break ;
15022 }
15023#endif
15024 case WDA_UPDATE_BEACON_IND:
15025 {
15026 WDA_ProcessUpdateBeaconParams(pWDA,
15027 (tUpdateBeaconParams *)pMsg->bodyptr);
15028 break;
15029 }
15030 case WDA_SEND_BEACON_REQ:
15031 {
15032 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15033 break;
15034 }
15035 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15036 {
15037 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15038 (tSendProbeRespParams *)pMsg->bodyptr);
15039 break;
15040 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015041#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 case WDA_SET_MAX_TX_POWER_REQ:
15043 {
15044 WDA_ProcessSetMaxTxPowerReq(pWDA,
15045 (tMaxTxPowerParams *)pMsg->bodyptr);
15046 break;
15047 }
15048#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015049 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15050 {
15051 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15052 pMsg->bodyptr);
15053 break;
15054 }
schang86c22c42013-03-13 18:41:24 -070015055 case WDA_SET_TX_POWER_REQ:
15056 {
15057 WDA_ProcessSetTxPowerReq(pWDA,
15058 (tSirSetTxPowerReq *)pMsg->bodyptr);
15059 break;
15060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015061 case WDA_SET_P2P_GO_NOA_REQ:
15062 {
15063 WDA_ProcessSetP2PGONOAReq(pWDA,
15064 (tP2pPsParams *)pMsg->bodyptr);
15065 break;
15066 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015067 /* timer related messages */
15068 case WDA_TIMER_BA_ACTIVITY_REQ:
15069 {
15070 WDA_BaCheckActivity(pWDA) ;
15071 break ;
15072 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015073
15074 /* timer related messages */
15075 case WDA_TIMER_TRAFFIC_STATS_IND:
15076 {
15077 WDA_TimerTrafficStatsInd(pWDA);
15078 break;
15079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015080#ifdef WLAN_FEATURE_VOWIFI_11R
15081 case WDA_AGGR_QOS_REQ:
15082 {
15083 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15084 break;
15085 }
15086#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015087 case WDA_FTM_CMD_REQ:
15088 {
15089 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15090 break ;
15091 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015092#ifdef FEATURE_OEM_DATA_SUPPORT
15093 case WDA_START_OEM_DATA_REQ:
15094 {
15095 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15096 break;
15097 }
15098#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 /* Tx Complete Time out Indication */
15100 case WDA_TX_COMPLETE_TIMEOUT_IND:
15101 {
15102 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15103 break;
15104 }
15105 case WDA_WLAN_SUSPEND_IND:
15106 {
15107 WDA_ProcessWlanSuspendInd(pWDA,
15108 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15109 break;
15110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015111 case WDA_WLAN_RESUME_REQ:
15112 {
15113 WDA_ProcessWlanResumeReq(pWDA,
15114 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15115 break;
15116 }
15117
15118 case WDA_UPDATE_CF_IND:
15119 {
15120 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15121 pMsg->bodyptr = NULL;
15122 break;
15123 }
15124#ifdef FEATURE_WLAN_SCAN_PNO
15125 case WDA_SET_PNO_REQ:
15126 {
15127 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15128 break;
15129 }
15130 case WDA_UPDATE_SCAN_PARAMS_REQ:
15131 {
15132 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15133 break;
15134 }
15135 case WDA_SET_RSSI_FILTER_REQ:
15136 {
15137 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15138 break;
15139 }
15140#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015141#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015142 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015143 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015144 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015145 break;
15146 }
15147#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015148 case WDA_SET_TX_PER_TRACKING_REQ:
15149 {
15150 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15151 break;
15152 }
15153
15154#ifdef WLAN_FEATURE_PACKET_FILTERING
15155 case WDA_8023_MULTICAST_LIST_REQ:
15156 {
15157 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15158 break;
15159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015160 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15161 {
15162 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15163 break;
15164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015165 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15166 {
15167 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15168 break;
15169 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015170 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15171 {
15172 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15173 break;
15174 }
15175#endif // WLAN_FEATURE_PACKET_FILTERING
15176
15177
15178 case WDA_TRANSMISSION_CONTROL_IND:
15179 {
15180 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15181 break;
15182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 case WDA_SET_POWER_PARAMS_REQ:
15184 {
15185 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15186 break;
15187 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015188 case WDA_FW_MEM_DUMP_REQ:
15189 {
15190 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15191 break;
15192 }
15193
Jeff Johnson295189b2012-06-20 16:38:30 -070015194#ifdef WLAN_FEATURE_GTK_OFFLOAD
15195 case WDA_GTK_OFFLOAD_REQ:
15196 {
15197 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15198 break;
15199 }
15200
15201 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15202 {
15203 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15204 break;
15205 }
15206#endif //WLAN_FEATURE_GTK_OFFLOAD
15207
15208 case WDA_SET_TM_LEVEL_REQ:
15209 {
15210 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15211 break;
15212 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015213
Mohit Khanna4a70d262012-09-11 16:30:12 -070015214 case WDA_UPDATE_OP_MODE:
15215 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015216 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15217 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15218 {
15219 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15220 }
15221 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015222 {
15223 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15224 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15225 else
15226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015227 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015228 }
15229 else
15230 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015231 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015232 break;
15233 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015234#ifdef WLAN_FEATURE_11W
15235 case WDA_EXCLUDE_UNENCRYPTED_IND:
15236 {
15237 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15238 break;
15239 }
15240#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015241#ifdef FEATURE_WLAN_TDLS
15242 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15243 {
15244 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15245 break;
15246 }
15247#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015248 case WDA_DHCP_START_IND:
15249 {
15250 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15251 break;
15252 }
15253 case WDA_DHCP_STOP_IND:
15254 {
15255 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15256 break;
15257 }
Leo Chang9056f462013-08-01 19:21:11 -070015258#ifdef FEATURE_WLAN_LPHB
15259 case WDA_LPHB_CONF_REQ:
15260 {
15261 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15262 break;
15263 }
15264#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015265 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15266 {
15267 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15268 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15269 break;
15270 }
15271 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15272 {
15273 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15274 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15275 break;
15276 }
15277
Rajeev79dbe4c2013-10-05 11:03:42 +053015278#ifdef FEATURE_WLAN_BATCH_SCAN
15279 case WDA_SET_BATCH_SCAN_REQ:
15280 {
15281 WDA_ProcessSetBatchScanReq(pWDA,
15282 (tSirSetBatchScanReq *)pMsg->bodyptr);
15283 break;
15284 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070015285 case WDA_RATE_UPDATE_IND:
15286 {
15287 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15288 break;
15289 }
Rajeev79dbe4c2013-10-05 11:03:42 +053015290 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15291 {
15292 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15293 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15294 break;
15295 }
15296 case WDA_STOP_BATCH_SCAN_IND:
15297 {
15298 WDA_ProcessStopBatchScanInd(pWDA,
15299 (tSirStopBatchScanInd *)pMsg->bodyptr);
15300 break;
15301 }
c_hpothu92367912014-05-01 15:18:17 +053015302 case WDA_GET_BCN_MISS_RATE_REQ:
15303 WDA_ProcessGetBcnMissRateReq(pWDA,
15304 (tSirBcnMissRateReq *)pMsg->bodyptr);
15305 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015306#endif
15307
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015308 case WDA_HT40_OBSS_SCAN_IND:
15309 {
15310 WDA_ProcessHT40OBSSScanInd(pWDA,
15311 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15312 break;
15313 }
15314 case WDA_HT40_OBSS_STOP_SCAN_IND:
15315 {
15316 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15317 (tANI_U8*)pMsg->bodyptr);
15318 break;
15319 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015320// tdlsoffchan
15321#ifdef FEATURE_WLAN_TDLS
15322 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15323 {
15324 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15325 break;
15326 }
15327#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015328 case WDA_SPOOF_MAC_ADDR_REQ:
15329 {
15330 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15331 break;
15332 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015333 case WDA_ENCRYPT_MSG_REQ:
15334 {
15335 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15336 break;
15337 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015338
15339 case WDA_NAN_REQUEST:
15340 {
15341 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15342 break;
15343 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015344 case WDA_SET_RTS_CTS_HTVHT:
15345 {
15346 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15347 break;
15348 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015349
15350 case WDA_MON_START_REQ:
15351 {
15352 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15353 break;
15354 }
15355 case WDA_MON_STOP_REQ:
15356 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015357 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015358 break;
15359 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015360 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15361 {
15362 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15363 break;
15364 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015365 case WDA_WIFI_CONFIG_REQ:
15366 {
15367 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15368 break;
15369 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015370#ifdef FEATURE_OEM_DATA_SUPPORT
15371 case WDA_START_OEM_DATA_REQ_IND_NEW:
15372 {
15373 WDA_ProcessStartOemDataReqIndNew(pWDA,
15374 (tOemDataReqNewConfig *)pMsg->bodyptr);
15375 break;
15376 }
15377#endif
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +053015378 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
15379 {
15380 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
15381 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
15382 break;
15383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015384 default:
15385 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015387 "No Handling for msg type %x in WDA "
15388 ,pMsg->type);
15389 /* Do Nothing? MSG Body should be freed at here */
15390 if(NULL != pMsg->bodyptr)
15391 {
15392 vos_mem_free(pMsg->bodyptr);
15393 }
15394 //WDA_VOS_ASSERT(0) ;
15395 }
15396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015397 return status ;
15398}
15399
Jeff Johnson295189b2012-06-20 16:38:30 -070015400/*
15401 * FUNCTION: WDA_LowLevelIndCallback
15402 * IND API callback from WDI, send Ind to PE
15403 */
15404void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15405 void* pUserData )
15406{
15407 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15408#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15409 tSirRSSINotification rssiNotification;
15410#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015411 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015412 {
15413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015414 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015415 VOS_ASSERT(0);
15416 return ;
15417 }
15418
15419 switch(wdiLowLevelInd->wdiIndicationType)
15420 {
15421 case WDI_RSSI_NOTIFICATION_IND:
15422 {
15423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15424 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015425#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15426 rssiNotification.bReserved =
15427 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15428 rssiNotification.bRssiThres1NegCross =
15429 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15430 rssiNotification.bRssiThres1PosCross =
15431 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15432 rssiNotification.bRssiThres2NegCross =
15433 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15434 rssiNotification.bRssiThres2PosCross =
15435 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15436 rssiNotification.bRssiThres3NegCross =
15437 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15438 rssiNotification.bRssiThres3PosCross =
15439 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015440 rssiNotification.avgRssi = (v_S7_t)
15441 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015442 WLANTL_BMPSRSSIRegionChangedNotification(
15443 pWDA->pVosContext,
15444 &rssiNotification);
15445#endif
15446 break ;
15447 }
15448 case WDI_MISSED_BEACON_IND:
15449 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015450 tpSirSmeMissedBeaconInd pMissBeacInd =
15451 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15453 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015455 if(NULL == pMissBeacInd)
15456 {
15457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15458 "%s: VOS MEM Alloc Failure", __func__);
15459 break;
15460 }
15461 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
15462 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
15463 pMissBeacInd->bssIdx =
15464 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
15465 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015466 break ;
15467 }
15468 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
15469 {
15470 /* TODO: Decode Ind and send Ind to PE */
15471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15472 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
15473 break ;
15474 }
15475
15476 case WDI_MIC_FAILURE_IND:
15477 {
15478 tpSirSmeMicFailureInd pMicInd =
15479 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
15480
15481 if(NULL == pMicInd)
15482 {
15483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 break;
15486 }
15487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15488 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015489 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
15490 pMicInd->length = sizeof(tSirSmeMicFailureInd);
15491 vos_mem_copy(pMicInd->bssId,
15492 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
15493 sizeof(tSirMacAddr));
15494 vos_mem_copy(pMicInd->info.srcMacAddr,
15495 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
15496 sizeof(tSirMacAddr));
15497 vos_mem_copy(pMicInd->info.taMacAddr,
15498 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
15499 sizeof(tSirMacAddr));
15500 vos_mem_copy(pMicInd->info.dstMacAddr,
15501 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
15502 sizeof(tSirMacAddr));
15503 vos_mem_copy(pMicInd->info.rxMacAddr,
15504 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
15505 sizeof(tSirMacAddr));
15506 pMicInd->info.multicast =
15507 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
15508 pMicInd->info.keyId=
15509 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
15510 pMicInd->info.IV1=
15511 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
15512 vos_mem_copy(pMicInd->info.TSC,
15513 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070015514 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
15515 (void *)pMicInd , 0) ;
15516 break ;
15517 }
15518 case WDI_FATAL_ERROR_IND:
15519 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070015520 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070015521 /* TODO: Decode Ind and send Ind to PE */
15522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15523 "Received WDI_FATAL_ERROR_IND from WDI ");
15524 break ;
15525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015526 case WDI_DEL_STA_IND:
15527 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015528 tpDeleteStaContext pDelSTACtx =
15529 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
15530
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15532 "Received WDI_DEL_STA_IND from WDI ");
15533 if(NULL == pDelSTACtx)
15534 {
15535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015537 break;
15538 }
15539 vos_mem_copy(pDelSTACtx->addr2,
15540 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
15541 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015542 vos_mem_copy(pDelSTACtx->bssId,
15543 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
15544 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 pDelSTACtx->assocId =
15546 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
15547 pDelSTACtx->reasonCode =
15548 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
15549 pDelSTACtx->staId =
15550 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015551 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
15552 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015553 break ;
15554 }
15555 case WDI_COEX_IND:
15556 {
15557 tANI_U32 index;
15558 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053015559 tSirSmeCoexInd *pSmeCoexInd;
15560
15561 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
15562 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
15563 {
15564 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
15565 {
15566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15567 FL("Coex state: 0x%x coex feature: 0x%x"),
15568 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
15569 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
15570
15571 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
15572 {
15573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
15574 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
15575 }
15576 }
15577 break;
15578 }
15579
15580 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 if(NULL == pSmeCoexInd)
15582 {
15583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015584 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015585 break;
15586 }
15587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15588 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015589 /* Message Header */
15590 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
15591 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015592 /* Info from WDI Indication */
15593 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
15594 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
15595 {
15596 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
15597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 /* VOS message wrapper */
15599 vosMsg.type = eWNI_SME_COEX_IND;
15600 vosMsg.bodyptr = (void *)pSmeCoexInd;
15601 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015602 /* Send message to SME */
15603 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15604 {
15605 /* free the mem and return */
15606 vos_mem_free((v_VOID_t *)pSmeCoexInd);
15607 }
15608 else
15609 {
15610 /* DEBUG */
15611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15612 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
15613 pSmeCoexInd->coexIndType,
15614 pSmeCoexInd->coexIndData[0],
15615 pSmeCoexInd->coexIndData[1],
15616 pSmeCoexInd->coexIndData[2],
15617 pSmeCoexInd->coexIndData[3]);
15618 }
15619 break;
15620 }
15621 case WDI_TX_COMPLETE_IND:
15622 {
15623 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
15624 /* Calling TxCompleteAck Indication from wda context*/
15625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15626 "Complete Indication received from HAL");
15627 if( pWDA->pAckTxCbFunc )
15628 {
15629 if( VOS_STATUS_SUCCESS !=
15630 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15631 {
15632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15633 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015634 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053015635 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015636 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
15637 else
15638 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015639 pWDA->pAckTxCbFunc = NULL;
15640 }
15641 else
15642 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053015643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015644 "Tx Complete Indication is received after timeout ");
15645 }
15646 break;
15647 }
Viral Modid86bde22012-12-10 13:09:21 -080015648 case WDI_P2P_NOA_START_IND :
15649 {
15650 tSirP2PNoaStart *pP2pNoaStart =
15651 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
15652
15653 if (NULL == pP2pNoaStart)
15654 {
15655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15656 "Memory allocation failure, "
15657 "WDI_P2P_NOA_START_IND not forwarded");
15658 break;
15659 }
15660 pP2pNoaStart->status =
15661 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
15662 pP2pNoaStart->bssIdx =
15663 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
15664 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
15665 (void *)pP2pNoaStart , 0) ;
15666 break;
15667 }
15668
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015669#ifdef FEATURE_WLAN_TDLS
15670 case WDI_TDLS_IND :
15671 {
15672 tSirTdlsInd *pTdlsInd =
15673 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
15674
15675 if (NULL == pTdlsInd)
15676 {
15677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15678 "Memory allocation failure, "
15679 "WDI_TDLS_IND not forwarded");
15680 break;
15681 }
15682 pTdlsInd->status =
15683 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
15684 pTdlsInd->assocId =
15685 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
15686 pTdlsInd->staIdx =
15687 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
15688 pTdlsInd->reasonCode =
15689 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
15690 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
15691 (void *)pTdlsInd , 0) ;
15692 break;
15693 }
15694#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015695 case WDI_P2P_NOA_ATTR_IND :
15696 {
15697 tSirP2PNoaAttr *pP2pNoaAttr =
15698 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15700 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015701 if (NULL == pP2pNoaAttr)
15702 {
15703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15704 "Memory allocation failure, "
15705 "WDI_P2P_NOA_ATTR_IND not forwarded");
15706 break;
15707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015708 pP2pNoaAttr->index =
15709 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
15710 pP2pNoaAttr->oppPsFlag =
15711 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
15712 pP2pNoaAttr->ctWin =
15713 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
15714
15715 pP2pNoaAttr->uNoa1IntervalCnt =
15716 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
15717 pP2pNoaAttr->uNoa1Duration =
15718 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
15719 pP2pNoaAttr->uNoa1Interval =
15720 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
15721 pP2pNoaAttr->uNoa1StartTime =
15722 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 pP2pNoaAttr->uNoa2IntervalCnt =
15724 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
15725 pP2pNoaAttr->uNoa2Duration =
15726 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
15727 pP2pNoaAttr->uNoa2Interval =
15728 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
15729 pP2pNoaAttr->uNoa2StartTime =
15730 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015731 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
15732 (void *)pP2pNoaAttr , 0) ;
15733 break;
15734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015735#ifdef FEATURE_WLAN_SCAN_PNO
15736 case WDI_PREF_NETWORK_FOUND_IND:
15737 {
15738 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015739 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
15740 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15741 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
15742 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
15743
Jeff Johnson295189b2012-06-20 16:38:30 -070015744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15745 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015746 if (NULL == pPrefNetworkFoundInd)
15747 {
15748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15749 "Memory allocation failure, "
15750 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053015751 if (NULL !=
15752 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15753 {
15754 wpalMemoryFree(
15755 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
15756 );
15757 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015759 break;
15760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015761 /* Message Header */
15762 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015763 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070015764
15765 /* Info from WDI Indication */
15766 pPrefNetworkFoundInd->ssId.length =
15767 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070015768 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070015769 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
15770 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
15771 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070015772 if (NULL !=
15773 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15774 {
15775 pPrefNetworkFoundInd->frameLength =
15776 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15777 vos_mem_copy( pPrefNetworkFoundInd->data,
15778 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
15779 pPrefNetworkFoundInd->frameLength);
15780 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
15781 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15782 }
15783 else
15784 {
15785 pPrefNetworkFoundInd->frameLength = 0;
15786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015787 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 /* VOS message wrapper */
15789 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
15790 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
15791 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 /* Send message to SME */
15793 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15794 {
15795 /* free the mem and return */
15796 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
15797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 break;
15799 }
15800#endif // FEATURE_WLAN_SCAN_PNO
15801
15802#ifdef WLAN_WAKEUP_EVENTS
15803 case WDI_WAKE_REASON_IND:
15804 {
15805 vos_msg_t vosMsg;
15806 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15807 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15808 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15809
15810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015811 "[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 -070015812 wdiLowLevelInd->wdiIndicationType,
15813 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15814 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15815 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15816
15817 if (NULL == pWakeReasonInd)
15818 {
15819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15820 "Memory allocation failure, "
15821 "WDI_WAKE_REASON_IND not forwarded");
15822 break;
15823 }
15824
15825 vos_mem_zero(pWakeReasonInd, allocSize);
15826
15827 /* Message Header */
15828 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15829 pWakeReasonInd->mesgLen = allocSize;
15830
15831 /* Info from WDI Indication */
15832 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15833 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15834 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15835 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15836 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15837 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15838 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15839 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15840
15841 /* VOS message wrapper */
15842 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15843 vosMsg.bodyptr = (void *) pWakeReasonInd;
15844 vosMsg.bodyval = 0;
15845
15846 /* Send message to SME */
15847 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15848 {
15849 /* free the mem and return */
15850 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15851 }
15852
15853 break;
15854 }
15855#endif // WLAN_WAKEUP_EVENTS
15856
15857 case WDI_TX_PER_HIT_IND:
15858 {
15859 vos_msg_t vosMsg;
15860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15861 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15862 /* VOS message wrapper */
15863 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15864 vosMsg.bodyptr = NULL;
15865 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 /* Send message to SME */
15867 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15868 {
15869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15870 }
15871 break;
15872 }
15873
Leo Chang9056f462013-08-01 19:21:11 -070015874#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015875 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015876 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015877 vos_msg_t vosMsg;
15878 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015879
Leo Changd9df8aa2013-09-26 13:32:26 -070015880 lphbInd =
15881 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15882 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015883 {
15884 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15885 "%s: LPHB IND buffer alloc Fail", __func__);
15886 return ;
15887 }
15888
Leo Changd9df8aa2013-09-26 13:32:26 -070015889 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015890 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015891 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015892 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015893 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015894 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15895
15896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015897 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015898 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15899
Leo Changd9df8aa2013-09-26 13:32:26 -070015900 vosMsg.type = eWNI_SME_LPHB_IND;
15901 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015902 vosMsg.bodyval = 0;
15903 /* Send message to SME */
15904 if (VOS_STATUS_SUCCESS !=
15905 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15906 {
15907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15908 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015909 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015910 }
15911 break;
15912 }
15913#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015914 case WDI_PERIODIC_TX_PTRN_FW_IND:
15915 {
15916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15917 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15918 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15919 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15920 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15921 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15922 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15923
15924 break;
15925 }
Leo Chang9056f462013-08-01 19:21:11 -070015926
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015927 case WDI_IBSS_PEER_INACTIVITY_IND:
15928 {
15929 tSirIbssPeerInactivityInd *pIbssInd =
15930 (tSirIbssPeerInactivityInd *)
15931 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15932
15933 if (NULL == pIbssInd)
15934 {
15935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15936 "Memory allocation failure, "
15937 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15938 break;
15939 }
15940
15941 pIbssInd->bssIdx =
15942 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15943 pIbssInd->staIdx =
15944 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15945 vos_mem_copy(pIbssInd->peerAddr,
15946 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15947 sizeof(tSirMacAddr));
15948 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15949 break;
15950 }
15951
Rajeev79dbe4c2013-10-05 11:03:42 +053015952#ifdef FEATURE_WLAN_BATCH_SCAN
15953 case WDI_BATCH_SCAN_RESULT_IND:
15954 {
15955 void *pBatchScanResult;
15956 void *pCallbackContext;
15957 tpAniSirGlobal pMac;
15958
15959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15960 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15961
15962 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015963 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015964 {
15965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15966 "%s:pWDA is NULL", __func__);
15967 VOS_ASSERT(0);
15968 return;
15969 }
15970
15971 pBatchScanResult =
15972 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15973 if (NULL == pBatchScanResult)
15974 {
15975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15976 "%s:Batch scan result from FW is null can't invoke HDD callback",
15977 __func__);
15978 VOS_ASSERT(0);
15979 return;
15980 }
15981
15982 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15983 if (NULL == pMac)
15984 {
15985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15986 "%s:pMac is NULL", __func__);
15987 VOS_ASSERT(0);
15988 return;
15989 }
15990
15991 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
15992 /*call hdd callback with set batch scan response data*/
15993 if(pMac->pmc.batchScanResultCallback)
15994 {
15995 pMac->pmc.batchScanResultCallback(pCallbackContext,
15996 pBatchScanResult);
15997 }
15998 else
15999 {
16000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16001 "%s:HDD callback is null", __func__);
16002 VOS_ASSERT(0);
16003 }
16004 break;
16005 }
16006#endif
16007
Leo Chang0b0e45a2013-12-15 15:18:55 -080016008#ifdef FEATURE_WLAN_CH_AVOID
16009 case WDI_CH_AVOID_IND:
16010 {
16011 vos_msg_t vosMsg;
16012 tSirChAvoidIndType *chAvoidInd;
16013
16014 chAvoidInd =
16015 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16016 if (NULL == chAvoidInd)
16017 {
16018 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16019 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16020 return ;
16021 }
16022
16023 chAvoidInd->avoidRangeCount =
16024 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16025 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16026 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16027 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16028
16029 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16030 "%s : WDA CH avoid notification", __func__);
16031
16032 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16033 vosMsg.bodyptr = chAvoidInd;
16034 vosMsg.bodyval = 0;
16035 /* Send message to SME */
16036 if (VOS_STATUS_SUCCESS !=
16037 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16038 {
16039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16040 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16041 vos_mem_free(chAvoidInd);
16042 }
16043 break;
16044 }
16045#endif /* FEATURE_WLAN_CH_AVOID */
16046
Sunil Duttbd736ed2014-05-26 21:19:41 +053016047#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16048 case WDI_LL_STATS_RESULTS_IND:
16049 {
16050 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016051 tpAniSirGlobal pMac;
16052
16053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16054 "Received WDI_LL_STATS_RESULTS_IND from FW");
16055
16056 /*sanity check*/
16057 if (NULL == pWDA)
16058 {
16059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16060 "%s:pWDA is NULL", __func__);
16061 VOS_ASSERT(0);
16062 return;
16063 }
16064
16065 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016066 (void *)wdiLowLevelInd->
16067 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016068 if (NULL == pLinkLayerStatsInd)
16069 {
16070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16071 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16072 __func__);
16073 VOS_ASSERT(0);
16074 return;
16075 }
16076
16077 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16078 if (NULL == pMac)
16079 {
16080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16081 "%s:pMac is NULL", __func__);
16082 VOS_ASSERT(0);
16083 return;
16084 }
16085
Dino Mycled3d50022014-07-07 12:58:25 +053016086 /* call hdd callback with Link Layer Statistics.
16087 * vdev_id/ifacId in link_stats_results will be
16088 * used to retrieve the correct HDD context
16089 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016090 if (pMac->sme.pLinkLayerStatsIndCallback)
16091 {
Dino Mycled3d50022014-07-07 12:58:25 +053016092 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016093 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016094 pLinkLayerStatsInd,
16095 wdiLowLevelInd->
16096 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016097 }
16098 else
16099 {
16100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16101 "%s:HDD callback is null", __func__);
16102 }
16103 break;
16104 }
16105#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16106
Dino Mycle41bdc942014-06-10 11:30:24 +053016107#ifdef WLAN_FEATURE_EXTSCAN
16108 case WDI_EXTSCAN_PROGRESS_IND:
16109 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16110 case WDI_EXTSCAN_SCAN_RESULT_IND:
16111 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016112 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016113 {
16114 void *pEXTScanData;
16115 void *pCallbackContext;
16116 tpAniSirGlobal pMac;
16117 tANI_U16 indType;
16118
16119 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16120 "Received WDI_EXTSCAN Indications from FW");
16121 /*sanity check*/
16122 if (NULL == pWDA)
16123 {
16124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16125 "%s:pWDA is NULL", __func__);
16126 VOS_ASSERT(0);
16127 return;
16128 }
16129 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16130 {
16131 indType = WDA_EXTSCAN_PROGRESS_IND;
16132
16133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16134 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16135 }
16136 if (wdiLowLevelInd->wdiIndicationType ==
16137 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16138 {
16139 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16140
16141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16142 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16143 }
16144 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16145 {
16146 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16147
16148 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16149 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16150 }
16151 if (wdiLowLevelInd->wdiIndicationType ==
16152 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16153 {
16154 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16155
16156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16157 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16158 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016159 if (wdiLowLevelInd->wdiIndicationType ==
16160 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16161 {
16162 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16163
16164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16165 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16166 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016167
16168 pEXTScanData =
16169 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16170 if (NULL == pEXTScanData)
16171 {
16172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16173 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16174 __func__);
16175 VOS_ASSERT(0);
16176 return;
16177 }
16178
16179 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16180 if (NULL == pMac)
16181 {
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16183 "%s:pMac is NULL", __func__);
16184 VOS_ASSERT(0);
16185 return;
16186 }
16187
16188 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16189
16190 if(pMac->sme.pEXTScanIndCb)
16191 {
16192 pMac->sme.pEXTScanIndCb(pCallbackContext,
16193 indType,
16194 pEXTScanData);
16195 }
16196 else
16197 {
16198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16199 "%s:HDD callback is null", __func__);
16200 }
16201 break;
16202 }
16203#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016204 case WDI_DEL_BA_IND:
16205 {
16206 tpBADeleteParams pDelBAInd =
16207 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
16208
16209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16210 "Received WDI_DEL_BA_IND from WDI ");
16211 if(NULL == pDelBAInd)
16212 {
16213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16214 "%s: VOS MEM Alloc Failure", __func__);
16215 break;
16216 }
16217 vos_mem_copy(pDelBAInd->peerMacAddr,
16218 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16219 sizeof(tSirMacAddr));
16220 vos_mem_copy(pDelBAInd->bssId,
16221 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16222 sizeof(tSirMacAddr));
16223 pDelBAInd->staIdx =
16224 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16225 pDelBAInd->baTID =
16226 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16227 pDelBAInd->baDirection =
16228 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16229 pDelBAInd->reasonCode =
16230 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16231
16232 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16233 (void *)pDelBAInd , 0) ;
16234 break;
16235 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016236 case WDI_NAN_EVENT_IND:
16237 {
16238 vos_msg_t vosMsg;
16239 tpSirNanEvent pSirNanEvent = NULL;
16240
16241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16242 "Received WDI_NAN_EVENT");
16243
16244 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16245 - sizeof( pSirNanEvent->event_data)
16246 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16247
16248 if (NULL == pSirNanEvent)
16249 {
16250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16251 "%s: VOS MEM Alloc Failure", __func__);
16252 VOS_ASSERT(0) ;
16253 break;
16254 }
16255
16256 pSirNanEvent->event_data_len =
16257 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16258
16259 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16260 {
16261 vos_mem_copy( pSirNanEvent->event_data,
16262 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16263 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16264 }
16265
16266 /* VOS message wrapper */
16267 vosMsg.type = eWNI_SME_NAN_EVENT;
16268 vosMsg.bodyptr = pSirNanEvent;
16269 vosMsg.bodyval = 0;
16270
16271 /* Send message to SME */
16272 if (VOS_STATUS_SUCCESS
16273 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16274 {
16275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16276 "post eWNI_SME_NAN_EVENT to SME Failed");
16277 vos_mem_free(pSirNanEvent);
16278 }
16279 break;
16280 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016281 case WDI_LOST_LINK_PARAMS_IND:
16282 {
16283 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16284 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016285
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016286 if (NULL == pLostLinkParamInd)
16287 {
16288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16289 "%s: VOS MEM Alloc Failure", __func__);
16290 break;
16291 }
16292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16293 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16294
16295 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16296 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16297 pLostLinkParamInd->info.bssIdx =
16298 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16299 pLostLinkParamInd->info.rssi =
16300 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16301 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16302 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16303 sizeof(tSirMacAddr));
16304 pLostLinkParamInd->info.linkFlCnt =
16305 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16306 pLostLinkParamInd->info.linkFlTx =
16307 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16308 pLostLinkParamInd->info.lastDataRate =
16309 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16310 pLostLinkParamInd->info.rsvd1 =
16311 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16312 pLostLinkParamInd->info.rsvd2 =
16313 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16314 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16315 (void *)pLostLinkParamInd , 0) ;
16316 break;
16317 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016318 case WDI_RSSI_BREACHED_IND:
16319 {
16320 WDI_RssiBreachedIndType *pRssiBreachedInd;
16321 tpAniSirGlobal pMac;
16322
16323 pRssiBreachedInd =
16324 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16326 "Received WDI_RSSI_BREACHED_IND from FW");
16327
16328 vos_mem_copy(pRssiBreachedInd,
16329 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16330 sizeof(WDI_RssiBreachedIndType));
16331
16332 /*sanity check*/
16333 if (NULL == pWDA)
16334 {
16335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16336 "%s:pWDA is NULL", __func__);
16337 vos_mem_free(pRssiBreachedInd);
16338 VOS_ASSERT(0);
16339 return;
16340 }
16341
16342 if (NULL == pRssiBreachedInd)
16343 {
16344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16345 "%s:Breach indication from FW is null can't invoke HDD callback",
16346 __func__);
16347 VOS_ASSERT(0);
16348 return;
16349 }
16350
16351 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16352 if (NULL == pMac)
16353 {
16354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16355 "%s:pMac is NULL", __func__);
16356 VOS_ASSERT(0);
16357 vos_mem_free(pRssiBreachedInd);
16358 return;
16359 }
16360
16361 if (pMac->sme.rssiThresholdBreachedCb)
16362 {
16363 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16364 }
16365 else
16366 {
16367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16368 "%s:HDD callback is null", __func__);
16369 }
16370 vos_mem_free(pRssiBreachedInd);
16371 break;
16372 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016373#ifdef FEATURE_OEM_DATA_SUPPORT
16374 case WDI_START_OEM_DATA_RSP_IND_NEW:
16375 {
16376 void *pCallbackContext;
16377 tpAniSirGlobal pMac;
16378 tANI_U16 indType;
16379 void *pOemRspNewIndData;
16380
16381 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16382 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
16383
16384 /*sanity check*/
16385 if (NULL == pWDA)
16386 {
16387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16388 "%s:pWDA is NULL", __func__);
16389 VOS_ASSERT(0);
16390 return;
16391 }
16392
16393 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
16394 pOemRspNewIndData =
16395 (void *)wdiLowLevelInd->wdiIndicationData.pOemRspNewIndData;
16396 if (NULL == pOemRspNewIndData)
16397 {
16398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16399 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
16400 __func__);
16401 VOS_ASSERT(0);
16402 return;
16403 }
16404
16405 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16406 if (NULL == pMac)
16407 {
16408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16409 "%s:pMac is NULL", __func__);
16410 VOS_ASSERT(0);
16411 return;
16412 }
16413
16414 pCallbackContext = pMac->sme.pOemDataCallbackContext;
16415
16416 if(pMac->sme.pOemDataIndCb)
16417 {
16418 pMac->sme.pOemDataIndCb(pCallbackContext,
16419 indType,
16420 pOemRspNewIndData);
16421 }
16422 else
16423 {
16424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16425 "%s:HDD callback is null", __func__);
16426 }
16427 break;
16428 }
16429#endif /* FEATURE_OEM_DATA_SUPPORT */
16430
Jeff Johnson295189b2012-06-20 16:38:30 -070016431 default:
16432 {
16433 /* TODO error */
16434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16435 "Received UNKNOWN Indication from WDI ");
16436 }
16437 }
16438 return ;
16439}
16440
Jeff Johnson295189b2012-06-20 16:38:30 -070016441/*
16442 * BA related processing in WDA.
16443 */
Jeff Johnson295189b2012-06-20 16:38:30 -070016444void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
16445 void* pUserData)
16446{
16447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16448 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070016449 if(NULL == pWdaParams)
16450 {
16451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016452 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016453 VOS_ASSERT(0) ;
16454 return ;
16455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070016457 vos_mem_free(pWdaParams->wdaMsgParam) ;
16458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16459 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016461 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016462 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
16463 {
16464 tANI_U8 i = 0 ;
16465 tBaActivityInd *baActivityInd = NULL ;
16466 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
16467 tANI_U8 allocSize = sizeof(tBaActivityInd)
16468 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
16469 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
16470 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016471 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016472 if(NULL == baActivityInd)
16473 {
16474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016475 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016476 VOS_ASSERT(0) ;
16477 return;
16478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016479 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
16480 sizeof(tSirMacAddr)) ;
16481 baActivityInd->baCandidateCnt = baCandidateCount ;
16482
16483 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
16484 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
16485
16486 for(i = 0 ; i < baCandidateCount ; i++)
16487 {
16488 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016489 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
16490 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016491 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
16492 {
16493 baCandidate->baInfo[tid].fBaEnable =
16494 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
16495 baCandidate->baInfo[tid].startingSeqNum =
16496 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
16497 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016498 wdiBaCandidate++ ;
16499 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016501 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
16502 }
16503 else
16504 {
16505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16506 "BA Trigger RSP with Failure received ");
16507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016508 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016509}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016510
16511
16512/*
16513 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
16514 * during MCC
16515 */
16516void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
16517{
16518 wpt_uint32 enabled;
16519 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
16520 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
16521 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
16522
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016523 if (NULL == pMac )
16524 {
16525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16526 "%s: Invoked with invalid MAC context ", __func__ );
16527 VOS_ASSERT(0);
16528 return;
16529 }
16530
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016531 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16532 != eSIR_SUCCESS)
16533 {
16534 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16535 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16536 return;
16537 }
16538
16539 if(!enabled)
16540 {
16541 return;
16542 }
16543
16544 if(NULL == pWDA)
16545 {
16546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16547 "%s:WDA context is NULL", __func__);
16548 VOS_ASSERT(0);
16549 return;
16550 }
16551
16552 if(activate)
16553 {
16554 if( VOS_STATUS_SUCCESS !=
16555 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16556 {
16557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16558 "Traffic Stats Timer Start Failed ");
16559 return;
16560 }
16561 WDI_DS_ActivateTrafficStats();
16562 }
16563 else
16564 {
16565 WDI_DS_DeactivateTrafficStats();
16566 WDI_DS_ClearTrafficStats();
16567
16568 if( VOS_STATUS_SUCCESS !=
16569 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16570 {
16571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16572 "Traffic Stats Timer Stop Failed ");
16573 return;
16574 }
16575 }
16576}
16577
16578/*
16579 * Traffic Stats Timer handler
16580 */
16581void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
16582{
16583 WDI_Status wdiStatus;
16584 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
16585 WDI_TrafficStatsIndType trafficStatsIndParams;
16586 wpt_uint32 length, enabled;
16587 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16588
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016589 if (NULL == pMac )
16590 {
16591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16592 "%s: Invoked with invalid MAC context ", __func__ );
16593 VOS_ASSERT(0);
16594 return;
16595 }
16596
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016597 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16598 != eSIR_SUCCESS)
16599 {
16600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16601 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16602 return;
16603 }
16604
16605 if(!enabled)
16606 {
16607 WDI_DS_DeactivateTrafficStats();
16608 return;
16609 }
16610
16611 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
16612
16613 if(pWdiTrafficStats != NULL)
16614 {
16615 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
16616 trafficStatsIndParams.length = length;
16617 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080016618 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016619 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
16620 trafficStatsIndParams.pUserData = pWDA;
16621
16622 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
16623
16624 if(WDI_STATUS_PENDING == wdiStatus)
16625 {
16626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16627 "Pending received for %s:%d ",__func__,__LINE__ );
16628 }
16629 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
16630 {
16631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16632 "Failure in %s:%d ",__func__,__LINE__ );
16633 }
16634
16635 WDI_DS_ClearTrafficStats();
16636 }
16637 else
16638 {
16639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16640 "pWdiTrafficStats is Null");
16641 }
16642
16643 if( VOS_STATUS_SUCCESS !=
16644 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16645 {
16646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16647 "Traffic Stats Timer Start Failed ");
16648 return;
16649 }
16650}
16651
Jeff Johnson295189b2012-06-20 16:38:30 -070016652/*
16653 * BA Activity check timer handler
16654 */
16655void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
16656{
16657 tANI_U8 curSta = 0 ;
16658 tANI_U8 tid = 0 ;
16659 tANI_U8 size = 0 ;
16660 tANI_U8 baCandidateCount = 0 ;
16661 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016662 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070016663 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016664 tpAniSirGlobal pMac;
16665
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016666 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016667 {
16668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016669 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016670 VOS_ASSERT(0);
16671 return ;
16672 }
16673 if(WDA_MAX_STA < pWDA->wdaMaxSta)
16674 {
16675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16676 "Inconsistent STA entries in WDA");
16677 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016678 }
16679 if(NULL == pWDA->pVosContext)
16680 {
16681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16682 "%s: pVosContext is NULL",__func__);
16683 VOS_ASSERT(0);
16684 return ;
16685 }
16686 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053016687 if(NULL == pMac)
16688 {
16689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16690 "%s: pMac is NULL",__func__);
16691 VOS_ASSERT(0);
16692 return ;
16693 }
16694
Abhishek Singh0644e482014-10-06 18:38:23 +053016695 if (wlan_cfgGetInt(pMac,
16696 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
16697 eSIR_SUCCESS)
16698 {
16699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16700 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
16701 val = 0;
16702 }
16703
Jeff Johnson295189b2012-06-20 16:38:30 -070016704 /* walk through all STA entries and find out TX packet count */
16705 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
16706 {
Abhishek Singh0644e482014-10-06 18:38:23 +053016707 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016708#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016709 // We can only do BA on "hard" STAs.
16710 if (!(IS_HWSTA_IDX(curSta)))
16711 {
16712 continue;
16713 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016714#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016715 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
16716 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016717 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 tANI_U32 txPktCount = 0 ;
16719 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016720 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016721 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
16722 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070016723 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
16724 curSta, tid, &txPktCount)))
16725 {
16726#if 0
16727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16728 "************* %d:%d, %d ",curSta, txPktCount,
16729 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
16730#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053016731 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
16732 (currentOperChan <= SIR_11B_CHANNEL_END)))
16733 {
16734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16735 "%s: BTC disabled aggregation - dont start "
16736 "TX ADDBA req",__func__);
16737 }
16738 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016739 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053016740 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
16741 pWDA->wdaGlobalSystemRole) && txPktCount )
16742 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
16743 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070016744 {
16745 /* get prepare for sending message to HAL */
16746 //baCandidate[baCandidateCount].staIdx = curSta ;
16747 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
16748 newBaCandidate = WDA_ENABLE_BA ;
16749 }
16750 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
16751 }
16752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016753 /* fill the entry for all the sta with given TID's */
16754 if(WDA_ENABLE_BA == newBaCandidate)
16755 {
16756 /* move to next BA candidate */
16757 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
16758 size += sizeof(WDI_TriggerBAReqCandidateType) ;
16759 baCandidateCount++ ;
16760 newBaCandidate = WDA_DISABLE_BA ;
16761 }
16762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016763 /* prepare and send message to hal */
16764 if( 0 < baCandidateCount)
16765 {
16766 WDI_Status status = WDI_STATUS_SUCCESS ;
16767 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
16768 tWDA_ReqParams *pWdaParams =
16769 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016770 if(NULL == pWdaParams)
16771 {
16772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016774 VOS_ASSERT(0) ;
16775 return;
16776 }
16777 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
16778 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
16779 if(NULL == wdiTriggerBaReq)
16780 {
16781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016783 VOS_ASSERT(0) ;
16784 vos_mem_free(pWdaParams);
16785 return;
16786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016787 do
16788 {
16789 WDI_TriggerBAReqinfoType *triggerBaInfo =
16790 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
16791 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
16792 /* TEMP_FIX: Need to see if WDI need check for assoc session for
16793 * for each request */
16794 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
16795 triggerBaInfo->ucBASessionID = 0;
16796 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
16797 } while(0) ;
16798 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016800 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016801 pWdaParams->pWdaContext = pWDA;
16802 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
16803 pWdaParams->wdaMsgParam = NULL;
16804 status = WDI_TriggerBAReq(wdiTriggerBaReq,
16805 WDA_TriggerBaReqCallback, pWdaParams) ;
16806 if(IS_WDI_STATUS_FAILURE(status))
16807 {
16808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16809 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
16810 vos_mem_free(pWdaParams->wdaMsgParam) ;
16811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16812 vos_mem_free(pWdaParams) ;
16813 }
16814 }
16815 else
16816 {
16817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16818 "There is no TID for initiating BA");
16819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 if( VOS_STATUS_SUCCESS !=
16821 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16822 {
16823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16824 "BA Activity Timer Stop Failed ");
16825 return ;
16826 }
16827 if( VOS_STATUS_SUCCESS !=
16828 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16829 {
16830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16831 "BA Activity Timer Start Failed ");
16832 return;
16833 }
16834 return ;
16835}
Jeff Johnson295189b2012-06-20 16:38:30 -070016836/*
16837 * WDA common routine to create timer used by WDA.
16838 */
16839static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
16840{
Jeff Johnson295189b2012-06-20 16:38:30 -070016841 VOS_STATUS status = VOS_STATUS_SUCCESS ;
16842 tANI_U32 val = 0 ;
16843 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16844
16845 if(NULL == pMac)
16846 {
16847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016848 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016849 VOS_ASSERT(0);
16850 return VOS_STATUS_E_FAILURE;
16851 }
16852 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
16853 != eSIR_SUCCESS)
16854 {
16855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16856 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
16857 return VOS_STATUS_E_FAILURE;
16858 }
16859 val = SYS_MS_TO_TICKS(val) ;
16860
16861 /* BA activity check timer */
16862 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
16863 "BA Activity Check timer", WDA_TimerHandler,
16864 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
16865 if(status != TX_SUCCESS)
16866 {
16867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16868 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016869 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016870 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016871 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016872 /* Tx Complete Timeout timer */
16873 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
16874 "Tx Complete Check timer", WDA_TimerHandler,
16875 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016876 if(status != TX_SUCCESS)
16877 {
16878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16879 "Unable to create Tx Complete Timeout timer");
16880 /* Destroy timer of BA activity check timer */
16881 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16882 if(status != TX_SUCCESS)
16883 {
16884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16885 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016886 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016887 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016888 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016889 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016890
16891 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
16892
16893 /* Traffic Stats timer */
16894 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
16895 "Traffic Stats timer", WDA_TimerHandler,
16896 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
16897 if(status != TX_SUCCESS)
16898 {
16899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16900 "Unable to create traffic stats timer");
16901 /* Destroy timer of BA activity check timer */
16902 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16903 if(status != TX_SUCCESS)
16904 {
16905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16906 "Unable to Destroy BA activity timer");
16907 }
16908 /* Destroy timer of tx complete timer */
16909 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16910 if(status != TX_SUCCESS)
16911 {
16912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16913 "Unable to Tx complete timer");
16914 }
16915 return VOS_STATUS_E_FAILURE ;
16916 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016917 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016918}
Jeff Johnson295189b2012-06-20 16:38:30 -070016919/*
16920 * WDA common routine to destroy timer used by WDA.
16921 */
16922static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16923{
16924 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016925 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16926 if(status != TX_SUCCESS)
16927 {
16928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16929 "Unable to Destroy Tx Complete Timeout timer");
16930 return eSIR_FAILURE ;
16931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016932 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16933 if(status != TX_SUCCESS)
16934 {
16935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16936 "Unable to Destroy BA activity timer");
16937 return eSIR_FAILURE ;
16938 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016939 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16940 if(status != TX_SUCCESS)
16941 {
16942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16943 "Unable to Destroy traffic stats timer");
16944 return eSIR_FAILURE ;
16945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016946 return eSIR_SUCCESS ;
16947}
Jeff Johnson295189b2012-06-20 16:38:30 -070016948/*
16949 * WDA timer handler.
16950 */
16951void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16952{
16953 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16954 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016955 /*
16956 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16957 */
16958 wdaMsg.type = timerInfo ;
16959 wdaMsg.bodyptr = NULL;
16960 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016961 /* post the message.. */
16962 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16963 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16964 {
16965 vosStatus = VOS_STATUS_E_BADMSG;
16966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016967}
Jeff Johnson295189b2012-06-20 16:38:30 -070016968/*
16969 * WDA Tx Complete timeout Indication.
16970 */
16971void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
16972{
16973 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016974 tpSirTxBdStatus txBdStatus = {0};
16975
Jeff Johnson295189b2012-06-20 16:38:30 -070016976 if( pWDA->pAckTxCbFunc )
16977 {
16978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016979 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016980 /*Indicate failure*/
16981 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016982 pWDA->pAckTxCbFunc = NULL;
16983 }
16984 else
16985 {
16986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016987 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070016988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016989}
Jeff Johnson295189b2012-06-20 16:38:30 -070016990/*
16991 * WDA Set REG Domain to VOS NV
16992 */
Abhishek Singha306a442013-11-07 18:39:01 +053016993eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
16994 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070016995{
Abhishek Singha306a442013-11-07 18:39:01 +053016996 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070016997 {
16998 return eHAL_STATUS_INVALID_PARAMETER;
16999 }
17000 return eHAL_STATUS_SUCCESS;
17001}
Jeff Johnson295189b2012-06-20 16:38:30 -070017002
Jeff Johnson295189b2012-06-20 16:38:30 -070017003#ifdef FEATURE_WLAN_SCAN_PNO
17004/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017005 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017006 *
17007 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017008void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017009{
17010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017011 tSirPNOScanReq *pPNOScanReqParams;
17012
Jeff Johnson295189b2012-06-20 16:38:30 -070017013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017014 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017015 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017016 {
17017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017018 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017019 VOS_ASSERT(0) ;
17020 return ;
17021 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017022
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017023 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17024 if(pPNOScanReqParams->statusCallback)
17025 {
17026 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17027 (status == WDI_STATUS_SUCCESS) ?
17028 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17029 }
17030
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017031 if (pPNOScanReqParams->enable == 1)
17032 {
17033 if (pPNOScanReqParams->aNetworks)
17034 vos_mem_free(pPNOScanReqParams->aNetworks);
17035 if (pPNOScanReqParams->p24GProbeTemplate)
17036 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17037 if (pPNOScanReqParams->p5GProbeTemplate)
17038 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17039 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17041 vos_mem_free(pWdaParams->wdaMsgParam);
17042 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017043
17044 return ;
17045}
Jeff Johnson295189b2012-06-20 16:38:30 -070017046/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017047 * FUNCTION: WDA_PNOScanReqCallback
17048 * Free memory.
17049 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17050 */
17051void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017052{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017054 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017055
17056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17057 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17058
17059 if(NULL == pWdaParams)
17060 {
17061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17062 "%s: pWdaParams received NULL", __func__);
17063 VOS_ASSERT(0);
17064 return;
17065 }
17066
17067 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17068 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017069 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17070 if(pPNOScanReqParams->statusCallback)
17071 {
17072 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17073 VOS_STATUS_E_FAILURE);
17074 }
17075
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017076 if (pPNOScanReqParams->enable == 1)
17077 {
17078 if (pPNOScanReqParams->aNetworks)
17079 vos_mem_free(pPNOScanReqParams->aNetworks);
17080 if (pPNOScanReqParams->p24GProbeTemplate)
17081 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17082 if (pPNOScanReqParams->p5GProbeTemplate)
17083 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17084 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17086 vos_mem_free(pWdaParams->wdaMsgParam);
17087 vos_mem_free(pWdaParams);
17088 }
17089
17090 return;
17091}
17092/*
17093 * FUNCTION: WDA_UpdateScanParamsRespCallback
17094 *
17095 */
17096void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17097{
17098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017100 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017101 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017102 {
17103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017105 VOS_ASSERT(0) ;
17106 return ;
17107 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017108
17109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17110 vos_mem_free(pWdaParams->wdaMsgParam);
17111 vos_mem_free(pWdaParams);
17112
Jeff Johnson295189b2012-06-20 16:38:30 -070017113 return ;
17114}
Jeff Johnson295189b2012-06-20 16:38:30 -070017115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017116 * FUNCTION: WDA_UpdateScanParamsReqCallback
17117 * Free memory.
17118 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17119 */
17120void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17121{
17122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17123
17124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17125 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17126
17127 if(NULL == pWdaParams)
17128 {
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17130 "%s: pWdaParams received NULL", __func__);
17131 VOS_ASSERT(0);
17132 return;
17133 }
17134
17135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17136 {
17137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17138 vos_mem_free(pWdaParams->wdaMsgParam);
17139 vos_mem_free(pWdaParams);
17140 }
17141
17142 return;
17143}
17144/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017145 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17146 * Request to WDI to set Preferred Network List.Offload
17147 */
17148VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17149 tSirPNOScanReq *pPNOScanReqParams)
17150{
Jeff Johnson43971f52012-07-17 12:26:56 -070017151 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017152 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17153 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17154 tWDA_ReqParams *pWdaParams ;
17155 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017157 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017158 if(NULL == pwdiPNOScanReqInfo)
17159 {
17160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017161 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017162 VOS_ASSERT(0);
17163 return VOS_STATUS_E_NOMEM;
17164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017165 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17166 if(NULL == pWdaParams)
17167 {
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017169 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017170 VOS_ASSERT(0);
17171 vos_mem_free(pwdiPNOScanReqInfo);
17172 return VOS_STATUS_E_NOMEM;
17173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017174 //
17175 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17176 //
17177 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17178 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017179 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17180 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17181 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017182 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17183 {
17184 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17185 &pPNOScanReqParams->aNetworks[i],
17186 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017188 /*Scan timer intervals*/
17189 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17190 &pPNOScanReqParams->scanTimers,
17191 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017192 /*Probe template for 2.4GHz band*/
17193 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17194 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17195 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017196 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17197 pPNOScanReqParams->p24GProbeTemplate,
17198 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017199 /*Probe template for 5GHz band*/
17200 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17201 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17202 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017203 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17204 pPNOScanReqParams->p5GProbeTemplate,
17205 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017206 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17207 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017208
Jeff Johnson295189b2012-06-20 16:38:30 -070017209 /* Store Params pass it to WDI */
17210 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17211 pWdaParams->pWdaContext = pWDA;
17212 /* Store param pointer as passed in by caller */
17213 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017214 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017215 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017216 if(IS_WDI_STATUS_FAILURE(status))
17217 {
17218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17219 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017220 if(pPNOScanReqParams->statusCallback)
17221 {
17222 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17223 VOS_STATUS_E_FAILURE);
17224 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017225 if (pPNOScanReqParams->enable == 1)
17226 {
17227 if (pPNOScanReqParams->aNetworks)
17228 vos_mem_free(pPNOScanReqParams->aNetworks);
17229 if (pPNOScanReqParams->p24GProbeTemplate)
17230 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17231 if (pPNOScanReqParams->p5GProbeTemplate)
17232 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17235 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017236
Jeff Johnson295189b2012-06-20 16:38:30 -070017237 pWdaParams->wdaWdiApiMsgParam = NULL;
17238 pWdaParams->wdaMsgParam = NULL;
17239 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017240 return CONVERT_WDI2VOS_STATUS(status) ;
17241}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017242
17243#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17244
17245void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17246{
17247 /*Convert the CSR Auth types to WDI Auth types */
17248 switch (csrAuthType)
17249 {
17250 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17251 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17252 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017253#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017254 case eCSR_AUTH_TYPE_CCKM_WPA:
17255 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17256 break;
17257#endif
17258 case eCSR_AUTH_TYPE_WPA:
17259 *AuthType = eWDA_AUTH_TYPE_WPA;
17260 break;
17261 case eCSR_AUTH_TYPE_WPA_PSK:
17262 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17263 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017264#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017265 case eCSR_AUTH_TYPE_CCKM_RSN:
17266 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17267 break;
17268#endif
17269 case eCSR_AUTH_TYPE_RSN:
17270 *AuthType = eWDA_AUTH_TYPE_RSN;
17271 break;
17272 case eCSR_AUTH_TYPE_RSN_PSK:
17273 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17274 break;
17275#if defined WLAN_FEATURE_VOWIFI_11R
17276 case eCSR_AUTH_TYPE_FT_RSN:
17277 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17278 break;
17279 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17280 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17281 break;
17282#endif
17283#ifdef FEATURE_WLAN_WAPI
17284 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17285 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17286 break;
17287 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17288 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17289 break;
17290#endif /* FEATURE_WLAN_WAPI */
17291 case eCSR_AUTH_TYPE_SHARED_KEY:
17292 case eCSR_AUTH_TYPE_AUTOSWITCH:
17293 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17294 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017295#ifdef WLAN_FEATURE_11W
17296 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17297 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017298 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017299 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17300 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17301 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017302#endif
17303 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017305 "%s: Unknown Auth Type", __func__);
17306 break;
17307 }
17308}
17309void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17310{
17311 switch (csrEncrType)
17312 {
17313 case eCSR_ENCRYPT_TYPE_NONE:
17314 *EncrType = WDI_ED_NONE;
17315 break;
17316 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17317 case eCSR_ENCRYPT_TYPE_WEP40:
17318 *EncrType = WDI_ED_WEP40;
17319 break;
17320 case eCSR_ENCRYPT_TYPE_WEP104:
17321 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17322 *EncrType = WDI_ED_WEP104;
17323 break;
17324 case eCSR_ENCRYPT_TYPE_TKIP:
17325 *EncrType = WDI_ED_TKIP;
17326 break;
17327 case eCSR_ENCRYPT_TYPE_AES:
17328 *EncrType = WDI_ED_CCMP;
17329 break;
17330#ifdef WLAN_FEATURE_11W
17331 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17332 *EncrType = WDI_ED_AES_128_CMAC;
17333 break;
17334#endif
17335#ifdef FEATURE_WLAN_WAPI
17336 case eCSR_ENCRYPT_TYPE_WPI:
17337 *EncrType = WDI_ED_WPI;
17338 break;
17339#endif
17340 case eCSR_ENCRYPT_TYPE_ANY:
17341 *EncrType = WDI_ED_ANY;
17342 break;
17343
17344 default:
17345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17346 "%s: Unknown Encryption Type", __func__);
17347 break;
17348 }
17349}
17350
17351/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017352 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017353 * Request to WDI to set Roam Offload Scan
17354 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017355VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017356 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17357{
17358 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017359 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17360 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017361 tWDA_ReqParams *pWdaParams ;
17362 v_U8_t csrAuthType;
17363 WDI_RoamNetworkType *pwdiRoamNetworkType;
17364 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17366 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017367 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017368 {
17369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17370 "%s: VOS MEM Alloc Failure", __func__);
17371 VOS_ASSERT(0);
17372 return VOS_STATUS_E_NOMEM;
17373 }
17374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17375 if (NULL == pWdaParams)
17376 {
17377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17378 "%s: VOS MEM Alloc Failure", __func__);
17379 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017380 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017381 return VOS_STATUS_E_NOMEM;
17382 }
17383
17384 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017385 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017386 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017387 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
17388 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017389 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
17390 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
17391 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
17392 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
17393 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
17394 sizeof(pwdiRoamNetworkType->currAPbssid));
17395 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
17396 csrAuthType);
17397 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
17398 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
17399 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
17400 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
17401 pwdiRoamOffloadScanInfo->LookupThreshold =
17402 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080017403 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
17404 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017405 pwdiRoamOffloadScanInfo->RoamRssiDiff =
17406 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080017407 pwdiRoamOffloadScanInfo->MAWCEnabled =
17408 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017409 pwdiRoamOffloadScanInfo->Command =
17410 pRoamOffloadScanReqParams->Command ;
17411 pwdiRoamOffloadScanInfo->StartScanReason =
17412 pRoamOffloadScanReqParams->StartScanReason ;
17413 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
17414 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
17415 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
17416 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
17417 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
17418 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
17419 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
17420 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
17421 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
17422 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017423 pwdiRoamOffloadScanInfo->IsESEEnabled =
17424 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017425 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
17426 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
17427 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
17428 pwdiRoamNetworkType->ssId.ucLength =
17429 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
17430 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
17431 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
17432 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
17433 pwdiRoamNetworkType->ChannelCount =
17434 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
17435 pwdiRoamOffloadScanInfo->ChannelCacheType =
17436 pRoamOffloadScanReqParams->ChannelCacheType;
17437 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
17438 pRoamOffloadScanReqParams->ValidChannelList,
17439 pRoamOffloadScanReqParams->ValidChannelCount);
17440 pwdiRoamOffloadScanInfo->ValidChannelCount =
17441 pRoamOffloadScanReqParams->ValidChannelCount;
17442 pwdiRoamOffloadScanInfo->us24GProbeSize =
17443 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17444 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17445 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
17446 pRoamOffloadScanReqParams->p24GProbeTemplate,
17447 pwdiRoamOffloadScanInfo->us24GProbeSize);
17448 pwdiRoamOffloadScanInfo->us5GProbeSize =
17449 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17450 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17451 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
17452 pRoamOffloadScanReqParams->p5GProbeTemplate,
17453 pwdiRoamOffloadScanInfo->us5GProbeSize);
17454 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
17455 pRoamOffloadScanReqParams->MDID.mdiePresent;
17456 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
17457 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017458 pwdiRoamOffloadScanInfo->nProbes =
17459 pRoamOffloadScanReqParams->nProbes;
17460 pwdiRoamOffloadScanInfo->HomeAwayTime =
17461 pRoamOffloadScanReqParams->HomeAwayTime;
17462 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017463 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017464 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017465 pWdaParams->pWdaContext = pWDA;
17466 /* Store param pointer as passed in by caller */
17467 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017468 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017469 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
17470 if(IS_WDI_STATUS_FAILURE(status))
17471 {
17472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17473 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
17474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17475 vos_mem_free(pWdaParams->wdaMsgParam);
17476 pWdaParams->wdaWdiApiMsgParam = NULL;
17477 pWdaParams->wdaMsgParam = NULL;
17478 }
17479 return CONVERT_WDI2VOS_STATUS(status) ;
17480}
17481#endif
17482
Jeff Johnson295189b2012-06-20 16:38:30 -070017483/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017484 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017485 *
17486 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017487void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017488{
17489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17490
17491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017492 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017493
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017494 if(NULL == pWdaParams)
17495 {
17496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017497 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017498 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017499 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017500 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017501
Jeff Johnson295189b2012-06-20 16:38:30 -070017502 vos_mem_free(pWdaParams->wdaMsgParam) ;
17503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17504 vos_mem_free(pWdaParams) ;
17505
17506 return ;
17507}
17508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017509 * FUNCTION: WDA_RssiFilterReqCallback
17510 * Free memory.
17511 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
17512 */
17513void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17514{
17515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17516
17517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17518 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17519
17520 if(NULL == pWdaParams)
17521 {
17522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17523 "%s: pWdaParams received NULL", __func__);
17524 VOS_ASSERT(0);
17525 return;
17526 }
17527
17528 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17529 {
17530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17531 vos_mem_free(pWdaParams->wdaMsgParam);
17532 vos_mem_free(pWdaParams);
17533 }
17534
17535 return;
17536}
17537/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053017538 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070017539 * Request to WDI to set Preferred Network List.Offload
17540 */
17541VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
17542 tSirSetRSSIFilterReq* pRssiFilterParams)
17543{
Jeff Johnson43971f52012-07-17 12:26:56 -070017544 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017545 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
17546 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
17547 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017550 if(NULL == pwdiSetRssiFilterReqInfo)
17551 {
17552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017554 VOS_ASSERT(0);
17555 return VOS_STATUS_E_NOMEM;
17556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017557 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17558 if(NULL == pWdaParams)
17559 {
17560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017562 VOS_ASSERT(0);
17563 vos_mem_free(pwdiSetRssiFilterReqInfo);
17564 return VOS_STATUS_E_NOMEM;
17565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017566 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017567 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
17568 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017569
Jeff Johnson295189b2012-06-20 16:38:30 -070017570 /* Store Params pass it to WDI */
17571 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
17572 pWdaParams->pWdaContext = pWDA;
17573 /* Store param pointer as passed in by caller */
17574 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017575 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017576 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017577 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017578 if(IS_WDI_STATUS_FAILURE(status))
17579 {
17580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17581 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
17582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17583 vos_mem_free(pWdaParams->wdaMsgParam);
17584 pWdaParams->wdaWdiApiMsgParam = NULL;
17585 pWdaParams->wdaMsgParam = NULL;
17586 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017587 return CONVERT_WDI2VOS_STATUS(status) ;
17588}
17589
Jeff Johnson295189b2012-06-20 16:38:30 -070017590/*
17591 * FUNCTION: WDA_ProcessUpdateScanParams
17592 * Request to WDI to update Scan Parameters
17593 */
17594VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
17595 tSirUpdateScanParams *pUpdateScanParams)
17596{
Jeff Johnson43971f52012-07-17 12:26:56 -070017597 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017598 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
17599 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
17600 sizeof(WDI_UpdateScanParamsInfoType)) ;
17601 tWDA_ReqParams *pWdaParams ;
17602 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017604 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017605 if(NULL == wdiUpdateScanParamsInfoType)
17606 {
17607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017609 VOS_ASSERT(0);
17610 return VOS_STATUS_E_NOMEM;
17611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17613 if ( NULL == pWdaParams )
17614 {
17615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017617 VOS_ASSERT(0);
17618 vos_mem_free(wdiUpdateScanParamsInfoType);
17619 return VOS_STATUS_E_NOMEM;
17620 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017621 //
17622 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
17623 //
Jeff Johnson295189b2012-06-20 16:38:30 -070017624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17625 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
17626 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
17627 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080017628 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070017629 pUpdateScanParams->b11dEnabled,
17630 pUpdateScanParams->b11dResolved,
17631 pUpdateScanParams->ucChannelCount,
17632 pUpdateScanParams->usPassiveMinChTime,
17633 pUpdateScanParams->usPassiveMaxChTime,
17634 pUpdateScanParams->usActiveMinChTime,
17635 pUpdateScanParams->usActiveMaxChTime,
17636 sizeof(tSirUpdateScanParams),
17637 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
17638
Jeff Johnson295189b2012-06-20 16:38:30 -070017639 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
17640 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070017641 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
17642 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070017643 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
17644 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070017645 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
17646 pUpdateScanParams->usActiveMaxChTime;
17647 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
17648 pUpdateScanParams->usActiveMinChTime;
17649 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
17650 pUpdateScanParams->usPassiveMaxChTime;
17651 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
17652 pUpdateScanParams->usPassiveMinChTime;
17653
Jeff Johnson295189b2012-06-20 16:38:30 -070017654 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053017655 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
17656 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070017657
Jeff Johnson295189b2012-06-20 16:38:30 -070017658 for ( i = 0; i <
17659 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
17660 i++)
17661 {
17662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17663 "Update Scan Parameters channel: %d",
17664 pUpdateScanParams->aChannels[i]);
17665
17666 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
17667 pUpdateScanParams->aChannels[i];
17668 }
17669
Yue Ma7f44bbe2013-04-12 11:47:39 -070017670 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
17671 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017672
Jeff Johnson295189b2012-06-20 16:38:30 -070017673 /* Store Params pass it to WDI */
17674 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
17675 pWdaParams->pWdaContext = pWDA;
17676 /* Store param pointer as passed in by caller */
17677 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070017678
Jeff Johnson295189b2012-06-20 16:38:30 -070017679
17680
17681 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017682 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017683 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017684 if(IS_WDI_STATUS_FAILURE(status))
17685 {
17686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17687 "Failure in Update Scan Params EQ WDI API, free all the memory " );
17688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17689 vos_mem_free(pWdaParams->wdaMsgParam);
17690 vos_mem_free(pWdaParams);
17691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017692 return CONVERT_WDI2VOS_STATUS(status) ;
17693}
17694#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017695
17696#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17697/*
17698 * FUNCTION: WDA_RoamOffloadScanReqCallback
17699 *
17700 */
17701void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
17702{
17703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017704 vos_msg_t vosMsg;
17705 wpt_uint8 reason = 0;
17706
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070017707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017708 "<------ %s " ,__func__);
17709 if (NULL == pWdaParams)
17710 {
17711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17712 "%s: pWdaParams received NULL", __func__);
17713 VOS_ASSERT(0) ;
17714 return ;
17715 }
17716 if ( pWdaParams != NULL )
17717 {
17718 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
17719 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017720 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17722 }
17723 if ( pWdaParams->wdaMsgParam != NULL)
17724 {
17725 vos_mem_free(pWdaParams->wdaMsgParam);
17726 }
17727
17728 vos_mem_free(pWdaParams) ;
17729 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017730 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
17731 vosMsg.bodyptr = NULL;
17732 if (WDI_STATUS_SUCCESS != status)
17733 {
17734 reason = 0;
17735 }
17736 vosMsg.bodyval = reason;
17737 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17738 {
17739 /* free the mem and return */
17740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070017741 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017742 }
17743
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017744 return ;
17745}
17746#endif
17747
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017748/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017749 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017750 *
17751 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017752void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017753{
17754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17755
17756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17757 "<------ %s " ,__func__);
17758
17759 if(NULL == pWdaParams)
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17762 "%s: pWdaParams received NULL", __func__);
17763 VOS_ASSERT(0);
17764 return;
17765 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017766
17767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17768 vos_mem_free(pWdaParams->wdaMsgParam);
17769 vos_mem_free(pWdaParams);
17770
17771 return;
17772}
17773/*
17774 * FUNCTION: WDA_SetPowerParamsReqCallback
17775 * Free memory.
17776 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
17777 */
17778void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17779{
17780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17781
17782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17783 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17784
17785 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017786 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070017787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17788 "%s: pWdaParams received NULL", __func__);
17789 VOS_ASSERT(0);
17790 return;
17791 }
17792
17793 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17794 {
17795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17796 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017797 vos_mem_free(pWdaParams);
17798 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017799
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017800 return;
17801}
17802
Jeff Johnson295189b2012-06-20 16:38:30 -070017803#ifdef WLAN_FEATURE_PACKET_FILTERING
17804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017805 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017806 *
17807 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017808void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017809 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
17810 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017811{
17812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017814 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017815 if(NULL == pWdaParams)
17816 {
17817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017818 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017819 VOS_ASSERT(0) ;
17820 return ;
17821 }
17822
17823 vos_mem_free(pWdaParams->wdaMsgParam) ;
17824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17825 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017826 //print a msg, nothing else to do
17827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017828 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017829 return ;
17830}
Jeff Johnson295189b2012-06-20 16:38:30 -070017831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017832 * FUNCTION: WDA_8023MulticastListReqCallback
17833 * Free memory.
17834 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
17835 */
17836void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
17837{
17838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17839
17840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17841 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17842
17843 if(NULL == pWdaParams)
17844 {
17845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17846 "%s: pWdaParams received NULL", __func__);
17847 VOS_ASSERT(0);
17848 return;
17849 }
17850
17851 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17852 {
17853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17854 vos_mem_free(pWdaParams->wdaMsgParam);
17855 vos_mem_free(pWdaParams);
17856 }
17857
17858 return;
17859}
17860/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017861 * FUNCTION: WDA_Process8023MulticastListReq
17862 * Request to WDI to add 8023 Multicast List
17863 */
17864VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
17865 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
17866{
Jeff Johnson43971f52012-07-17 12:26:56 -070017867 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017868 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
17869 tWDA_ReqParams *pWdaParams ;
17870 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017872 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017873 pwdiFltPktSetMcListReqParamsType =
17874 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
17875 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
17876 ) ;
17877 if(NULL == pwdiFltPktSetMcListReqParamsType)
17878 {
17879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017881 return VOS_STATUS_E_NOMEM;
17882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017883 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17884 if(NULL == pWdaParams)
17885 {
17886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017887 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017888 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
17889 return VOS_STATUS_E_NOMEM;
17890 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017891
Jeff Johnson295189b2012-06-20 16:38:30 -070017892 //
17893 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
17894 //
17895 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070017896 pRcvFltMcAddrList->ulMulticastAddrCnt;
17897
17898 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
17899 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
17900 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
17901 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
17902
Jeff Johnson295189b2012-06-20 16:38:30 -070017903 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
17904 {
17905 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
17906 &(pRcvFltMcAddrList->multicastAddr[i]),
17907 sizeof(tSirMacAddr));
17908 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017909 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
17910 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017911
Jeff Johnson295189b2012-06-20 16:38:30 -070017912 /* Store Params pass it to WDI */
17913 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
17914 pWdaParams->pWdaContext = pWDA;
17915 /* Store param pointer as passed in by caller */
17916 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017917 status = WDI_8023MulticastListReq(
17918 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017919 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017920 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017921 if(IS_WDI_STATUS_FAILURE(status))
17922 {
17923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17924 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17926 vos_mem_free(pWdaParams->wdaMsgParam);
17927 vos_mem_free(pWdaParams);
17928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017929 return CONVERT_WDI2VOS_STATUS(status) ;
17930}
Jeff Johnson295189b2012-06-20 16:38:30 -070017931/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017932 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017933 *
17934 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017935void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017936 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17937 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017938{
17939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017941 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017942 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017943 if(NULL == pWdaParams)
17944 {
17945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017946 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017947 VOS_ASSERT(0) ;
17948 return ;
17949 }
17950
17951 vos_mem_free(pWdaParams->wdaMsgParam) ;
17952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17953 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017954 //print a msg, nothing else to do
17955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017956 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017957 return ;
17958}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017959
17960/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017961 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17962 * Free memory.
17963 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017964 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017965void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017966 void* pUserData)
17967{
17968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17969
17970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17971 "<------ %s, wdiStatus: %d",
17972 __func__, wdiStatus);
17973
17974 if (NULL == pWdaParams)
17975 {
17976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17977 "%s: Invalid pWdaParams pointer", __func__);
17978 VOS_ASSERT(0);
17979 return;
17980 }
17981
17982 if (IS_WDI_STATUS_FAILURE(wdiStatus))
17983 {
17984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17985 vos_mem_free(pWdaParams->wdaMsgParam);
17986 vos_mem_free(pWdaParams);
17987 }
17988
17989 return;
17990}
17991
Jeff Johnson295189b2012-06-20 16:38:30 -070017992/*
17993 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
17994 * Request to WDI to set Receive Filters
17995 */
17996VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
17997 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
17998{
Jeff Johnson43971f52012-07-17 12:26:56 -070017999 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018000 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18001 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18002 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18003 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18004 tWDA_ReqParams *pWdaParams ;
18005 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018007 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018008 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18009 {
18010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018012 VOS_ASSERT(0);
18013 return VOS_STATUS_E_NOMEM;
18014 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018015 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18016 if(NULL == pWdaParams)
18017 {
18018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018020 VOS_ASSERT(0);
18021 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18022 return VOS_STATUS_E_NOMEM;
18023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018024 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18025 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18026 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18027 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018028 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18029 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18030
18031 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18032 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018033
18034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18035 "FID %d FT %d NParams %d CT %d",
18036 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18037 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18038 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18039 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018040 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18041 {
18042 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18043 &pRcvPktFilterCfg->paramsData[i],
18044 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018046 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018047 pwdiSetRcvPktFilterReqParamsType->
18048 wdiPktFilterCfg.paramsData[i].protocolLayer,
18049 pwdiSetRcvPktFilterReqParamsType->
18050 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018052 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018053 pwdiSetRcvPktFilterReqParamsType->
18054 wdiPktFilterCfg.paramsData[i].dataOffset,
18055 pwdiSetRcvPktFilterReqParamsType->
18056 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018058 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018059 pwdiSetRcvPktFilterReqParamsType->
18060 wdiPktFilterCfg.paramsData[i].compareData[0],
18061 pwdiSetRcvPktFilterReqParamsType->
18062 wdiPktFilterCfg.paramsData[i].compareData[1],
18063 pwdiSetRcvPktFilterReqParamsType->
18064 wdiPktFilterCfg.paramsData[i].compareData[2],
18065 pwdiSetRcvPktFilterReqParamsType->
18066 wdiPktFilterCfg.paramsData[i].compareData[3],
18067 pwdiSetRcvPktFilterReqParamsType->
18068 wdiPktFilterCfg.paramsData[i].compareData[4],
18069 pwdiSetRcvPktFilterReqParamsType->
18070 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018072 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018073 pwdiSetRcvPktFilterReqParamsType->
18074 wdiPktFilterCfg.paramsData[i].dataMask[0],
18075 pwdiSetRcvPktFilterReqParamsType->
18076 wdiPktFilterCfg.paramsData[i].dataMask[1],
18077 pwdiSetRcvPktFilterReqParamsType->
18078 wdiPktFilterCfg.paramsData[i].dataMask[2],
18079 pwdiSetRcvPktFilterReqParamsType->
18080 wdiPktFilterCfg.paramsData[i].dataMask[3],
18081 pwdiSetRcvPktFilterReqParamsType->
18082 wdiPktFilterCfg.paramsData[i].dataMask[4],
18083 pwdiSetRcvPktFilterReqParamsType->
18084 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018085 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018086 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018087 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018088 /* Store Params pass it to WDI */
18089 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18090 pWdaParams->pWdaContext = pWDA;
18091 /* Store param pointer as passed in by caller */
18092 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018093 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018094 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018095 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018096 if(IS_WDI_STATUS_FAILURE(status))
18097 {
18098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18099 "Failure in SetFilter(),free all the memory,status %d ",status);
18100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18101 vos_mem_free(pWdaParams->wdaMsgParam);
18102 vos_mem_free(pWdaParams);
18103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018104 return CONVERT_WDI2VOS_STATUS(status) ;
18105}
Jeff Johnson295189b2012-06-20 16:38:30 -070018106/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018107 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018108 *
18109 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018110void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018111 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18112 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018113{
18114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18115 tWDA_CbContext *pWDA;
18116 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18117 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18118 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18119 tANI_U8 i;
18120 vos_msg_t vosMsg;
18121
18122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018123 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018124 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18125
Jeff Johnsone7245742012-09-05 17:12:55 -070018126 if(NULL == pRcvFltPktMatchCntRsp)
18127 {
18128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018129 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018130 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018131 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018132 return ;
18133 }
18134
Jeff Johnson295189b2012-06-20 16:38:30 -070018135 if(NULL == pWdaParams)
18136 {
18137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018138 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018139 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018140 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018141 return ;
18142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018143 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18144 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018145 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18146 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18147
18148 /* Message Header */
18149 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18150 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18151
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018152 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018153
18154 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18155 {
18156 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18157 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018159 /* VOS message wrapper */
18160 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18161 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18162 vosMsg.bodyval = 0;
18163 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18164 {
18165 /* free the mem and return */
18166 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18167 }
18168
18169 vos_mem_free(pWdaParams->wdaMsgParam) ;
18170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18171 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018172
18173 return;
18174}
18175/*
18176 * FUNCTION: WDA_FilterMatchCountReqCallback
18177 * Free memory and send RSP back to SME.
18178 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18179 */
18180void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18181{
18182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18183 vos_msg_t vosMsg;
18184
18185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18186 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18187
18188 if(NULL == pWdaParams)
18189 {
18190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18191 "%s: pWdaParams received NULL", __func__);
18192 VOS_ASSERT(0);
18193 return;
18194 }
18195
18196 /* VOS message wrapper */
18197 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18198 vosMsg.bodyptr = NULL;
18199 vosMsg.bodyval = 0;
18200
18201 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18202 {
18203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18204 vos_mem_free(pWdaParams->wdaMsgParam);
18205 vos_mem_free(pWdaParams);
18206 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18207 }
18208
18209 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018210}
Jeff Johnson295189b2012-06-20 16:38:30 -070018211/*
18212 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18213 * Request to WDI to get PC Filter Match Count
18214 */
18215VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18216{
Jeff Johnson43971f52012-07-17 12:26:56 -070018217 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018218 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18219 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18220 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018223 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18224 {
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018227 VOS_ASSERT(0);
18228 return VOS_STATUS_E_NOMEM;
18229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18231 if(NULL == pWdaParams)
18232 {
18233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018235 VOS_ASSERT(0);
18236 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18237 return VOS_STATUS_E_NOMEM;
18238 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018239
Yue Ma7f44bbe2013-04-12 11:47:39 -070018240 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18241 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018242
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018243 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18244 pRcvFltPktMatchRsp->bssId,
18245 sizeof(wpt_macAddr));
18246
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 /* Store Params pass it to WDI */
18248 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18249 pWdaParams->pWdaContext = pWDA;
18250 /* Store param pointer as passed in by caller */
18251 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018252 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018253 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018254 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018255 if(IS_WDI_STATUS_FAILURE(status))
18256 {
18257 /* failure returned by WDI API */
18258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18259 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18261 vos_mem_free(pWdaParams) ;
18262 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18263 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018265 return CONVERT_WDI2VOS_STATUS(status) ;
18266}
Jeff Johnson295189b2012-06-20 16:38:30 -070018267/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018268 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018269 *
18270 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018271void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018272 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18273 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018274{
18275 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018277 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018278/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18279 if(NULL == pWdaParams)
18280 {
18281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018283 VOS_ASSERT(0) ;
18284 return ;
18285 }
18286
18287 vos_mem_free(pWdaParams->wdaMsgParam) ;
18288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18289 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018290 //print a msg, nothing else to do
18291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018292 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018293 return ;
18294}
Jeff Johnson295189b2012-06-20 16:38:30 -070018295/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018296 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18297 * Free memory.
18298 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18299 */
18300void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18301{
18302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18303
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18305 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18306
18307 if(NULL == pWdaParams)
18308 {
18309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18310 "%s: Invalid pWdaParams pointer", __func__);
18311 VOS_ASSERT(0);
18312 return;
18313 }
18314
18315 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18316 {
18317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18318 vos_mem_free(pWdaParams->wdaMsgParam);
18319 vos_mem_free(pWdaParams);
18320 }
18321
18322 return;
18323}
18324/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018325 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18326 * Request to WDI to clear Receive Filters
18327 */
18328VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18329 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18330{
Jeff Johnson43971f52012-07-17 12:26:56 -070018331 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018332 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18333 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18334 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018337 if(NULL == pwdiRcvFltPktClearReqParamsType)
18338 {
18339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018341 VOS_ASSERT(0);
18342 return VOS_STATUS_E_NOMEM;
18343 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18345 if(NULL == pWdaParams)
18346 {
18347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018349 VOS_ASSERT(0);
18350 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18351 return VOS_STATUS_E_NOMEM;
18352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018353 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18354 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018355 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18356 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18357 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18358 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018359
Yue Ma7f44bbe2013-04-12 11:47:39 -070018360 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018361 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018362 /* Store Params pass it to WDI */
18363 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18364 pWdaParams->pWdaContext = pWDA;
18365 /* Store param pointer as passed in by caller */
18366 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018367 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018368 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018369 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018370 if(IS_WDI_STATUS_FAILURE(status))
18371 {
18372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18373 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018375 vos_mem_free(pWdaParams->wdaMsgParam);
18376 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018377 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018378 return CONVERT_WDI2VOS_STATUS(status) ;
18379}
18380#endif // WLAN_FEATURE_PACKET_FILTERING
18381
Jeff Johnson295189b2012-06-20 16:38:30 -070018382/*
18383 * FUNCTION: WDA_ProcessSetPowerParamsReq
18384 * Request to WDI to set power params
18385 */
18386VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
18387 tSirSetPowerParamsReq *pPowerParams)
18388{
Jeff Johnson43971f52012-07-17 12:26:56 -070018389 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018390 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
18391 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018394 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018395 if(NULL == pwdiSetPowerParamsReqInfo)
18396 {
18397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018399 VOS_ASSERT(0);
18400 return VOS_STATUS_E_NOMEM;
18401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18403 if(NULL == pWdaParams)
18404 {
18405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018407 VOS_ASSERT(0);
18408 vos_mem_free(pwdiSetPowerParamsReqInfo);
18409 return VOS_STATUS_E_NOMEM;
18410 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018411
Jeff Johnson295189b2012-06-20 16:38:30 -070018412
18413 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
18414 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070018415 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
18416 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070018417 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
18418 pPowerParams->uListenInterval;
18419 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
18420 pPowerParams->uBcastMcastFilter;
18421 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
18422 pPowerParams->uEnableBET;
18423 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
18424 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070018425 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
18426 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018427 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
18428 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018429
Jeff Johnson295189b2012-06-20 16:38:30 -070018430 /* Store Params pass it to WDI */
18431 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
18432 pWdaParams->pWdaContext = pWDA;
18433 /* Store param pointer as passed in by caller */
18434 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018435 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018436 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018437 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018438 if(IS_WDI_STATUS_FAILURE(status))
18439 {
18440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18441 "Failure in Set power params REQ WDI API, free all the memory " );
18442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18443 vos_mem_free(pWdaParams->wdaMsgParam);
18444 pWdaParams->wdaWdiApiMsgParam = NULL;
18445 pWdaParams->wdaMsgParam = NULL;
18446 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018447 return CONVERT_WDI2VOS_STATUS(status) ;
18448}
18449
18450/*
18451 * FUNCTION: WDA_SetTmLevelRspCallback
18452 * Set TM Level response
18453 */
18454void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
18455{
18456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18457
18458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018459 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018460
18461 if(NULL == pWdaParams)
18462 {
18463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018464 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018465 VOS_ASSERT(0) ;
18466 return ;
18467 }
18468
18469 /* Dose not need to send notification to upper layer
18470 * Just free allocated resources */
18471 if( pWdaParams != NULL )
18472 {
18473 if( pWdaParams->wdaWdiApiMsgParam != NULL )
18474 {
18475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18476 }
18477 vos_mem_free(pWdaParams->wdaMsgParam) ;
18478 vos_mem_free(pWdaParams) ;
18479 }
18480}
18481
18482/*
18483 * FUNCTION: WDA_ProcessSetTmLevelReq
18484 * Set TM Level request
18485 */
18486VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
18487 tAniSetTmLevelReq *setTmLevelReq)
18488{
18489 WDI_Status status = WDI_STATUS_SUCCESS ;
18490 tWDA_ReqParams *pWdaParams ;
18491 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
18492 (WDI_SetTmLevelReqType *)vos_mem_malloc(
18493 sizeof(WDI_SetTmLevelReqType)) ;
18494 if(NULL == wdiSetTmLevelReq)
18495 {
18496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018498 VOS_ASSERT(0);
18499 return VOS_STATUS_E_NOMEM;
18500 }
18501
18502 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18503 if(NULL == pWdaParams)
18504 {
18505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018507 VOS_ASSERT(0);
18508 vos_mem_free(wdiSetTmLevelReq);
18509 return VOS_STATUS_E_NOMEM;
18510 }
18511
18512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018513 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018514
18515 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
18516 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
18517
18518 pWdaParams->pWdaContext = pWDA;
18519 pWdaParams->wdaMsgParam = setTmLevelReq;
18520 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
18521
18522 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
18523 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
18524
18525 if(IS_WDI_STATUS_FAILURE(status))
18526 {
18527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080018528 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070018529 vos_mem_free(pWdaParams->wdaMsgParam) ;
18530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18531 vos_mem_free(pWdaParams) ;
18532 }
18533
18534 return CONVERT_WDI2VOS_STATUS(status) ;
18535}
18536
18537VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
18538 tpTxControlParams pTxCtrlParam)
18539{
18540 VOS_STATUS wdaStatus;
18541
18542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018544 if( pTxCtrlParam == NULL )
18545 {
18546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018547 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018548 return VOS_STATUS_E_FAILURE;
18549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018550 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
18551 {
18552 wdaStatus = WDA_SuspendDataTx(pWDA);
18553 }
18554 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
18555 {
18556 wdaStatus = WDA_ResumeDataTx(pWDA);
18557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018558 return wdaStatus;
18559}
18560
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018561void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053018562{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018563 WDI_Status status;
18564 status = WDI_FWLoggingDXEdoneInd(logType);
18565
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053018566 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018567 {
18568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18569 FL("Failure status %d"), status);
18570 }
Mihir Shete5affadc2015-05-29 20:54:57 +053018571}
18572
Jeff Johnson295189b2012-06-20 16:38:30 -070018573 /* FUNCTION WDA_featureCapsExchange
18574 * WDA API to invoke capability exchange between host and FW.
18575 */
18576void WDA_featureCapsExchange(v_PVOID_t pVosContext)
18577{
18578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018579 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018580 WDI_featureCapsExchangeReq( NULL, pVosContext);
18581}
18582
Yathish9f22e662012-12-10 14:21:35 -080018583/* FUNCTION WDA_disableCapablityFeature
18584 * WDA API to diable Active mode offload in host.
18585 */
18586void WDA_disableCapablityFeature(tANI_U8 feature_index)
18587{
18588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18589 "%s:enter", __func__ );
18590 WDI_disableCapablityFeature(feature_index);
18591}
18592
Jeff Johnson295189b2012-06-20 16:38:30 -070018593 /* FUNCTION WDA_getHostWlanFeatCaps
18594 * Wrapper for WDI API, that will return if the feature (enum value).passed
18595 * to this API is supported or not in Host
18596 * return value
18597 * 0 - implies feature is NOT Supported
18598 * any non zero value - implies feature is SUPPORTED
18599 */
18600tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
18601{
18602 return WDI_getHostWlanFeatCaps(featEnumValue);
18603}
18604
18605 /* FUNCTION WDA_getFwWlanFeatCaps
18606 * Wrapper for WDI API, that will return if the feature (enum value).passed
18607 * to this API is supported or not in FW
18608 * return value
18609 * 0 - implies feature is NOT Supported
18610 * any non zero value - implies feature is SUPPORTED
18611 */
18612tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
18613{
18614 return WDI_getFwWlanFeatCaps(featEnumValue);
18615}
18616
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053018617
Jeff Johnson295189b2012-06-20 16:38:30 -070018618/*
18619 * FUNCTION: WDA_shutdown
18620 * Shutdown WDA/WDI without handshaking with Riva.
18621 * Synchronous function.
18622 */
18623VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
18624{
18625 WDI_Status wdiStatus;
18626 //tANI_U8 eventIdx = 0;
18627 VOS_STATUS status = VOS_STATUS_SUCCESS;
18628 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070018629 if (NULL == pWDA)
18630 {
18631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018632 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018633 VOS_ASSERT(0);
18634 return VOS_STATUS_E_FAILURE;
18635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018636 /* FTM mode stay START_STATE */
18637 if( (WDA_READY_STATE != pWDA->wdaState) &&
18638 (WDA_INIT_STATE != pWDA->wdaState) &&
18639 (WDA_START_STATE != pWDA->wdaState) )
18640 {
18641 VOS_ASSERT(0);
18642 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018643
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018644 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070018645 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018646 if(VOS_TRUE == pWDA->wdaTimersCreated)
18647 {
18648 wdaDestroyTimers(pWDA);
18649 pWDA->wdaTimersCreated = VOS_FALSE;
18650 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018651 }
Leo Chang9d76f622013-08-23 16:34:52 -070018652 else
18653 {
18654 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018655 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018656
Jeff Johnson295189b2012-06-20 16:38:30 -070018657 /* call WDI shutdown */
18658 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070018659 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
18660 {
18661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18662 "error in WDA Stop" );
18663 status = VOS_STATUS_E_FAILURE;
18664 }
18665 /* WDI stop is synchrnous, shutdown is complete when it returns */
18666 pWDA->wdaState = WDA_STOP_STATE;
18667
Jeff Johnson295189b2012-06-20 16:38:30 -070018668 /* shutdown should perform the stop & close actions. */
18669 /* Destroy the event */
18670 status = vos_event_destroy(&pWDA->txFrameEvent);
18671 if(!VOS_IS_STATUS_SUCCESS(status))
18672 {
18673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018674 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018675 status = VOS_STATUS_E_FAILURE;
18676 }
18677 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
18678 if(!VOS_IS_STATUS_SUCCESS(status))
18679 {
18680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018681 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018682 status = VOS_STATUS_E_FAILURE;
18683 }
18684 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
18685 if(!VOS_IS_STATUS_SUCCESS(status))
18686 {
18687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018688 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018689 status = VOS_STATUS_E_FAILURE;
18690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018691 /* free WDA context */
18692 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
18693 if ( !VOS_IS_STATUS_SUCCESS(status) )
18694 {
18695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18696 "error in WDA close " );
18697 status = VOS_STATUS_E_FAILURE;
18698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018699 return status;
18700}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018701
Jeff Johnsone7245742012-09-05 17:12:55 -070018702/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018703 * FUNCTION: WDA_setNeedShutdown
18704 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070018705 */
18706
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018707void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070018708{
18709 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018710 if(pWDA == NULL)
18711 {
18712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18713 "Could not get the WDA Context pointer" );
18714 return;
18715 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018716 pWDA->needShutdown = TRUE;
18717}
18718/*
18719 * FUNCTION: WDA_needShutdown
18720 * WDA needs a shutdown
18721 */
18722
18723v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
18724{
18725 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018726 if(pWDA == NULL)
18727 {
18728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18729 "Could not get the WDA Context pointer" );
18730 return 0;
18731 }
18732 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070018733}
18734
Mohit Khanna4a70d262012-09-11 16:30:12 -070018735#ifdef WLAN_FEATURE_11AC
18736/*
18737 * FUNCTION: WDA_SetBeaconFilterReqCallback
18738 *
18739 */
18740void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
18741{
18742 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018744 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018745 if(NULL == pWdaParams)
18746 {
18747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018748 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018749 VOS_ASSERT(0) ;
18750 return ;
18751 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018752
Mohit Khanna4a70d262012-09-11 16:30:12 -070018753 vos_mem_free(pWdaParams->wdaMsgParam) ;
18754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18755 vos_mem_free(pWdaParams) ;
18756 /*
18757 * No respone required for SetBeaconFilter req so just free the request
18758 * param here
18759 */
18760
18761 return ;
18762}
18763
18764VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
18765 tUpdateVHTOpMode *pData)
18766{
18767 WDI_Status status = WDI_STATUS_SUCCESS ;
18768 tWDA_ReqParams *pWdaParams ;
18769 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
18770 sizeof(WDI_UpdateVHTOpMode)) ;
18771 if(NULL == wdiTemp)
18772 {
18773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018774 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018775 VOS_ASSERT(0);
18776 return VOS_STATUS_E_NOMEM;
18777 }
18778 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18779 if(NULL == pWdaParams)
18780 {
18781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018782 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018783 VOS_ASSERT(0);
18784 vos_mem_free(wdiTemp);
18785 return VOS_STATUS_E_NOMEM;
18786 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053018787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18788 "------> %s Opmode = %d and staid = %d" ,
18789 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018790 wdiTemp->opMode = pData->opMode;
18791 wdiTemp->staId = pData->staId;
18792
18793 pWdaParams->pWdaContext = pWDA;
18794 /* Store Req pointer, as this will be used for response */
18795 pWdaParams->wdaMsgParam = (void *)pData;
18796 /* store Params pass it to WDI */
18797 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
18798
18799 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
18800
18801 if(IS_WDI_STATUS_FAILURE(status))
18802 {
18803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18804 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
18805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18806 vos_mem_free(pWdaParams->wdaMsgParam);
18807 vos_mem_free(pWdaParams);
18808 }
18809 return CONVERT_WDI2VOS_STATUS(status) ;
18810}
18811#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018812
18813/*==========================================================================
18814 FUNCTION WDA_TransportChannelDebug
18815
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070018816 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018817 Display Transport Channel debugging information
18818 User may request to display DXE channel snapshot
18819 Or if host driver detects any abnormal stcuk may display
18820
18821 PARAMETERS
schang6295e542013-03-12 15:31:23 -070018822 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080018823 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053018824 debugFlags : Enable stall detect features
18825 defined by WPAL_DeviceDebugFlags
18826 These features may effect
18827 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018828
18829 RETURN VALUE
18830 NONE
18831
18832===========================================================================*/
18833void WDA_TransportChannelDebug
18834(
schang6295e542013-03-12 15:31:23 -070018835 tpAniSirGlobal pMac,
18836 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053018837 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018838)
18839{
Mihir Shete40a55652014-03-02 14:14:47 +053018840 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018841 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018842}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018843
18844/*==========================================================================
Sravan Kumar Kairam6eac7522015-11-27 23:37:02 +053018845 FUNCTION WDA_TransportKickDxe
18846
18847 DESCRIPTION
18848 Request Kick Dxe when first hdd TX time out
18849 happens
18850
18851 PARAMETERS
18852 NONE
18853
18854 RETURN VALUE
18855 NONE
18856
18857===========================================================================*/
18858void WDA_TransportKickDxe()
18859{
18860 WDI_TransportKickDxe();
18861 return;
18862}
18863
18864
18865/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018866 FUNCTION WDA_SetEnableSSR
18867
18868 DESCRIPTION
18869 API to enable/disable SSR on WDI timeout
18870
18871 PARAMETERS
18872 enableSSR : enable/disable SSR
18873
18874 RETURN VALUE
18875 NONE
18876
18877===========================================================================*/
18878void WDA_SetEnableSSR(v_BOOL_t enableSSR)
18879{
18880 WDI_SetEnableSSR(enableSSR);
18881}
Leo Chang9056f462013-08-01 19:21:11 -070018882
18883#ifdef FEATURE_WLAN_LPHB
18884/*
18885 * FUNCTION: WDA_LPHBconfRspCallback
18886 *
18887 */
18888void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
18889{
18890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18891
18892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18893 "<------ %s " ,__func__);
18894 if (NULL == pWdaParams)
18895 {
18896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18897 "%s: pWdaParams received NULL", __func__);
18898 VOS_ASSERT(0) ;
18899 return ;
18900 }
18901
18902 /* Do not need to send notification to upper layer
18903 * Just free allocated resources */
18904 if (pWdaParams != NULL)
18905 {
18906 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18907 {
18908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18909 }
18910 vos_mem_free(pWdaParams->wdaMsgParam) ;
18911 vos_mem_free(pWdaParams) ;
18912 }
18913
18914 return;
18915}
18916
18917/*
18918 * FUNCTION: WDA_ProcessLPHBConfReq
18919 *
18920 */
18921VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
18922 tSirLPHBReq *pData)
18923{
18924 WDI_Status wdiStatus;
18925 tWDA_ReqParams *pWdaParams ;
18926
18927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18928 "------> %s " , __func__);
18929
18930 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18931 if (NULL == pWdaParams)
18932 {
18933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18934 "%s: VOS MEM Alloc Failure", __func__);
18935 VOS_ASSERT(0);
18936 vos_mem_free(pData);
18937 return VOS_STATUS_E_NOMEM;
18938 }
18939
18940 pWdaParams->pWdaContext = pWDA;
18941 pWdaParams->wdaMsgParam = (void *)pData;
18942 pWdaParams->wdaWdiApiMsgParam = NULL;
18943
18944 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18945 if (WDI_STATUS_PENDING == wdiStatus)
18946 {
18947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18948 "Pending received for %s:%d ", __func__, __LINE__);
18949 }
18950 else if (WDI_STATUS_SUCCESS != wdiStatus)
18951 {
18952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18953 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18954 vos_mem_free(pWdaParams->wdaMsgParam);
18955 vos_mem_free(pWdaParams);
18956 }
18957
18958 return CONVERT_WDI2VOS_STATUS(wdiStatus);
18959}
18960#endif /* FEATURE_WLAN_LPHB */
18961
c_hpothu92367912014-05-01 15:18:17 +053018962void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
18963 void* pUserData)
18964{
18965 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
18966
18967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18968 "<------ %s " ,__func__);
18969 if (NULL == pBcnMissRateInfo)
18970 {
18971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18972 "%s: pWdaParams received NULL", __func__);
18973 VOS_ASSERT(0) ;
18974 return ;
18975 }
18976 if (pBcnMissRateInfo->callback)
18977 {
18978 pBcnMissRateInfo->callback(status, bcnMissRate,
18979 pBcnMissRateInfo->data);
18980 }
18981 vos_mem_free(pUserData);
18982
18983 return;
18984}
18985
18986v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
18987 tSirBcnMissRateReq *pData)
18988{
18989 WDI_Status wdiStatus;
18990 tSirBcnMissRateInfo *pBcnMissRateInfo;
18991
18992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18993 "------> %s " , __func__);
18994
18995 pBcnMissRateInfo =
18996 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
18997 if (NULL == pBcnMissRateInfo)
18998 {
18999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19000 "%s: VOS MEM Alloc Failure", __func__);
19001 VOS_ASSERT(0);
19002 vos_mem_free(pData);
19003 return;
19004 }
19005
19006 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19007 pBcnMissRateInfo->data = pData->data;
19008
19009 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19010 WDA_GetBcnMissRateCallback,
19011 pData->bssid);
19012 if (WDI_STATUS_PENDING == wdiStatus)
19013 {
19014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19015 "Pending received for %s:%d ", __func__, __LINE__);
19016 }
19017 else if (WDI_STATUS_SUCCESS != wdiStatus)
19018 {
19019 if (pBcnMissRateInfo->callback)
19020 {
19021 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19022 -1, pBcnMissRateInfo->data);
19023 }
19024 }
19025 vos_mem_free(pData);
19026}
Dino Mycle41bdc942014-06-10 11:30:24 +053019027
19028#ifdef WLAN_FEATURE_EXTSCAN
19029
19030/*==========================================================================
19031 FUNCTION WDA_EXTScanStartRspCallback
19032
19033 DESCRIPTION
19034 API to send EXTScan Start Response to HDD
19035
19036 PARAMETERS
19037 pEventData: Response from FW
19038 pUserData:
19039===========================================================================*/
19040void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19041{
19042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19043 tWDA_CbContext *pWDA = NULL;
19044 void *pCallbackContext;
19045 tpAniSirGlobal pMac;
19046
19047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19048 "%s:", __func__);
19049 if (NULL == pWdaParams)
19050 {
19051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19052 "%s: pWdaParams received NULL", __func__);
19053 VOS_ASSERT(0);
19054 return;
19055 }
19056
19057 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19058
19059 if (NULL == pWDA)
19060 {
19061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19062 "%s: pWDA received NULL", __func__);
19063 VOS_ASSERT(0);
19064 goto error;
19065 }
19066
19067 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19068 if (NULL == pMac)
19069 {
19070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19071 "%s:pMac is NULL", __func__);
19072 VOS_ASSERT(0);
19073 goto error;
19074 }
19075
19076 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19077
19078 if (pMac->sme.pEXTScanIndCb)
19079 {
19080 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19081 pEventData);
19082 }
19083 else
19084 {
19085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19086 "%s:HDD callback is null", __func__);
19087 VOS_ASSERT(0);
19088 }
19089
19090error:
19091
19092 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19093 {
19094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19095 }
19096 if (pWdaParams->wdaMsgParam != NULL)
19097 {
19098 vos_mem_free(pWdaParams->wdaMsgParam);
19099 }
19100 vos_mem_free(pWdaParams) ;
19101
19102 return;
19103}
19104
19105/*==========================================================================
19106 FUNCTION WDA_EXTScanStopRspCallback
19107
19108 DESCRIPTION
19109 API to send EXTScan Stop Response to HDD
19110
19111 PARAMETERS
19112 pEventData: Response from FW
19113 pUserData:
19114===========================================================================*/
19115void WDA_EXTScanStopRspCallback(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 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19151
19152 if (pMac->sme.pEXTScanIndCb)
19153 {
19154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19155 "%s:HDD call back function called", __func__);
19156 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_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
19166error:
19167
19168 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19169 {
19170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19171 }
19172 if (pWdaParams->wdaMsgParam != NULL)
19173 {
19174 vos_mem_free(pWdaParams->wdaMsgParam);
19175 }
19176 vos_mem_free(pWdaParams) ;
19177
19178
19179 return;
19180}
19181
19182/*==========================================================================
19183 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19184
19185 DESCRIPTION
19186 API to send EXTScan Get Cached Results Response to HDD
19187
19188 PARAMETERS
19189 pEventData: Response from FW
19190 pUserData:
19191===========================================================================*/
19192void WDA_EXTScanGetCachedResultsRspCallback(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_CACHED_RESULTS_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_EXTScanGetCapabilitiesRspCallback
19261
19262 DESCRIPTION
19263 API to send EXTScan Get Capabilities Response to HDD
19264
19265 PARAMETERS
19266 pEventData: Response from FW
19267 pUserData:
19268===========================================================================*/
19269void WDA_EXTScanGetCapabilitiesRspCallback(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_GET_CAPABILITIES_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_EXTScanSetBSSIDHotlistRspCallback
19338
19339 DESCRIPTION
19340 API to send EXTScan Set BSSID Hotlist Response to HDD
19341
19342 PARAMETERS
19343 pEventData: Response from FW
19344 pUserData:
19345===========================================================================*/
19346void WDA_EXTScanSetBSSIDHotlistRspCallback(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_SET_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/*==========================================================================
19414 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
19415
19416 DESCRIPTION
19417 API to send EXTScan ReSet BSSID Hotlist Response to HDD
19418
19419 PARAMETERS
19420 pEventData: Response from FW
19421 pUserData:
19422===========================================================================*/
19423void WDA_EXTScanResetBSSIDHotlistRspCallback(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_RESET_BSSID_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/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019491 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
19492
19493 DESCRIPTION
19494 API to send EXTScan Set SSID Hotlist Response to HDD
19495
19496 PARAMETERS
19497 pEventData: Response from FW
19498 pUserData:
19499===========================================================================*/
19500void WDA_EXTScanSetSSIDHotlistRspCallback(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_SET_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
19567/*==========================================================================
19568 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
19569
19570 DESCRIPTION
19571 API to send EXTScan ReSet SSID Hotlist Response to HDD
19572
19573 PARAMETERS
19574 pEventData: Response from FW
19575 pUserData:
19576===========================================================================*/
19577void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19578{
19579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19580 tWDA_CbContext *pWDA = NULL;
19581 void *pCallbackContext;
19582 tpAniSirGlobal pMac;
19583
19584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19585 "%s:", __func__);
19586 if (NULL == pWdaParams)
19587 {
19588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19589 "%s: pWdaParams received NULL", __func__);
19590 VOS_ASSERT(0) ;
19591 return;
19592 }
19593
19594 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19595
19596 if (NULL == pWDA)
19597 {
19598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19599 "%s: pWDA received NULL", __func__);
19600 VOS_ASSERT(0);
19601 goto error;
19602 }
19603
19604 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19605 if (NULL == pMac)
19606 {
19607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19608 "%s:pMac is NULL", __func__);
19609 VOS_ASSERT(0);
19610 goto error;
19611 }
19612
19613 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19614
19615 if (pMac->sme.pEXTScanIndCb)
19616 {
19617 pMac->sme.pEXTScanIndCb(pCallbackContext,
19618 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
19619 pEventData);
19620 }
19621 else
19622 {
19623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19624 "%s:HDD callback is null", __func__);
19625 VOS_ASSERT(0);
19626 }
19627
19628
19629error:
19630
19631 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19632 {
19633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19634 }
19635 if (pWdaParams->wdaMsgParam != NULL)
19636 {
19637 vos_mem_free(pWdaParams->wdaMsgParam);
19638 }
19639 vos_mem_free(pWdaParams) ;
19640
19641 return;
19642}
19643
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019644/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053019645 FUNCTION WDA_ProcessEXTScanStartReq
19646
19647 DESCRIPTION
19648 API to send EXTScan Start Request to WDI
19649
19650 PARAMETERS
19651 pWDA: Pointer to WDA context
19652 wdaRequest: Pointer to EXTScan req parameters
19653===========================================================================*/
19654VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
19655 tSirEXTScanStartReqParams *wdaRequest)
19656{
19657 WDI_Status status = WDI_STATUS_SUCCESS;
19658 tWDA_ReqParams *pWdaParams;
19659
19660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19661 "%s: ", __func__);
19662 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19663 if (NULL == pWdaParams)
19664 {
19665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19666 "%s: VOS MEM Alloc Failure", __func__);
19667 VOS_ASSERT(0);
19668 return VOS_STATUS_E_NOMEM;
19669 }
19670 pWdaParams->pWdaContext = pWDA;
19671 pWdaParams->wdaMsgParam = wdaRequest;
19672 pWdaParams->wdaWdiApiMsgParam = NULL;
19673
19674 status = WDI_EXTScanStartReq((void *)wdaRequest,
19675 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
19676 (void *)pWdaParams);
19677 if (IS_WDI_STATUS_FAILURE(status))
19678 {
19679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19680 "Failure to request. Free all the memory " );
19681 vos_mem_free(pWdaParams->wdaMsgParam);
19682 vos_mem_free(pWdaParams);
19683 }
19684 return CONVERT_WDI2VOS_STATUS(status);
19685}
19686
19687/*==========================================================================
19688 FUNCTION WDA_ProcessEXTScanStopReq
19689
19690 DESCRIPTION
19691 API to send EXTScan Start Request to WDI
19692
19693 PARAMETERS
19694 pWDA: Pointer to WDA context
19695 wdaRequest: Pointer to EXTScan req parameters
19696===========================================================================*/
19697VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
19698 tSirEXTScanStopReqParams *wdaRequest)
19699{
19700 WDI_Status status = WDI_STATUS_SUCCESS;
19701 tWDA_ReqParams *pWdaParams;
19702
19703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19704 "%s:", __func__);
19705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19706 if (NULL == pWdaParams)
19707 {
19708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19709 "%s: VOS MEM Alloc Failure", __func__);
19710 VOS_ASSERT(0);
19711 return VOS_STATUS_E_NOMEM;
19712 }
19713 pWdaParams->pWdaContext = pWDA;
19714 pWdaParams->wdaMsgParam = wdaRequest;
19715 pWdaParams->wdaWdiApiMsgParam = NULL;
19716
19717 status = WDI_EXTScanStopReq((void *)wdaRequest,
19718 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
19719 (void *)pWdaParams);
19720 if (IS_WDI_STATUS_FAILURE(status))
19721 {
19722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19723 "Failure to request. Free all the memory " );
19724 vos_mem_free(pWdaParams->wdaMsgParam);
19725 vos_mem_free(pWdaParams);
19726 }
19727 return CONVERT_WDI2VOS_STATUS(status);
19728}
19729
19730/*==========================================================================
19731 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
19732
19733 DESCRIPTION
19734 API to send EXTScan Get Cached Results Request to WDI
19735
19736 PARAMETERS
19737 pWDA: Pointer to WDA context
19738 wdaRequest: Pointer to EXTScan req parameters
19739===========================================================================*/
19740VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
19741 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
19742{
19743 WDI_Status status = WDI_STATUS_SUCCESS;
19744 tWDA_ReqParams *pWdaParams;
19745
19746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19747 "%s: ", __func__);
19748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19749 if (NULL == pWdaParams)
19750 {
19751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19752 "%s: VOS MEM Alloc Failure", __func__);
19753 VOS_ASSERT(0);
19754 return VOS_STATUS_E_NOMEM;
19755 }
19756 pWdaParams->pWdaContext = pWDA;
19757 pWdaParams->wdaMsgParam = wdaRequest;
19758 pWdaParams->wdaWdiApiMsgParam = NULL;
19759
19760 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
19761 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
19762 (void *)pWdaParams);
19763 if (IS_WDI_STATUS_FAILURE(status))
19764 {
19765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19766 "Failure to request. Free all the memory " );
19767 vos_mem_free(pWdaParams->wdaMsgParam);
19768 vos_mem_free(pWdaParams);
19769 }
19770 return CONVERT_WDI2VOS_STATUS(status);
19771}
19772
19773/*==========================================================================
19774 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
19775
19776 DESCRIPTION
19777 API to send EXTScan Get Capabilities Request to WDI
19778
19779 PARAMETERS
19780 pWDA: Pointer to WDA context
19781 wdaRequest: Pointer to EXTScan req parameters
19782===========================================================================*/
19783VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
19784 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
19785{
19786 WDI_Status status = WDI_STATUS_SUCCESS;
19787 tWDA_ReqParams *pWdaParams;
19788
19789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19790 "%s:", __func__);
19791 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19792 if (NULL == pWdaParams)
19793 {
19794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19795 "%s: VOS MEM Alloc Failure", __func__);
19796 VOS_ASSERT(0);
19797 return VOS_STATUS_E_NOMEM;
19798 }
19799 pWdaParams->pWdaContext = pWDA;
19800 pWdaParams->wdaMsgParam = wdaRequest;
19801 pWdaParams->wdaWdiApiMsgParam = NULL;
19802
19803 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
19804 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
19805 (void *)pWdaParams);
19806 if (IS_WDI_STATUS_FAILURE(status))
19807 {
19808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19809 "Failure to request. Free all the memory " );
19810 vos_mem_free(pWdaParams->wdaMsgParam);
19811 vos_mem_free(pWdaParams);
19812 }
19813 return CONVERT_WDI2VOS_STATUS(status);
19814}
19815
19816/*==========================================================================
19817 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
19818
19819 DESCRIPTION
19820 API to send Set BSSID Hotlist Request to WDI
19821
19822 PARAMETERS
19823 pWDA: Pointer to WDA context
19824 wdaRequest: Pointer to EXTScan req parameters
19825===========================================================================*/
19826VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19827 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
19828{
19829 WDI_Status status = WDI_STATUS_SUCCESS;
19830 tWDA_ReqParams *pWdaParams;
19831
19832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19833 "%s: ", __func__);
19834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19835 if (NULL == pWdaParams)
19836 {
19837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19838 "%s: VOS MEM Alloc Failure", __func__);
19839 VOS_ASSERT(0);
19840 return VOS_STATUS_E_NOMEM;
19841 }
19842 pWdaParams->pWdaContext = pWDA;
19843 pWdaParams->wdaMsgParam = wdaRequest;
19844 pWdaParams->wdaWdiApiMsgParam = NULL;
19845
19846 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
19847 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
19848 (void *)pWdaParams);
19849 if (IS_WDI_STATUS_FAILURE(status))
19850 {
19851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19852 "Failure to request. Free all the memory " );
19853 vos_mem_free(pWdaParams->wdaMsgParam);
19854 vos_mem_free(pWdaParams);
19855 }
19856 return CONVERT_WDI2VOS_STATUS(status);
19857}
19858
19859/*==========================================================================
19860 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
19861
19862 DESCRIPTION
19863 API to send Reset BSSID Hotlist Request to WDI
19864
19865 PARAMETERS
19866 pWDA: Pointer to WDA context
19867 wdaRequest: Pointer to EXTScan req parameters
19868===========================================================================*/
19869VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19870 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
19871{
19872 WDI_Status status = WDI_STATUS_SUCCESS;
19873 tWDA_ReqParams *pWdaParams;
19874
19875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19876 "%s:", __func__);
19877 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19878 if (NULL == pWdaParams)
19879 {
19880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19881 "%s: VOS MEM Alloc Failure", __func__);
19882 VOS_ASSERT(0);
19883 return VOS_STATUS_E_NOMEM;
19884 }
19885 pWdaParams->pWdaContext = pWDA;
19886 pWdaParams->wdaMsgParam = wdaRequest;
19887 pWdaParams->wdaWdiApiMsgParam = NULL;
19888
19889 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
19890 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
19891 (void *)pWdaParams);
19892 if (IS_WDI_STATUS_FAILURE(status))
19893 {
19894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19895 "Failure to request. Free all the memory " );
19896 vos_mem_free(pWdaParams->wdaMsgParam);
19897 vos_mem_free(pWdaParams);
19898 }
19899 return CONVERT_WDI2VOS_STATUS(status);
19900}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019901
19902/*==========================================================================
19903 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
19904
19905 DESCRIPTION
19906 API to send Set SSID Hotlist Request to WDI
19907
19908 PARAMETERS
19909 pWDA: Pointer to WDA context
19910 wdaRequest: Pointer to EXTScan req parameters
19911===========================================================================*/
19912VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
19913 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
19914{
19915 WDI_Status status = WDI_STATUS_SUCCESS;
19916 tWDA_ReqParams *pWdaParams;
19917
19918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19919 "%s: ", __func__);
19920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19921 if (NULL == pWdaParams)
19922 {
19923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19924 "%s: VOS MEM Alloc Failure", __func__);
19925 VOS_ASSERT(0);
19926 return VOS_STATUS_E_NOMEM;
19927 }
19928 pWdaParams->pWdaContext = pWDA;
19929 pWdaParams->wdaMsgParam = wdaRequest;
19930 pWdaParams->wdaWdiApiMsgParam = NULL;
19931
19932 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
19933 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19934 (void *)pWdaParams);
19935 if (IS_WDI_STATUS_FAILURE(status))
19936 {
19937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19938 "Failure to request. Free all the memory " );
19939 vos_mem_free(pWdaParams->wdaMsgParam);
19940 vos_mem_free(pWdaParams);
19941 }
19942 return CONVERT_WDI2VOS_STATUS(status);
19943}
19944
19945/*==========================================================================
19946 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19947
19948 DESCRIPTION
19949 API to send Reset SSID Hotlist Request to WDI
19950
19951 PARAMETERS
19952 pWDA: Pointer to WDA context
19953 wdaRequest: Pointer to EXTScan req parameters
19954===========================================================================*/
19955VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
19956 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
19957{
19958 WDI_Status status = WDI_STATUS_SUCCESS;
19959 tWDA_ReqParams *pWdaParams;
19960
19961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19962 "%s:", __func__);
19963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19964 if (NULL == pWdaParams)
19965 {
19966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19967 "%s: VOS MEM Alloc Failure", __func__);
19968 VOS_ASSERT(0);
19969 return VOS_STATUS_E_NOMEM;
19970 }
19971 pWdaParams->pWdaContext = pWDA;
19972 pWdaParams->wdaMsgParam = wdaRequest;
19973 pWdaParams->wdaWdiApiMsgParam = NULL;
19974
19975 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
19976 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
19977 (void *)pWdaParams);
19978 if (IS_WDI_STATUS_FAILURE(status))
19979 {
19980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19981 "Failure to request. Free all the memory " );
19982 vos_mem_free(pWdaParams->wdaMsgParam);
19983 vos_mem_free(pWdaParams);
19984 }
19985 return CONVERT_WDI2VOS_STATUS(status);
19986}
19987
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053019988/*==========================================================================
19989 FUNCTION WDA_ProcessHighPriorityDataInfoInd
19990
19991 DESCRIPTION
19992 API to send Reset SSID Hotlist Request to WDI
19993
19994 PARAMETERS
19995 pWDA: Pointer to WDA context
19996 wdaRequest: Pointer to EXTScan req parameters
19997===========================================================================*/
19998VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
19999 tSirHighPriorityDataInfoInd *wdaRequest)
20000{
20001 WDI_Status status = WDI_STATUS_SUCCESS;
20002
20003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20004 "%s:", __func__);
20005
20006 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20007 if (WDI_STATUS_PENDING == status)
20008 {
20009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20010 FL("pending status received "));
20011 }
20012 else if (WDI_STATUS_SUCCESS_SYNC != status)
20013 {
20014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20015 FL("Failure status %d"), status);
20016 }
20017 return CONVERT_WDI2VOS_STATUS(status);
20018}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020019
Dino Mycle41bdc942014-06-10 11:30:24 +053020020#endif /* WLAN_FEATURE_EXTSCAN */
20021
Sunil Duttbd736ed2014-05-26 21:19:41 +053020022#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20023
20024/*==========================================================================
20025 FUNCTION WDA_LLStatsSetRspCallback
20026
20027 DESCRIPTION
20028 API to process set link layer statistics response from FW
20029
20030 PARAMETERS
20031 pRsp: Pointer to set link layer statistics response
20032 pUserData: Pointer to user data
20033
20034 RETURN VALUE
20035 NONE
20036
20037===========================================================================*/
20038void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20039{
20040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20041
20042
20043 if (NULL == pWdaParams)
20044 {
20045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20046 "%s: pWdaParams received NULL", __func__);
20047 VOS_ASSERT(0) ;
20048 return ;
20049 }
20050
20051 /* Do not need to send notification to upper layer
20052 * Just free allocated resources */
20053 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20054 {
20055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20056 }
20057 if (pWdaParams->wdaMsgParam != NULL)
20058 {
20059 vos_mem_free(pWdaParams->wdaMsgParam);
20060 }
20061 vos_mem_free(pWdaParams) ;
20062
20063 return;
20064}
20065
20066/*==========================================================================
20067 FUNCTION WDA_ProcessLLStatsSetReq
20068
20069 DESCRIPTION
20070 API to send Set Link Layer Stats request to WDI
20071
20072 PARAMETERS
20073 pWDA: Pointer to WDA context
20074 wdaRequest: Pointer to set Link Layer Stats req parameters
20075===========================================================================*/
20076VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20077 tSirLLStatsSetReq *wdaRequest)
20078{
20079 WDI_Status status = WDI_STATUS_SUCCESS;
20080 tWDA_ReqParams *pWdaParams;
20081
20082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20083 if (NULL == pWdaParams)
20084 {
20085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20086 "%s: VOS MEM Alloc Failure", __func__);
20087 VOS_ASSERT(0);
20088 return VOS_STATUS_E_NOMEM;
20089 }
20090 pWdaParams->pWdaContext = pWDA;
20091 pWdaParams->wdaMsgParam = wdaRequest;
20092 pWdaParams->wdaWdiApiMsgParam = NULL;
20093
20094 status = WDI_LLStatsSetReq((void *)wdaRequest,
20095 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20096 (void *)pWdaParams);
20097 if (IS_WDI_STATUS_FAILURE(status))
20098 {
20099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20100 "Failure to request. Free all the memory " );
20101 vos_mem_free(pWdaParams->wdaMsgParam);
20102 vos_mem_free(pWdaParams);
20103 }
20104 return CONVERT_WDI2VOS_STATUS(status);
20105}
20106
20107/*==========================================================================
20108 FUNCTION WDA_LLStatsGetRspCallback
20109
20110 DESCRIPTION
20111 API to process get link layer statistics response from FW
20112
20113 PARAMETERS
20114 pRsp: Pointer to get link layer statistics response
20115 pUserData: Pointer to user data
20116
20117 RETURN VALUE
20118 NONE
20119
20120===========================================================================*/
20121void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20122{
20123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20124
20125 if (NULL == pWdaParams)
20126 {
20127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20128 "%s: pWdaParams received NULL", __func__);
20129 VOS_ASSERT(0) ;
20130 return ;
20131 }
20132
20133 /* Do not need to send notification to upper layer
20134 * Just free allocated resources */
20135 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20136 {
20137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20138 }
20139 if (pWdaParams->wdaMsgParam != NULL)
20140 {
20141 vos_mem_free(pWdaParams->wdaMsgParam);
20142 }
20143 vos_mem_free(pWdaParams) ;
20144
20145 return;
20146}
20147
20148/*==========================================================================
20149 FUNCTION WDA_ProcessLLStatsGetReq
20150
20151 DESCRIPTION
20152 API to send Get Link Layer Stats request to WDI
20153
20154 PARAMETERS
20155 pWDA: Pointer to WDA context
20156 wdaRequest: Pointer to get Link Layer Stats req parameters
20157===========================================================================*/
20158VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20159 tSirLLStatsGetReq *wdaRequest)
20160{
20161 WDI_Status status = WDI_STATUS_SUCCESS;
20162 tWDA_ReqParams *pWdaParams;
20163
20164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20165 if (NULL == pWdaParams)
20166 {
20167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20168 "%s: VOS MEM Alloc Failure", __func__);
20169 VOS_ASSERT(0);
20170 return VOS_STATUS_E_NOMEM;
20171 }
20172 pWdaParams->pWdaContext = pWDA;
20173 pWdaParams->wdaMsgParam = wdaRequest;
20174 pWdaParams->wdaWdiApiMsgParam = NULL;
20175
20176 status = WDI_LLStatsGetReq((void *) wdaRequest,
20177 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20178 (void *)pWdaParams);
20179 if (IS_WDI_STATUS_FAILURE(status))
20180 {
20181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20182 "Failure to request. Free all the memory " );
20183 vos_mem_free(pWdaParams->wdaMsgParam);
20184 vos_mem_free(pWdaParams);
20185 }
20186 return CONVERT_WDI2VOS_STATUS(status);
20187}
20188
20189/*==========================================================================
20190 FUNCTION WDA_LLStatsClearRspCallback
20191
20192 DESCRIPTION
20193 API to process clear link layer statistics response from FW
20194
20195 PARAMETERS
20196 pRsp: Pointer to clear link layer statistics response
20197 pUserData: Pointer to user data
20198
20199 RETURN VALUE
20200 NONE
20201
20202===========================================================================*/
20203void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20204{
20205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20206
20207
20208 if (NULL == pWdaParams)
20209 {
20210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20211 "%s: pWdaParams received NULL", __func__);
20212 VOS_ASSERT(0) ;
20213 return ;
20214 }
20215 /* Do not need to send notification to upper layer
20216 * Just free allocated resources */
20217 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20218 {
20219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20220 }
20221 if (pWdaParams->wdaMsgParam != NULL)
20222 {
20223 vos_mem_free(pWdaParams->wdaMsgParam);
20224 }
20225 vos_mem_free(pWdaParams) ;
20226 return;
20227}
20228
20229/*==========================================================================
20230 FUNCTION WDA_ProcessLLStatsClearReq
20231
20232 DESCRIPTION
20233 API to send Clear Link Layer Stats request to WDI
20234
20235 PARAMETERS
20236 pWDA: Pointer to WDA context
20237 wdaRequest: Pointer to earLink Layer Stats req
20238===========================================================================*/
20239VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20240 tSirLLStatsClearReq *wdaRequest)
20241{
20242 WDI_Status status = WDI_STATUS_SUCCESS;
20243 tWDA_ReqParams *pWdaParams;
20244
20245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20246 if (NULL == pWdaParams)
20247 {
20248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20249 "%s: VOS MEM Alloc Failure", __func__);
20250 VOS_ASSERT(0);
20251 return VOS_STATUS_E_NOMEM;
20252 }
20253 pWdaParams->pWdaContext = pWDA;
20254 pWdaParams->wdaMsgParam = wdaRequest;
20255 pWdaParams->wdaWdiApiMsgParam = NULL;
20256
20257 status = WDI_LLStatsClearReq((void *) wdaRequest,
20258 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20259 (void *)pWdaParams);
20260 if (IS_WDI_STATUS_FAILURE(status))
20261 {
20262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20263 "Failure to request. Free all the memory " );
20264 vos_mem_free(pWdaParams->wdaMsgParam);
20265 vos_mem_free(pWdaParams);
20266 }
20267 return CONVERT_WDI2VOS_STATUS(status);
20268}
20269
20270#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020271
Abhishek Singh85b74712014-10-08 11:38:19 +053020272void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20273{
20274 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20275
20276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20277 "<------ %s " ,__func__);
20278 if (NULL == fwStatsinfo)
20279 {
20280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20281 "%s: pWdaParams received NULL", __func__);
20282 VOS_ASSERT(0);
20283 return;
20284 }
20285
20286 if(fwStatsinfo->callback)
20287 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20288
20289 vos_mem_free(pUserData);
20290 return;
20291}
20292
20293
20294v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20295 tSirFWStatsGetReq *pData)
20296{
20297
20298 WDI_Status wdiStatus;
20299 tSirFWStatsInfo *fwStatsinfo;
20300
20301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20302 "------> %s" , __func__);
20303
20304 fwStatsinfo =
20305 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20306 if (NULL == fwStatsinfo)
20307 {
20308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20309 "%s: VOS MEM Alloc Failure", __func__);
20310 VOS_ASSERT(0);
20311 vos_mem_free(pData);
20312 return;
20313 }
20314
20315 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20316 fwStatsinfo->data = pData->data;
20317
20318 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20319 WDA_FWStatsGetRspCallback,
20320 pData->stats);
20321 if (WDI_STATUS_PENDING == wdiStatus)
20322 {
20323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20324 "Pending received for %s:%d ", __func__, __LINE__);
20325 }
20326 else if (WDI_STATUS_SUCCESS != wdiStatus)
20327 {
20328 if (fwStatsinfo->callback)
20329 {
20330 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20331 }
20332 vos_mem_free(fwStatsinfo);
20333 }
20334 vos_mem_free(pData);
20335}
20336
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020337/*==========================================================================
20338 FUNCTION WDA_EncryptMsgRspCallback
20339
20340 DESCRIPTION
20341 API to send Encrypt message response to HDD
20342
20343 PARAMETERS
20344 pEventData: Response from FW
20345 pUserData: Data sent to firmware as part of request
20346===========================================================================*/
20347void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20348 void* pUserData)
20349{
20350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20351 tWDA_CbContext *pWDA = NULL;
20352 tpAniSirGlobal pMac;
20353 vos_msg_t vosMsg;
20354 tpSirEncryptedDataRspParams pEncRspParams;
20355 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20356
20357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20358 FL("%s:"), __func__);
20359 if (NULL == pWdaParams)
20360 {
20361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20362 FL("%s: pWdaParams received NULL"), __func__);
20363 VOS_ASSERT(0);
20364 return;
20365 }
20366
20367 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20368
20369 if (NULL == pWDA)
20370 {
20371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20372 FL("%s: pWDA received NULL"), __func__);
20373 VOS_ASSERT(0);
20374 goto error;
20375 }
20376
20377 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20378 if (NULL == pMac)
20379 {
20380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20381 FL("%s:pMac is NULL"), __func__);
20382 VOS_ASSERT(0);
20383 goto error;
20384 }
20385
20386 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
20387
20388 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
20389 if (NULL == pEncRspParams)
20390 {
20391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20392 FL("%s: VOS MEM Alloc Failure"), __func__);
20393 VOS_ASSERT(0);
20394 goto error;
20395 }
20396
20397 /* Message Header */
20398 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
20399 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
20400 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
20401 pEncryptedDataRsp->encryptedPayload.length;
20402 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
20403 pEncryptedDataRsp->encryptedPayload.data,
20404 pEncryptedDataRsp->encryptedPayload.length);
20405
20406 /* VOS message wrapper */
20407 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
20408 vosMsg.bodyptr = (void *)pEncRspParams;
20409 vosMsg.bodyval = 0;
20410
20411 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20412 {
20413 /* free the mem */
20414 vos_mem_free((v_VOID_t *) pEncRspParams);
20415 }
20416
20417error:
20418
20419 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20420 {
20421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20422 }
20423 if (pWdaParams->wdaMsgParam != NULL)
20424 {
20425 vos_mem_free(pWdaParams->wdaMsgParam);
20426 }
20427 vos_mem_free(pWdaParams) ;
20428
20429 return;
20430}
20431/*==========================================================================
20432 FUNCTION WDA_ProcessEncryptMsgReq
20433
20434 DESCRIPTION
20435 API to send Encrypt message Request to WDI
20436
20437 PARAMETERS
20438 pWDA: Pointer to WDA context
20439 wdaRequest: Pointer to Encrypt_msg req parameters
20440===========================================================================*/
20441VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
20442 u8 *wdaRequest)
20443{
20444 WDI_Status status = WDI_STATUS_SUCCESS;
20445 tWDA_ReqParams *pWdaParams;
20446
20447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20448 FL("%s: "), __func__);
20449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20450 if (NULL == pWdaParams)
20451 {
20452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20453 FL("%s: VOS MEM Alloc Failure"), __func__);
20454 VOS_ASSERT(0);
20455 return VOS_STATUS_E_NOMEM;
20456 }
20457 pWdaParams->pWdaContext = pWDA;
20458 pWdaParams->wdaMsgParam = wdaRequest;
20459 pWdaParams->wdaWdiApiMsgParam = NULL;
20460
20461 status = WDI_EncryptMsgReq((void *)wdaRequest,
20462 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
20463 (void *)pWdaParams);
20464 if (IS_WDI_STATUS_FAILURE(status))
20465 {
20466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20467 FL("Failure to request. Free all the memory " ));
20468 vos_mem_free(pWdaParams->wdaMsgParam);
20469 vos_mem_free(pWdaParams);
20470 }
20471 return CONVERT_WDI2VOS_STATUS(status);
20472}
Abhishek Singh41988ba2015-05-25 19:42:29 +053020473/*==========================================================================
20474 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
20475
20476 DESCRIPTION
20477 API to enable/disable RTS/CTS for different modes.
20478
20479 PARAMETERS
20480 pWDA: Pointer to WDA context
20481 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
20482===========================================================================*/
20483
20484VOS_STATUS
20485WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
20486 tANI_U32 rtsCtsVal)
20487{
20488 WDI_Status status;
20489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20490 FL("---> %s"), __func__);
20491 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
20492 if (WDI_STATUS_PENDING == status)
20493 {
20494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20495 FL("pending status received "));
20496 }
20497 else if (WDI_STATUS_SUCCESS_SYNC != status)
20498 {
20499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20500 FL("Failure status %d"), status);
20501 }
20502 return CONVERT_WDI2VOS_STATUS(status) ;
20503}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020504
20505void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053020506{
20507 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020508 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053020509
20510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20511 "<------ %s " ,__func__);
20512 if (NULL == pWdaParams)
20513 {
20514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20515 "%s: pWdaParams received NULL", __func__);
20516 VOS_ASSERT(0) ;
20517 return ;
20518 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020519 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
20520 if (pData != NULL) {
20521 pData->callback(pData->magic, pData->cmpVar);
20522 vos_mem_free(pWdaParams->wdaMsgParam);
20523 }
Katya Nigamf0511f62015-05-05 16:40:57 +053020524 vos_mem_free(pWdaParams) ;
20525
20526 return;
20527}
20528
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020529VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053020530{
20531
20532 WDI_Status status = WDI_STATUS_SUCCESS;
20533 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020534 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053020535
20536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20537 FL("%s: "), __func__);
20538 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20539 if (NULL == pWdaParams)
20540 {
20541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20542 FL("%s: VOS MEM Alloc Failure"), __func__);
20543 VOS_ASSERT(0);
20544 return VOS_STATUS_E_NOMEM;
20545 }
20546 pWdaParams->pWdaContext = pWDA;
20547 pWdaParams->wdaMsgParam = wdaRequest;
20548 pWdaParams->wdaWdiApiMsgParam = NULL;
20549
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020550 status = WDI_MonStartReq(pMonModeData->data,
20551 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020552 (void *)pWdaParams);
20553 if (IS_WDI_STATUS_FAILURE(status))
20554 {
20555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20556 "Failure to request. Free all the memory " );
20557 vos_mem_free(pWdaParams->wdaMsgParam);
20558 vos_mem_free(pWdaParams);
20559 }
20560 return CONVERT_WDI2VOS_STATUS(status);
20561}
20562
Katya Nigamf0511f62015-05-05 16:40:57 +053020563VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
20564{
20565
20566 WDI_Status status = WDI_STATUS_SUCCESS;
20567 tWDA_ReqParams *pWdaParams;
20568
20569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20570 FL("%s: "), __func__);
20571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20572 if (NULL == pWdaParams)
20573 {
20574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20575 FL("%s: VOS MEM Alloc Failure"), __func__);
20576 VOS_ASSERT(0);
20577 return VOS_STATUS_E_NOMEM;
20578 }
20579 pWdaParams->pWdaContext = pWDA;
20580 pWdaParams->wdaMsgParam = wdaRequest;
20581 pWdaParams->wdaWdiApiMsgParam = NULL;
20582
Bhargav Shah1ae5de02015-07-20 13:32:31 +053020583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20584 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020585 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020586 (void *)pWdaParams);
20587
20588 if (IS_WDI_STATUS_FAILURE(status))
20589 {
20590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20591 "Failure to request. Free all the memory " );
20592 vos_mem_free(pWdaParams->wdaMsgParam);
20593 vos_mem_free(pWdaParams);
20594 }
20595 return CONVERT_WDI2VOS_STATUS(status);
20596}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053020597
20598VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
20599{
20600 WDI_Status status;
20601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20602 FL("---> %s"), __func__);
20603 status = WDI_EnableDisableCAEventInd(val);
20604 if (WDI_STATUS_PENDING == status)
20605 {
20606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20607 FL("pending status received "));
20608 }
20609 else if (WDI_STATUS_SUCCESS_SYNC != status)
20610 {
20611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20612 FL("Failure status %d"), status);
20613 }
20614 return CONVERT_WDI2VOS_STATUS(status) ;
20615}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020616
20617/*==========================================================================
20618 FUNCTION WDA_WifiConfigSetRspCallback
20619
20620 DESCRIPTION
20621 API to process set WifiConfig response from FW
20622
20623 PARAMETERS
20624 pRsp: Pointer to set WifiConfig response
20625 pUserData: Pointer to user data
20626
20627 RETURN VALUE
20628 NONE
20629
20630===========================================================================*/
20631void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
20632{
20633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20634
20635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20636 "<------ %s " ,__func__);
20637
20638 if(NULL == pWdaParams)
20639 {
20640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20641 "%s: pWdaParams received NULL", __func__);
20642 VOS_ASSERT(0);
20643 return ;
20644 }
20645
20646 if(NULL == pWdaParams->wdaMsgParam)
20647 {
20648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20649 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
20650 VOS_ASSERT(0);
20651 vos_mem_free(pWdaParams);
20652 return ;
20653 }
20654
20655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20656 vos_mem_free(pWdaParams->wdaMsgParam);
20657 vos_mem_free(pWdaParams);
20658
20659 return;
20660}
20661
20662/*==========================================================================
20663 FUNCTION WDA_ProcessWifiConfigReq
20664
20665 DESCRIPTION
20666 API to send Set WifiConfig params request to WDI
20667
20668 PARAMETERS
20669 pWDA: Pointer to WDA context
20670 wdaRequest: Pointer to set WifiConfig req parameters
20671===========================================================================*/
20672
20673VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
20674 tSetWifiConfigParams *pwdaWificonfig)
20675{
20676 WDI_Status status = WDI_STATUS_SUCCESS;
20677 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
20678 tWDA_ReqParams *pWdaParams ;
20679 WDI_Status wstatus;
20680
20681 /* Sanity Check*/
20682 if(NULL == pwdaWificonfig)
20683 {
20684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20685 "%s: tSetWifiConfigParams received NULL", __func__);
20686 VOS_ASSERT(0) ;
20687 return VOS_STATUS_E_FAULT;
20688 }
20689
20690 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
20691 sizeof(WDI_WifiConfigSetReqType));
20692 if(NULL == pwdiWifConfigSetReqParams)
20693 {
20694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20695 "%s: VOS MEM Alloc Failure", __func__);
20696 VOS_ASSERT(0);
20697 vos_mem_free(pwdaWificonfig);
20698 return VOS_STATUS_E_NOMEM;
20699 }
20700
20701 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20702 if(NULL == pWdaParams)
20703 {
20704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20705 "%s: VOS MEM Alloc Failure", __func__);
20706 VOS_ASSERT(0);
20707 vos_mem_free(pwdiWifConfigSetReqParams);
20708 vos_mem_free(pwdaWificonfig);
20709 return VOS_STATUS_E_NOMEM;
20710 }
20711 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
20712 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
20713 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
20714 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
20715
20716 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053020717 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020718 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
20719
20720 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
20721 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
20722 pWdaParams);
20723 if(IS_WDI_STATUS_FAILURE(wstatus))
20724 {
20725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20726 "Failure in sendind WifiConfigReq, free all the memory" );
20727 status = CONVERT_WDI2VOS_STATUS(wstatus);
20728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20729 vos_mem_free(pWdaParams->wdaMsgParam);
20730 vos_mem_free(pWdaParams);
20731 }
20732
20733 return status;
20734
20735}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020736
20737#ifdef FEATURE_OEM_DATA_SUPPORT
20738/*
20739 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
20740 * Request to WDI.
20741 */
20742VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
20743 tOemDataReqNewConfig *pOemDataReqNewConfig)
20744{
20745 VOS_STATUS status = VOS_STATUS_SUCCESS;
20746 WDI_Status wstatus;
20747 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
20748
20749 /* Sanity Check*/
20750 if(NULL == pOemDataReqNewConfig)
20751 {
20752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20753 "%s: pOemDataReqNewConfig received NULL", __func__);
20754 VOS_ASSERT(0) ;
20755 return VOS_STATUS_E_FAULT;
20756 }
20757
20758 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
20759 sizeof(WDI_OemDataReqNewConfig));
20760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20761 "------> %s " ,__func__);
20762
20763 if(NULL == wdiOemDataReqNewConfig)
20764 {
20765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20766 "%s: VOS MEM Alloc Failure", __func__);
20767 VOS_ASSERT(0);
20768 vos_mem_free(pOemDataReqNewConfig);
20769 return VOS_STATUS_E_NOMEM;
20770 }
20771
20772 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
20773 sizeof(WDI_OemDataReqNewConfig));
20774
20775 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
20776
20777 if (WDI_STATUS_PENDING == wstatus)
20778 {
20779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20780 FL("pending status received "));
20781 }
20782 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
20783 {
20784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20785 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
20786 vos_mem_free(wdiOemDataReqNewConfig);
20787 }
20788
20789 // Free the memory allocated in sme_OemDataReqNew
20790 vos_mem_free(pOemDataReqNewConfig);
20791
20792 return status;
20793}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020794
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +053020795void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
20796 void *pUserData)
20797{
20798 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
20799 (tSirAntennaDiversitySelectionInfo *)pUserData;
20800
20801 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
20802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20803 "<------ %s " ,__func__);
20804 if (NULL == pAntennaDivSelInfo)
20805 {
20806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20807 "%s: pWdaParams received NULL", __func__);
20808 VOS_ASSERT(0) ;
20809 return ;
20810 }
20811 if (NULL == resParams)
20812 {
20813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20814 "%s: resParams received NULL", __func__);
20815 VOS_ASSERT(0) ;
20816 return ;
20817 }
20818
20819 if (pAntennaDivSelInfo->callback)
20820 {
20821 if (WDI_STATUS_SUCCESS == status)
20822 {
20823 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
20824 pAntennaDivSelInfo->data);
20825 }
20826 else
20827 {
20828 pAntennaDivSelInfo->callback(-1,
20829 pAntennaDivSelInfo->data);
20830 }
20831 }
20832
20833 vos_mem_free(pUserData);
20834 return;
20835}
20836
20837/*
20838 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
20839 * Request to WDI.
20840 */
20841v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
20842 tSirAntennaDiversitySelectionReq *pData)
20843{
20844 WDI_Status wdiStatus;
20845 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
20846
20847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20848 "------> %s " , __func__);
20849
20850 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
20851 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
20852 if (NULL == pAntennaDivSelInfo)
20853 {
20854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20855 "%s: VOS MEM Alloc Failure", __func__);
20856 VOS_ASSERT(0);
20857 vos_mem_free(pData);
20858 return;
20859 }
20860
20861 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
20862 pAntennaDivSelInfo->data = pData->data;
20863
20864 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
20865 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
20866
20867 if (WDI_STATUS_PENDING == wdiStatus)
20868 {
20869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20870 "Pending received for %s:%d ", __func__, __LINE__);
20871 }
20872 else if (WDI_STATUS_SUCCESS != wdiStatus)
20873 {
20874 if (pAntennaDivSelInfo->callback)
20875 {
20876 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
20877 }
20878 }
20879
20880 vos_mem_free(pData);
20881 return;
20882}
20883
20884#endif