blob: a21df765bdfe0a362d844ff56080ab6875d6fc5a [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 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 Singhe721fb42015-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 Saptasagarcfc65ae2015-12-22 15:06:10 +0530285
286v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
287 tSirAntennaDiversitySelectionReq *pData);
288
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530289VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
290 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530291/*
292 * FUNCTION: WDA_ProcessNanRequest
293 * Process NAN request
294 */
295VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
296 tNanRequest *wdaRequest)
297{
298 WDI_Status status = WDI_STATUS_SUCCESS;
299 tWDA_ReqParams *pWdaParams;
300 WDI_NanRequestType *wdiRequest = NULL;
301 size_t wdiReqLength = sizeof(WDI_NanRequestType)
302 - sizeof(wdiRequest->request_data)
303 + wdaRequest->request_data_len;
304
305 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
306
307 if (NULL == wdiRequest)
308 {
309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
310 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
311 wdiReqLength);
312 vos_mem_free(wdaRequest);
313 return VOS_STATUS_E_NOMEM;
314 }
315
316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
317 "WDA: Process Nan Request length: %zu", wdiReqLength);
318
319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
320 if (NULL == pWdaParams)
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
324 VOS_ASSERT(0);
325 vos_mem_free(wdaRequest);
326 vos_mem_free(wdiRequest);
327 return VOS_STATUS_E_NOMEM;
328 }
329
330 wdiRequest->request_data_len = wdaRequest->request_data_len;
331
332 vos_mem_copy( wdiRequest->request_data,
333 wdaRequest->request_data,
334 wdaRequest->request_data_len);
335
336 vos_mem_free(wdaRequest);
337
338 pWdaParams->pWdaContext = pWDA;
339 pWdaParams->wdaMsgParam = NULL;
340 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
341
342 status = WDI_NanRequest(wdiRequest, pWdaParams);
343
344 if (IS_WDI_STATUS_FAILURE(status))
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
347 "Failure to request. Free all the memory " );
348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
349 vos_mem_free(pWdaParams);
350 }
351
352 return CONVERT_WDI2VOS_STATUS(status) ;
353}
354
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530355/**
356 * wda_state_info_dump() - prints state information of wda layer
357 */
358static void wda_state_info_dump(void)
359{
360 v_CONTEXT_t vos_ctx_ptr = NULL;
361 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530362
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
364 "<------ %s " ,__func__);
365
366 /* Get the Global VOSS Context */
367 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
368
369 if (NULL != vos_ctx_ptr)
370 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
371 vos_ctx_ptr );
372 else {
373 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
374 "%s: Invalid Global VOSS Context", __func__);
375 VOS_ASSERT(0);
376 return;
377 }
378
379 if (NULL != wda)
380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
381 "wdaState: %d linkState: %d", wda->wdaState,
382 wda->linkState);
383 else {
384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
385 "%s: Invalid WDA Context", __func__);
386 VOS_ASSERT(0);
387 }
388}
389
390/**
391 * wda_register_debug_callback() - registration function for wda layer
392 * to print wda state information
393 */
394static void wda_register_debug_callback(void)
395{
396 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
397}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530398
Jeff Johnson295189b2012-06-20 16:38:30 -0700399/*
400 * FUNCTION: WDA_open
401 * Allocate the WDA context
402 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530403VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 tMacOpenParameters *pMacParams )
405{
406 tWDA_CbContext *wdaContext;
407 VOS_STATUS status;
408 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530410 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
412 if(!VOS_IS_STATUS_SUCCESS(status))
413 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
415 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 return VOS_STATUS_E_NOMEM;
417 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /*__asm int 3;*/
419 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
420
421 /* Initialize data structures */
422 wdaContext->pVosContext = pVosContext;
423 wdaContext->wdaState = WDA_INIT_STATE;
424 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
425
426 /* Initialize WDA-WDI synchronization event */
427 status = vos_event_init(&wdaContext->wdaWdiEvent);
428 if(!VOS_IS_STATUS_SUCCESS(status))
429 {
430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800431 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800432 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 /* Init Frame transfer event */
435 status = vos_event_init(&wdaContext->txFrameEvent);
436 if(!VOS_IS_STATUS_SUCCESS(status))
437 {
438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800439 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800440 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 status = vos_event_init(&wdaContext->suspendDataTxEvent);
443 if(!VOS_IS_STATUS_SUCCESS(status))
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800446 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800447 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
450 if(!VOS_IS_STATUS_SUCCESS(status))
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800453 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800454 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530458 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 &wdiDevCapability, pMacParams->driverType))
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
462 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800463 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 }
465 else
466 {
467 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
468 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
469 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* update max STA in WDA used for BA */
471 wdaContext->wdaMaxSta = pMacParams->maxStation;
472 /* store the frameTransRequired flag in wdaContext, to send this to HAL
473 * in WDA_Start
474 */
475 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
476 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530477
478 wda_register_debug_callback();
479
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800481
482error:
483 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
484 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485}
486
Jeff Johnson295189b2012-06-20 16:38:30 -0700487/*
488 * FUNCTION: WDA_preStart
489 * Trigger DAL-AL to start CFG download
490 */
491VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
492{
493 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
494 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 /*
496 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
497 */
498 wdaMsg.type = WNI_CFG_DNLD_REQ ;
499 wdaMsg.bodyptr = NULL;
500 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 /* post the message.. */
502 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
503 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
504 {
505 vosStatus = VOS_STATUS_E_BADMSG;
506 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 return( vosStatus );
508}
Jeff Johnson295189b2012-06-20 16:38:30 -0700509/*
510 * FUNCTION: WDA_wdiStartCallback
511 * Once WDI_Start is finished, WDI start callback will be called by WDI
512 * to indicate completion of WDI_Start.
513 */
514void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
515 void *pVosContext)
516{
517 tWDA_CbContext *wdaContext;
518 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 if (NULL == pVosContext)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
526 if (NULL == wdaContext)
527 {
528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700529 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 return;
531 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 }
537 else
538 {
539 wdaContext->wdaState = WDA_START_STATE;
540 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 /* extract and save version information from the Start Response */
542 wdaContext->wcnssWlanCompiledVersion.major =
543 wdiRspParams->wlanCompiledVersion.major;
544 wdaContext->wcnssWlanCompiledVersion.minor =
545 wdiRspParams->wlanCompiledVersion.minor;
546 wdaContext->wcnssWlanCompiledVersion.version =
547 wdiRspParams->wlanCompiledVersion.version;
548 wdaContext->wcnssWlanCompiledVersion.revision =
549 wdiRspParams->wlanCompiledVersion.revision;
550 wdaContext->wcnssWlanReportedVersion.major =
551 wdiRspParams->wlanReportedVersion.major;
552 wdaContext->wcnssWlanReportedVersion.minor =
553 wdiRspParams->wlanReportedVersion.minor;
554 wdaContext->wcnssWlanReportedVersion.version =
555 wdiRspParams->wlanReportedVersion.version;
556 wdaContext->wcnssWlanReportedVersion.revision =
557 wdiRspParams->wlanReportedVersion.revision;
558 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
559 wdiRspParams->wcnssSoftwareVersion,
560 sizeof(wdaContext->wcnssSoftwareVersionString));
561 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
562 wdiRspParams->wcnssHardwareVersion,
563 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 /* Notify WDA_start that WDI_Start has completed */
565 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700566 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 {
568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700569 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 return;
572}
573
Jeff Johnson295189b2012-06-20 16:38:30 -0700574/*
575 * FUNCTION: WDA_start
576 * Prepare TLV configuration and call WDI_Start.
577 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700578VOS_STATUS WDA_start(v_PVOID_t pVosContext)
579{
580 tWDA_CbContext *wdaContext;
581 VOS_STATUS status;
582 WDI_Status wdiStatus;
583 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 if (NULL == pVosContext)
585 {
586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700587 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 return VOS_STATUS_E_FAILURE;
589 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
591 if (NULL == wdaContext)
592 {
593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700594 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 return VOS_STATUS_E_FAILURE;
596 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 /* Non-FTM mode, WDA status for START must be INIT
598 * FTM mode, WDA Status for START can be INIT or STOP */
599 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
600 (WDA_STOP_STATE != wdaContext->wdaState) )
601 {
602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
603 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700604 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 return VOS_STATUS_E_FAILURE;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* initialize the wdiStartParam. Note that we can create this on
608 the stack since we won't exit until WDI_Start() completes or
609 times out */
610 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* prepare the config TLV for the WDI */
613 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
614 if ( !VOS_IS_STATUS_SUCCESS(status) )
615 {
616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* note from here onwards if an error occurs we must
621 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
623 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
624 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* initialize the WDA-WDI synchronization event */
626 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* call WDI start */
628 wdiStatus = WDI_Start(&wdiStartParam,
629 (WDI_StartRspCb)WDA_wdiStartCallback,
630 (v_VOID_t *)pVosContext);
631 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700634 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 vos_mem_free(wdiStartParam.pConfigBuffer);
636 return VOS_STATUS_E_FAILURE;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* wait for WDI start to invoke our callback */
639 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
640 WDA_WDI_START_TIMEOUT );
641 if ( !VOS_IS_STATUS_SUCCESS(status) )
642 {
643 if ( VOS_STATUS_E_TIMEOUT == status )
644 {
645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700646 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 }
648 else
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
651 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700652 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 }
654 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530655 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* we no longer need the config TLV */
659 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* if we are not in the START state then WDI_Start() failed */
661 if (WDA_START_STATE != wdaContext->wdaState)
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700664 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 return VOS_STATUS_E_FAILURE;
666 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 /* FTM mode does not need to monitor BA activity */
668 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
669 {
670 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800671 if(VOS_STATUS_SUCCESS == status)
672 {
673 wdaContext->wdaTimersCreated = VOS_TRUE;
674 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530675 else
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 FL("wda create timers failed"));
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 }
Leo Chang9d76f622013-08-23 16:34:52 -0700681 else
682 {
683 vos_event_init(&wdaContext->ftmStopDoneEvent);
684 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 return status;
686}
687
Jeff Johnson295189b2012-06-20 16:38:30 -0700688/*
689 * FUNCTION: WDA_prepareConfigTLV
690 * Function to prepare CFG for DAL(WDA)
691 */
692VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
693 WDI_StartReqParamsType *wdiStartParams )
694{
695 /* get pMac to acess CFG data base */
696 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
697 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
698 tHalCfg *tlvStruct = NULL ;
699 tANI_U8 *tlvStructStart = NULL ;
700 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
701 v_PVOID_t *configParam;
702 tANI_U32 configParamSize;
703 tANI_U32 *configDataValue;
704 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700705 tANI_U8 i;
706
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 if ((NULL == pMac)||(NULL == wdaContext))
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700710 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 VOS_ASSERT(0);
712 return VOS_STATUS_E_FAILURE;
713 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
715 WNI_CFG_STA_ID_LEN +
716 WNI_CFG_EDCA_WME_ACBK_LEN +
717 WNI_CFG_EDCA_WME_ACBE_LEN +
718 WNI_CFG_EDCA_WME_ACVI_LEN +
719 WNI_CFG_EDCA_WME_ACVO_LEN +
720 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 /* malloc memory for all configs in one shot */
722 configParam = vos_mem_malloc(configParamSize);
723
724 if(NULL == configParam )
725 {
726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700727 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700728 VOS_ASSERT(0) ;
729 return VOS_STATUS_E_NOMEM;
730 }
731 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)configParam;
734 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* TODO: Remove Later */
736 /* QWLAN_HAL_CFG_STA_ID */
737 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
738 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
739 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
740 eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_STA_ID");
744 goto handle_failure;
745 }
746 tlvStruct->length = strLength ;
747 /* calculate the pad bytes to have the CFG in aligned format */
748 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
749 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
751 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700752 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
753 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
754 tlvStruct->length = sizeof(tANI_U32);
755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
756 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
757 != eSIR_SUCCESS)
758 {
759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
760 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
761 goto handle_failure;
762 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
770 eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
779 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
783 != eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
791
792 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
793 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
797 configDataValue ) != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
801 goto handle_failure;
802 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
804 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 /* QWLAN_HAL_CFG_CAL_PERIOD */
806 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
810 != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_CAL_PERIOD");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_CONTROL */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_CONTROL");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_PROXIMITY */
832 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_PROXIMITY");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
845 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
858 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
862 eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
884 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
888 eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
897 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
923 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
936 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length));
948
949 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
950 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
975
976 /* QWLAN_HAL_CFG_FIXED_RATE */
977 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
981 != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_FIXED_RATE");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length));
989
990 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
991 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
992 tlvStruct->length = sizeof(tANI_U32);
993 configDataValue = (tANI_U32 *)(tlvStruct + 1);
994 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
995 != eSIR_SUCCESS)
996 {
997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
998 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
999 goto handle_failure;
1000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1002 + sizeof(tHalCfg) + tlvStruct->length));
1003
1004 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1005 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1009 configDataValue ) != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1026 goto handle_failure;
1027 }
1028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1031 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1039 goto handle_failure;
1040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1044 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
1069
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1071 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1072 tlvStruct->length = sizeof(tANI_U32);
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1075 configDataValue ) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1079 goto handle_failure;
1080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1082 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1097 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1101 eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
1109
1110 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1111 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1112 tlvStruct->length = sizeof(tANI_U32);
1113 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1114 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1115 configDataValue ) != eSIR_SUCCESS)
1116 {
1117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1118 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1119 goto handle_failure;
1120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1122 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001123 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1150 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
1162
1163 /* QWLAN_HAL_CFG_STATS_PERIOD */
1164 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1168 eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_STATS_PERIOD");
1172 goto handle_failure;
1173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1177 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1190 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1194 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1211 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1212 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1215 &strLength) != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1219 goto handle_failure;
1220 }
1221 tlvStruct->length = strLength;
1222 /* calculate the pad bytes to have the CFG in aligned format */
1223 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1224 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1226 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001227 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1228 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1229 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1231 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1232 &strLength) != eSIR_SUCCESS)
1233 {
1234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1235 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1236 goto handle_failure;
1237 }
1238 tlvStruct->length = strLength;
1239 /* calculate the pad bytes to have the CFG in aligned format */
1240 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1241 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1243 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1245 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1246 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1248 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1249 &strLength) != eSIR_SUCCESS)
1250 {
1251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1252 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1253 goto handle_failure;
1254 }
1255 tlvStruct->length = strLength;
1256 /* calculate the pad bytes to have the CFG in aligned format */
1257 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1258 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1262 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1263 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1266 &strLength) != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1270 goto handle_failure;
1271 }
1272 tlvStruct->length = strLength;
1273 /* calculate the pad bytes to have the CFG in aligned format */
1274 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1275 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1279 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1283 != eSIR_SUCCESS)
1284 {
1285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1286 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1287 goto handle_failure;
1288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1292 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1305 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1318 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1326 goto handle_failure;
1327 }
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1383 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1391 goto handle_failure;
1392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1396 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1409 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1422 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1423 * into FW, so the parameters are added here.
1424 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001425 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1426 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1431 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1433 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1434 tlvStruct->length = sizeof(tANI_U32);
1435 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1436 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1437 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1438 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1440 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1441 tlvStruct->length = sizeof(tANI_U32);
1442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1443 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1444 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1445 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001446 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1447 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1448 tlvStruct->length = sizeof(tANI_U32);
1449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1450 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1451 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1452 + sizeof(tHalCfg) + tlvStruct->length) ;
1453
1454 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1455 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
1461
1462 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1463 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1464 tlvStruct->length = sizeof(tANI_U32);
1465 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1466 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1467 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1468 + sizeof(tHalCfg) + tlvStruct->length) ;
1469
1470 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1471 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1472 tlvStruct->length = sizeof(tANI_U32);
1473 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1474 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1475 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1476 + sizeof(tHalCfg) + tlvStruct->length) ;
1477
1478 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1479 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1480 tlvStruct->length = sizeof(tANI_U32);
1481 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1482 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1483 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1484 + sizeof(tHalCfg) + tlvStruct->length) ;
1485
1486 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1487 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1488 tlvStruct->length = sizeof(tANI_U32);
1489 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1490 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
1494 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1495 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1499 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1500 + sizeof(tHalCfg) + tlvStruct->length) ;
1501
1502 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1503 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1504 tlvStruct->length = sizeof(tANI_U32);
1505 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1506 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509
1510 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1511 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1512 tlvStruct->length = sizeof(tANI_U32);
1513 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1514 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1515 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1516 + sizeof(tHalCfg) + tlvStruct->length) ;
1517
1518 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1519 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1520 tlvStruct->length = sizeof(tANI_U32);
1521 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1522 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1523 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1524 + sizeof(tHalCfg) + tlvStruct->length) ;
1525
1526 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1527 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1528 tlvStruct->length = sizeof(tANI_U32);
1529 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1530 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1531 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1532 + sizeof(tHalCfg) + tlvStruct->length) ;
1533
1534 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1535 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1536 tlvStruct->length = sizeof(tANI_U32);
1537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1538 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
1541
1542 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1543 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549
Wilson Tsaof8b37942013-09-06 10:49:00 -07001550 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1551 {
1552 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1553 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1554 tlvStruct->length = sizeof(tANI_U32);
1555 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1556 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1557 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1558 + sizeof(tHalCfg) + tlvStruct->length) ;
1559
1560 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1561 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1562 tlvStruct->length = sizeof(tANI_U32);
1563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1564 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1565 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1566 + sizeof(tHalCfg) + tlvStruct->length) ;
1567
1568 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1569 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1570 tlvStruct->length = sizeof(tANI_U32);
1571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1572 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1573 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1574 + sizeof(tHalCfg) + tlvStruct->length) ;
1575
1576 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1577 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1578 tlvStruct->length = sizeof(tANI_U32);
1579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1580 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
1583 }
1584
1585 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1586 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1587 tlvStruct->length = sizeof(tANI_U32);
1588 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1589 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1590 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1591 + sizeof(tHalCfg) + tlvStruct->length) ;
1592
1593 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1594 {
1595 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1596 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1600 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1601 + sizeof(tHalCfg) + tlvStruct->length) ;
1602 }
1603
1604 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1605 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1606 tlvStruct->length = sizeof(tANI_U32);
1607 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1608 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611
Jeff Johnson32d95a32012-09-10 13:15:23 -07001612 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1614 tlvStruct->length = sizeof(tANI_U32);
1615 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1616 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1617 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1618 wcnssCompiledApiVersion.minor,
1619 wcnssCompiledApiVersion.version,
1620 wcnssCompiledApiVersion.revision);
1621 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1622 + sizeof(tHalCfg) + tlvStruct->length) ;
1623
Jeff Johnsond13512a2012-07-17 11:42:19 -07001624 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1625 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1626 tlvStruct->length = sizeof(tANI_U32);
1627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1628 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1629 configDataValue ) != eSIR_SUCCESS)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1632 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1633 goto handle_failure;
1634 }
1635
1636 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length) ;
1638 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1639 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1640 tlvStruct->length = sizeof(tANI_U32);
1641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1642 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1643 configDataValue ) != eSIR_SUCCESS)
1644 {
1645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1646 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1647 goto handle_failure;
1648 }
1649
1650 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1651 + sizeof(tHalCfg) + tlvStruct->length) ;
1652
1653 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1654 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1658 != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001668 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1669 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1677 goto handle_failure;
1678 }
1679
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001682#ifdef WLAN_SOFTAP_VSTA_FEATURE
1683 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1687 != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1691 goto handle_failure;
1692 }
1693
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696#endif
1697
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001698 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1699 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1700 tlvStruct->length = sizeof(tANI_U32);
1701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1702
1703 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1704 != eSIR_SUCCESS)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1707 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1708 goto handle_failure;
1709 }
1710
1711 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1712 + sizeof(tHalCfg) + tlvStruct->length) ;
1713
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301714/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1715 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1719 configDataValue ) != eSIR_SUCCESS)
1720 {
1721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1722 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1723 goto handle_failure;
1724 }
1725
1726 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1727 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301728#ifdef FEATURE_WLAN_TDLS
1729 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1730 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1731 tlvStruct->length = sizeof(tANI_U32);
1732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1733 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1734 configDataValue ) != eSIR_SUCCESS)
1735 {
1736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1737 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1738 goto handle_failure;
1739 }
1740 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1741 + sizeof(tHalCfg) + tlvStruct->length) ;
1742
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1757 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1770 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301782 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1783 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1784 tlvStruct->length = sizeof(tANI_U32);
1785 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1786 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1787 configDataValue ) != eSIR_SUCCESS)
1788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1790 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1791 goto handle_failure;
1792 }
1793 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1794 + sizeof(tHalCfg) + tlvStruct->length) ;
1795
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301796#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301797
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001798 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1799 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1803 configDataValue ) != eSIR_SUCCESS)
1804 {
1805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1806 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1807 goto handle_failure;
1808 }
1809
1810 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1811 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001812
1813 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1814 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1818 != eSIR_SUCCESS)
1819 {
1820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1821 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1822 goto handle_failure;
1823 }
1824 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length));
1826
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301827 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1828 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1832 configDataValue ) != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1836 goto handle_failure;
1837 }
1838
1839 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1840 + sizeof(tHalCfg) + tlvStruct->length) ;
1841
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301842 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1843 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1844 tlvStruct->length = sizeof(tANI_U32);
1845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1846 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1847 configDataValue ) != eSIR_SUCCESS)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1850 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1851 goto handle_failure;
1852 }
1853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1854 + sizeof(tHalCfg) + tlvStruct->length) ;
1855
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301856 /* QWLAN_HAL_CFG_ATH_DISABLE */
1857 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1858 tlvStruct->length = sizeof(tANI_U32);
1859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1860 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_ATH_DISABLE");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
c_hpothu6d7dc922013-12-02 12:36:41 +05301870 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1871 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
1884 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1889 configDataValue ) != eSIR_SUCCESS)
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1893 goto handle_failure;
1894 }
1895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1896 + sizeof(tHalCfg) + tlvStruct->length) ;
1897
1898 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1899 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1900 tlvStruct->length = sizeof(tANI_U32);
1901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1921 goto handle_failure;
1922 }
1923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301926 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1927 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1941 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1955 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1959 configDataValue ) != eSIR_SUCCESS)
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1963 goto handle_failure;
1964 }
1965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1966 + sizeof(tHalCfg) + tlvStruct->length) ;
1967
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001968 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1969 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1970 tlvStruct->length = sizeof(tANI_U32);
1971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1972 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
c_hpothu5bd1ae42014-03-07 20:28:22 +05301982 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1983 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986
1987 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1988 configDataValue ) != eSIR_SUCCESS)
1989 {
1990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1991 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1992 goto handle_failure;
1993 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1995 + sizeof(tHalCfg) + tlvStruct->length) ;
1996
1997 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1998 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1999 tlvStruct->length = sizeof(tANI_U32);
2000 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2001
2002 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2003 configDataValue ) != eSIR_SUCCESS)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2007 goto handle_failure;
2008 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302009 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2010 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302011
c_hpothu2d0f1c42014-04-01 18:38:51 +05302012 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2013 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2014 tlvStruct->length = sizeof(tANI_U32);
2015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2016
2017 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2018 configDataValue ) != eSIR_SUCCESS)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2021 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2022 goto handle_failure;
2023 }
2024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2025 + sizeof(tHalCfg) + tlvStruct->length) ;
2026
2027 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2028 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2029 tlvStruct->length = sizeof(tANI_U32);
2030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2031
2032 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2033 configDataValue ) != eSIR_SUCCESS)
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2037 goto handle_failure;
2038 }
2039 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2040 + sizeof(tHalCfg) + tlvStruct->length) ;
2041
2042 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2043 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2044 tlvStruct->length = sizeof(tANI_U32);
2045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2046
2047 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2048 configDataValue ) != eSIR_SUCCESS)
2049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2051 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2052 goto handle_failure;
2053 }
2054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2055 + sizeof(tHalCfg) + tlvStruct->length) ;
2056
2057 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2058 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2059 tlvStruct->length = sizeof(tANI_U32);
2060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2061
2062 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2063 configDataValue ) != eSIR_SUCCESS)
2064 {
2065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2066 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2067 goto handle_failure;
2068 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2070 + sizeof(tHalCfg) + tlvStruct->length) ;
2071
Mihir Shetec34258c2014-07-30 17:50:27 +05302072 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2073 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2074 tlvStruct->length = sizeof(tANI_U32);
2075 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2076
2077 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2078 configDataValue ) != eSIR_SUCCESS)
2079 {
2080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2081 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2082 goto handle_failure;
2083 }
2084 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2085 + sizeof(tHalCfg) + tlvStruct->length) ;
2086
2087 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2088 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2089 tlvStruct->length = sizeof(tANI_U32);
2090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2091
2092 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2093 configDataValue ) != eSIR_SUCCESS)
2094 {
2095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2096 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2097 goto handle_failure;
2098 }
2099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2100 + sizeof(tHalCfg) + tlvStruct->length) ;
2101
2102 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2103 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2104 tlvStruct->length = sizeof(tANI_U32);
2105 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2106
2107 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2108 configDataValue ) != eSIR_SUCCESS)
2109 {
2110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2111 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2112 goto handle_failure;
2113 }
2114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2115 + sizeof(tHalCfg) + tlvStruct->length) ;
2116
2117 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2118 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2119 tlvStruct->length = sizeof(tANI_U32);
2120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2121
2122 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2123 configDataValue ) != eSIR_SUCCESS)
2124 {
2125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2126 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2127 goto handle_failure;
2128 }
2129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2130 + sizeof(tHalCfg) + tlvStruct->length) ;
2131
2132 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2133 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2134 tlvStruct->length = sizeof(tANI_U32);
2135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2136
2137 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2138 configDataValue ) != eSIR_SUCCESS)
2139 {
2140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2141 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2142 goto handle_failure;
2143 }
2144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2145 + sizeof(tHalCfg) + tlvStruct->length) ;
2146
2147 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2148 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2149 tlvStruct->length = sizeof(tANI_U32);
2150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2151
2152 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2153 configDataValue ) != eSIR_SUCCESS)
2154 {
2155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2156 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2157 goto handle_failure;
2158 }
2159 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2160 + sizeof(tHalCfg) + tlvStruct->length) ;
2161
2162 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2163 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2164 tlvStruct->length = sizeof(tANI_U32);
2165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2166
2167 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2168 configDataValue ) != eSIR_SUCCESS)
2169 {
2170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2171 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2172 goto handle_failure;
2173 }
2174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2175 + sizeof(tHalCfg) + tlvStruct->length) ;
2176
2177 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2178 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2179 tlvStruct->length = sizeof(tANI_U32);
2180 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2181
2182 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2183 configDataValue ) != eSIR_SUCCESS)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2186 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2187 goto handle_failure;
2188 }
2189 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2190 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302191
2192 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2193 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2194 tlvStruct->length = sizeof(tANI_U32);
2195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2196
2197 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2198 configDataValue ) != eSIR_SUCCESS)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2202 goto handle_failure;
2203 }
2204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2205 + sizeof(tHalCfg) + tlvStruct->length) ;
2206
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302207 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2208 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2209 tlvStruct->length = sizeof(tANI_U32);
2210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2211
2212 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2213 configDataValue ) != eSIR_SUCCESS)
2214 {
2215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2216 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2217 goto handle_failure;
2218 }
2219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2220 + sizeof(tHalCfg) + tlvStruct->length) ;
2221
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302222 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2223 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2224 tlvStruct->length = sizeof(tANI_U32);
2225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2226
2227 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2228 configDataValue ) != eSIR_SUCCESS)
2229 {
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2231 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2232 goto handle_failure;
2233 }
2234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2235 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302236
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302237 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2238 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2239 tlvStruct->length = sizeof(tANI_U32);
2240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2241
2242 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2243 configDataValue ) != eSIR_SUCCESS)
2244 {
2245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2246 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2247 goto handle_failure;
2248 }
2249 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2250 + sizeof(tHalCfg) + tlvStruct->length) ;
2251
Sachin Ahuja41b61902015-06-18 18:32:15 +05302252
2253 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2254 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2255 tlvStruct->length = sizeof(tANI_U32);
2256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2257
2258 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2259 configDataValue ) != eSIR_SUCCESS)
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2263 goto handle_failure;
2264 }
2265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2266 + sizeof(tHalCfg) + tlvStruct->length) ;
2267
2268 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2269 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2270 tlvStruct->length = sizeof(tANI_U32);
2271 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2272
2273 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2274 configDataValue ) != eSIR_SUCCESS)
2275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2277 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2278 goto handle_failure;
2279 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2281 + sizeof(tHalCfg) + tlvStruct->length) ;
2282
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302283 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2284 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2285 tlvStruct->length = sizeof(tANI_U32);
2286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2287
2288 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2289 configDataValue ) != eSIR_SUCCESS)
2290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2292 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2293 goto handle_failure;
2294 }
2295 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2296 + sizeof(tHalCfg) + tlvStruct->length) ;
2297
2298 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2299 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2300 tlvStruct->length = sizeof(tANI_U32);
2301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2302
2303 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2304 configDataValue ) != eSIR_SUCCESS)
2305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2307 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2308 goto handle_failure;
2309 }
2310 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2311 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302312
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302313 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2314 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2315 tlvStruct->length = sizeof(tANI_U32);
2316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2317
2318 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2319 configDataValue ) != eSIR_SUCCESS)
2320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2322 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2323 goto handle_failure;
2324 }
2325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2326 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302327 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2328 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2332 configDataValue ) != eSIR_SUCCESS)
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2335 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2336 goto handle_failure;
2337 }
2338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2339 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302340
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302341 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2342 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2343 tlvStruct->length = sizeof(tANI_U32);
2344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2345
2346 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2347 configDataValue ) != eSIR_SUCCESS)
2348 {
2349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2350 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2351 goto handle_failure;
2352 }
2353 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2354 + sizeof(tHalCfg) + tlvStruct->length) ;
2355
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302356 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2357 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2358 tlvStruct->length = sizeof(tANI_U32);
2359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2360
2361 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2362 configDataValue ) != eSIR_SUCCESS)
2363 {
2364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2365 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2366 goto handle_failure;
2367 }
2368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2369 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302370
2371 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2372 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2373 tlvStruct->length = sizeof(tANI_U32);
2374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2375
2376 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2377 configDataValue ) != eSIR_SUCCESS)
2378 {
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2380 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2381 goto handle_failure;
2382 }
2383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2384 + sizeof(tHalCfg) + tlvStruct->length) ;
2385
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002387#ifdef WLAN_DEBUG
2388 {
2389 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2391 "****** Dumping CFG TLV ***** ");
2392 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2393 {
2394 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2395 "%02x %02x %02x %02x %02x %02x %02x %02x",
2396 tlvStructStart[i],
2397 tlvStructStart[i+1],
2398 tlvStructStart[i+2],
2399 tlvStructStart[i+3],
2400 tlvStructStart[i+4],
2401 tlvStructStart[i+5],
2402 tlvStructStart[i+6],
2403 tlvStructStart[i+7]);
2404 }
2405 /* Dump the bytes in the last line*/
2406 for (; i < wdiStartParams->usConfigBufferLen; i++)
2407 {
2408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2409 "%02x ",tlvStructStart[i]);
2410 }
2411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2412 "**************************** ");
2413 }
2414#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002416handle_failure:
2417 vos_mem_free(configParam);
2418 return VOS_STATUS_E_FAILURE;
2419}
Jeff Johnson295189b2012-06-20 16:38:30 -07002420/*
2421 * FUNCTION: WDA_wdiCompleteCB
2422 * call the voss call back function
2423 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002424void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002425{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2427 tWDA_CbContext *wdaContext;
2428
2429 if(NULL == pWdaParams)
2430 {
2431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002432 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002433 VOS_ASSERT(0) ;
2434 return ;
2435 }
2436
2437 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2438
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 if (NULL == wdaContext)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 return ;
2444 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002445
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002447 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002451 vos_mem_free(pWdaParams);
2452
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 if(WDI_STATUS_SUCCESS != status)
2454 {
2455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2456 "WDI stop callback returned failure" );
2457 VOS_ASSERT(0) ;
2458 }
2459 else
2460 {
2461 wdaContext->wdaState = WDA_STOP_STATE;
2462 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002463
Leo Chang9d76f622013-08-23 16:34:52 -07002464 /* FTM Driver stop procedure should be synced.
2465 * Stop and Close will happen on same context */
2466 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2467 {
2468 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2469 {
2470 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2471 "%s: FTM Stop Event Set Fail", __func__);
2472 VOS_ASSERT(0);
2473 }
2474 }
2475
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002477 vos_WDAComplete_cback(wdaContext->pVosContext);
2478
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 return ;
2480}
Jeff Johnson295189b2012-06-20 16:38:30 -07002481/*
2482 * FUNCTION: WDA_stop
2483 * call WDI_stop
2484 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002485VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2486{
2487 WDI_Status wdiStatus;
2488 VOS_STATUS status = VOS_STATUS_SUCCESS;
2489 WDI_StopReqParamsType *wdiStopReq;
2490 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002491 tWDA_ReqParams *pWdaParams ;
2492
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 if (NULL == pWDA)
2494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002496 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 VOS_ASSERT(0);
2498 return VOS_STATUS_E_FAILURE;
2499 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002500 if (pWDA->wdiFailed == true)
2501 {
2502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002503 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002504 return VOS_STATUS_E_ALREADY;
2505 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002506
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 /* FTM mode stay START_STATE */
2508 if( (WDA_READY_STATE != pWDA->wdaState) &&
2509 (WDA_INIT_STATE != pWDA->wdaState) &&
2510 (WDA_START_STATE != pWDA->wdaState) )
2511 {
2512 VOS_ASSERT(0);
2513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 wdiStopReq = (WDI_StopReqParamsType *)
2515 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2516 if(NULL == wdiStopReq)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0);
2521 return VOS_STATUS_E_NOMEM;
2522 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002523
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 wdiStopReq->wdiStopReason = reason;
2525 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302526
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2528 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 VOS_ASSERT(0);
2533 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002534 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002536
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002537 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2538 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 {
2540 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002541 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002543
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002544 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2545 pWdaParams->wdaMsgParam = NULL;
2546 pWdaParams->pWdaContext = pWDA;
2547
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 /* call WDI stop */
2549 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002550 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2551
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2553 {
2554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2555 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2557 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 status = VOS_STATUS_E_FAILURE;
2559 }
Leo Chang9d76f622013-08-23 16:34:52 -07002560
2561 /* FTM Driver stop procedure should be synced.
2562 * Stop and Close will happen on same context */
2563 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2564 {
2565 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2566 WDI_RESPONSE_TIMEOUT);
2567 if (status != VOS_STATUS_SUCCESS)
2568 {
2569 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2570 "%s: FTM Stop Timepoout", __func__);
2571 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002572 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302573 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 return status;
2576}
Jeff Johnson295189b2012-06-20 16:38:30 -07002577/*
2578 * FUNCTION: WDA_close
2579 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302580 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002581VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2582{
Jeff Johnson43971f52012-07-17 12:26:56 -07002583 VOS_STATUS status = VOS_STATUS_SUCCESS;
2584 WDI_Status wstatus;
2585 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 if (NULL == wdaContext)
2588 {
2589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002590 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 return VOS_STATUS_E_FAILURE;
2592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2594 (WDA_STOP_STATE != wdaContext->wdaState))
2595 {
2596 VOS_ASSERT(0);
2597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002599 wstatus = WDI_Close();
2600 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 {
2602 status = VOS_STATUS_E_FAILURE;
2603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002606 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2607 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 {
2609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002610 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 status = VOS_STATUS_E_FAILURE;
2612 }
2613
Jeff Johnson43971f52012-07-17 12:26:56 -07002614 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002615 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 {
2617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002618 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 status = VOS_STATUS_E_FAILURE;
2620 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002621 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002622 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 {
2624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002625 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 status = VOS_STATUS_E_FAILURE;
2627 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002628 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002629 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 {
2631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002632 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 status = VOS_STATUS_E_FAILURE;
2634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002636 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002637 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 {
2639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2640 "error in WDA close " );
2641 status = VOS_STATUS_E_FAILURE;
2642 }
2643 return status;
2644}
Jeff Johnson295189b2012-06-20 16:38:30 -07002645/*
2646 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2647 * returns 1 if the compiled version is greater than or equal to the input version
2648 */
2649
2650uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(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 compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2657 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2658 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2659 (compiledVersion.revision >= revision)))
2660 return 1;
2661 else
2662 return 0;
2663}
Jeff Johnson295189b2012-06-20 16:38:30 -07002664/*
2665 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2666 * returns 1 if the compiled version is greater than or equal to the input version
2667 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002668uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2669{
2670 VOS_STATUS status = VOS_STATUS_SUCCESS;
2671 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2672 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2675 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2676 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2677 (reportedVersion.revision >= revision)))
2678 return 1;
2679 else
2680 return 0;
2681}
Jeff Johnson295189b2012-06-20 16:38:30 -07002682/*
2683 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2684 * Returns the version of the WCNSS WLAN API with which the HOST
2685 * device driver was compiled
2686 */
2687VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2688 tSirVersionType *pVersion)
2689{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302690 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 if ((NULL == pvosGCtx) || (NULL == pVersion))
2692 {
2693 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002694 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 VOS_ASSERT(0);
2696 return VOS_STATUS_E_FAILURE;
2697 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2699 if (NULL == pWDA )
2700 {
2701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 VOS_ASSERT(0);
2704 return VOS_STATUS_E_FAILURE;
2705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 *pVersion = pWDA->wcnssWlanCompiledVersion;
2707 return VOS_STATUS_SUCCESS;
2708}
Jeff Johnson295189b2012-06-20 16:38:30 -07002709/*
2710 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2711 * Returns the version of the WCNSS WLAN API with which the WCNSS
2712 * device driver was compiled
2713 */
2714VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2715 tSirVersionType *pVersion)
2716{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302717 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 if ((NULL == pvosGCtx) || (NULL == pVersion))
2719 {
2720 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002721 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 VOS_ASSERT(0);
2723 return VOS_STATUS_E_FAILURE;
2724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2726 if (NULL == pWDA )
2727 {
2728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002729 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 VOS_ASSERT(0);
2731 return VOS_STATUS_E_FAILURE;
2732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 *pVersion = pWDA->wcnssWlanReportedVersion;
2734 return VOS_STATUS_SUCCESS;
2735}
Jeff Johnson295189b2012-06-20 16:38:30 -07002736/*
2737 * FUNCTION: WDA_GetWcnssSoftwareVersion
2738 * Returns the WCNSS Software version string
2739 */
2740VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2741 tANI_U8 *pVersion,
2742 tANI_U32 versionBufferSize)
2743{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302744 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002746 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 if ((NULL == pvosGCtx) || (NULL == pVersion))
2748 {
2749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002750 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 VOS_ASSERT(0);
2752 return VOS_STATUS_E_FAILURE;
2753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002754 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2755 if (NULL == pWDA )
2756 {
2757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_ASSERT(0);
2760 return VOS_STATUS_E_FAILURE;
2761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2763 return VOS_STATUS_SUCCESS;
2764}
Jeff Johnson295189b2012-06-20 16:38:30 -07002765/*
2766 * FUNCTION: WDA_GetWcnssHardwareVersion
2767 * Returns the WCNSS Hardware version string
2768 */
2769VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2770 tANI_U8 *pVersion,
2771 tANI_U32 versionBufferSize)
2772{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302773 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if ((NULL == pvosGCtx) || (NULL == pVersion))
2777 {
2778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002779 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 VOS_ASSERT(0);
2781 return VOS_STATUS_E_FAILURE;
2782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2784 if (NULL == pWDA )
2785 {
2786 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_ASSERT(0);
2789 return VOS_STATUS_E_FAILURE;
2790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2792 return VOS_STATUS_SUCCESS;
2793}
Jeff Johnson295189b2012-06-20 16:38:30 -07002794/*
2795 * FUNCTION: WDA_WniCfgDnld
2796 * Trigger CFG Download
2797 */
2798VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2799{
2800 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302801 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002802
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 if (NULL == pMac )
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002806 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_ASSERT(0);
2808 return VOS_STATUS_E_FAILURE;
2809 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302810 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 return vosStatus;
2812}
Jeff Johnson295189b2012-06-20 16:38:30 -07002813/* -----------------------------------------------------------------
2814 * WDI interface
2815 * -----------------------------------------------------------------
2816 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002817/*
2818 * FUNCTION: WDA_suspendDataTxCallback
2819 * call back function called from TL after suspend Transmission
2820 */
2821VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2822 v_U8_t* ucSTAId,
2823 VOS_STATUS vosStatus)
2824{
2825 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 if (NULL == pWDA )
2829 {
2830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 VOS_ASSERT(0);
2833 return VOS_STATUS_E_FAILURE;
2834 }
2835 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2836 {
2837 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2838 }
2839 else
2840 {
2841 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 /* Trigger the event to bring the WDA TL suspend function to come
2844 * out of wait*/
2845 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2846 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2847 {
2848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002849 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 /* If TL suspended had timedout before this callback was called, resume back
2852 * TL.*/
2853 if (pWDA->txSuspendTimedOut)
2854 {
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002856 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 WDA_ResumeDataTx(pWDA);
2858 pWDA->txSuspendTimedOut = FALSE;
2859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 return VOS_STATUS_SUCCESS;
2861}
Jeff Johnson295189b2012-06-20 16:38:30 -07002862/*
2863 * FUNCTION: WDA_suspendDataTx
2864 * Update TL to suspend the data Transmission
2865 */
2866VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2867{
2868 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2869 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870
2871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002872 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 if (pWDA->txSuspendTimedOut)
2875 {
2876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002877 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 return status;
2879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 /* Reset the event to be not signalled */
2881 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2882 if(!VOS_IS_STATUS_SUCCESS(status))
2883 {
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002885 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 return VOS_STATUS_E_FAILURE;
2887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002889 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 WDA_SuspendDataTxCallback);
2891 if(status != VOS_STATUS_SUCCESS)
2892 {
2893 return status;
2894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 /* Wait for the event to be set by the TL, to get the response of
2896 * suspending the TX queues, this event should be set by the Callback
2897 * function called by TL*/
2898 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2899 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2900 if(!VOS_IS_STATUS_SUCCESS(status))
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2903 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002904 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* Set this flag to true when TL suspend times out, so that when TL
2906 * suspend eventually happens and calls the callback, TL can be resumed
2907 * right away by looking at this flag when true.*/
2908 pWDA->txSuspendTimedOut = TRUE;
2909 }
2910 else
2911 {
2912 pWDA->txSuspendTimedOut = FALSE;
2913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2915 {
2916 status = VOS_STATUS_SUCCESS;
2917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 return status;
2919}
Jeff Johnson295189b2012-06-20 16:38:30 -07002920/*
2921 * FUNCTION: WDA_resumeDataTx
2922 * Update TL to resume the data Transmission
2923 */
2924VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2925{
2926 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002927
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002930
2931 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return status;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_InitScanReqCallback
2936 * Trigger Init SCAN callback
2937 */
2938void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2939{
2940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2941 tWDA_CbContext *pWDA;
2942 tInitScanParams *pWDA_ScanParam ;
2943 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 if(NULL == pWdaParams)
2947 {
2948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002950 VOS_ASSERT(0) ;
2951 return ;
2952 }
2953 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2954 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if(NULL == pWDA_ScanParam)
2956 {
2957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002959 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2961 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 return ;
2963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 if(WDI_STATUS_SUCCESS != wdiStatus)
2965 {
2966 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 if(VOS_STATUS_SUCCESS != status)
2968 {
2969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002970 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 }
2972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 /* free WDI command buffer */
2974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302976
2977
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002979 /* without converting the Status to Failure or Success Just
2980 pass the same status to lim */
2981 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 /* send SCAN RSP message back to PE */
2983 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 return ;
2985}
2986
2987/*
2988 * FUNCTION: WDA_ProcessInitScanReq
2989 * Trigger Init SCAN in DAL
2990 */
2991VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2992 tInitScanParams *initScanParams)
2993{
2994 WDI_Status status = WDI_STATUS_SUCCESS ;
2995 WDI_InitScanReqParamsType *wdiInitScanParam =
2996 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2997 sizeof(WDI_InitScanReqParamsType)) ;
2998 tWDA_ReqParams *pWdaParams;
2999 tANI_U8 i = 0;
3000
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 if(NULL == wdiInitScanParam)
3004 {
3005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003006 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 VOS_ASSERT(0);
3008 return VOS_STATUS_E_NOMEM;
3009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3011 if(NULL == pWdaParams)
3012 {
3013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 VOS_ASSERT(0);
3016 vos_mem_free(wdiInitScanParam);
3017 return VOS_STATUS_E_NOMEM;
3018 }
3019
3020 /* Copy init Scan params to WDI structure */
3021 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3022 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3023 sizeof(tSirMacAddr)) ;
3024 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3025 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3026 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3028 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3030 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3032 {
3033 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3034 initScanParams->scanEntry.bssIdx[i] ;
3035 }
3036
3037 /* if Frame length, copy macMgmtHdr or WDI structure */
3038 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3039 {
3040 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3041 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3042 }
3043 wdiInitScanParam->wdiReqStatusCB = NULL ;
3044
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* Store Init Req pointer, as this will be used for response */
3046 pWdaParams->pWdaContext = pWDA;
3047 pWdaParams->wdaMsgParam = initScanParams;
3048 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 /* first try to suspend TX */
3050 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 if(WDI_STATUS_SUCCESS != status)
3052 {
3053 goto handleWdiFailure;
3054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 /* call DAL API to pass init scan request to DAL */
3056 status = WDI_InitScanReq(wdiInitScanParam,
3057 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 if(IS_WDI_STATUS_FAILURE(status))
3059 {
3060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3061 "error in WDA Init Scan, Resume Tx " );
3062 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 VOS_ASSERT(0) ;
3064
3065 goto handleWdiFailure;
3066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068handleWdiFailure:
3069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3070 "Failure in WDI Api, free all the memory " );
3071 /* free WDI command buffer */
3072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3073 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 /* send Failure to PE */
3075 initScanParams->status = eSIR_FAILURE ;
3076 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 return CONVERT_WDI2VOS_STATUS(status) ;
3078}
3079
Jeff Johnson295189b2012-06-20 16:38:30 -07003080/*
3081 * FUNCTION: WDA_StartScanReqCallback
3082 * send Start SCAN RSP back to PE
3083 */
3084void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3085 void* pUserData)
3086{
3087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3088 tWDA_CbContext *pWDA;
3089 tStartScanParams *pWDA_ScanParam;
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003091 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 if(NULL == pWdaParams)
3093 {
3094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003095 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 VOS_ASSERT(0) ;
3097 return ;
3098 }
3099 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3100 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(NULL == pWDA_ScanParam)
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003106 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 return ;
3108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3110 {
3111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003112 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003114 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 return ;
3116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3118 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003119
Jeff Johnson295189b2012-06-20 16:38:30 -07003120
3121 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003122 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* send SCAN RSP message back to PE */
3124 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 return ;
3126}
3127
Jeff Johnson295189b2012-06-20 16:38:30 -07003128/*
3129 * FUNCTION: WDA_ProcessStartScanReq
3130 * Trigger start SCAN in WDI
3131 */
3132VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3133 tStartScanParams *startScanParams)
3134{
3135 WDI_Status status = WDI_STATUS_SUCCESS;
3136 WDI_StartScanReqParamsType *wdiStartScanParams =
3137 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3138 sizeof(WDI_StartScanReqParamsType)) ;
3139 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003141 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 if(NULL == wdiStartScanParams)
3143 {
3144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 VOS_ASSERT(0);
3147 return VOS_STATUS_E_NOMEM;
3148 }
3149 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3150 if(NULL == pWdaParams)
3151 {
3152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003153 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_ASSERT(0);
3155 vos_mem_free(wdiStartScanParams);
3156 return VOS_STATUS_E_NOMEM;
3157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 /* Copy init Scan params to WDI structure */
3159 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3160 wdiStartScanParams->wdiReqStatusCB = NULL ;
3161
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 /* Store Init Req pointer, as this will be used for response */
3163 /* store Params pass it to WDI */
3164 pWdaParams->pWdaContext = pWDA;
3165 pWdaParams->wdaMsgParam = startScanParams;
3166 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 /* call DAL API to pass init scan request to DAL */
3168 status = WDI_StartScanReq(wdiStartScanParams,
3169 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 /* failure returned by WDI API */
3171 if(IS_WDI_STATUS_FAILURE(status))
3172 {
3173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3174 "Failure in Start Scan WDI API, free all the memory "
3175 "It should be due to previous abort scan." );
3176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3177 vos_mem_free(pWdaParams) ;
3178 startScanParams->status = eSIR_FAILURE ;
3179 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 return CONVERT_WDI2VOS_STATUS(status) ;
3182}
Jeff Johnson295189b2012-06-20 16:38:30 -07003183/*
3184 * FUNCTION: WDA_EndScanReqCallback
3185 * END SCAN callback
3186 */
3187void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3188{
3189 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3190 tWDA_CbContext *pWDA;
3191 tEndScanParams *endScanParam;
3192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 if(NULL == pWdaParams)
3195 {
3196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 VOS_ASSERT(0) ;
3199 return ;
3200 }
3201 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3202 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(NULL == endScanParam)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3209 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 return ;
3211 }
3212
3213 /* Free WDI command buffer */
3214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003217 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 /* send response back to PE */
3219 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3220 return ;
3221}
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223/*
3224 * FUNCTION: WDA_ProcessEndScanReq
3225 * Trigger END SCAN in WDI
3226 */
3227VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3228 tEndScanParams *endScanParams)
3229{
3230 WDI_Status status = WDI_STATUS_SUCCESS;
3231 WDI_EndScanReqParamsType *wdiEndScanParams =
3232 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3233 sizeof(WDI_EndScanReqParamsType)) ;
3234 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003236 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 if(NULL == wdiEndScanParams)
3238 {
3239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 VOS_ASSERT(0);
3242 return VOS_STATUS_E_NOMEM;
3243 }
3244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3245 if(NULL == pWdaParams)
3246 {
3247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_ASSERT(0);
3250 vos_mem_free(wdiEndScanParams);
3251 return VOS_STATUS_E_NOMEM;
3252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 /* Copy init Scan params to WDI structure */
3254 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3255 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 /* Store Init Req pointer, as this will be used for response */
3257 /* store Params pass it to WDI */
3258 pWdaParams->pWdaContext = pWDA;
3259 pWdaParams->wdaMsgParam = endScanParams;
3260 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 /* call DAL API to pass init scan request to DAL */
3262 status = WDI_EndScanReq(wdiEndScanParams,
3263 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 if(IS_WDI_STATUS_FAILURE(status))
3265 {
3266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3267 "Failure in End Scan WDI API, free all the memory "
3268 "It should be due to previous abort scan." );
3269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3270 vos_mem_free(pWdaParams) ;
3271 endScanParams->status = eSIR_FAILURE ;
3272 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 return CONVERT_WDI2VOS_STATUS(status) ;
3275}
Jeff Johnson295189b2012-06-20 16:38:30 -07003276/*
3277 * FUNCTION: WDA_FinishScanReqCallback
3278 * Trigger Finish SCAN callback
3279 */
3280void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3281{
3282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3283 tWDA_CbContext *pWDA;
3284 tFinishScanParams *finishScanParam;
3285 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 if(NULL == pWdaParams)
3289 {
3290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003291 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 VOS_ASSERT(0) ;
3293 return ;
3294 }
3295
3296 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3297 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 if(NULL == finishScanParam)
3299 {
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3304 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 return ;
3306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3308 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 /*
3310 * Now Resume TX, if we reached here means, TX is already suspended, we
3311 * have to resume it unconditionaly
3312 */
3313 status = WDA_ResumeDataTx(pWDA) ;
3314
3315 if(VOS_STATUS_SUCCESS != status)
3316 {
3317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003318 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003320 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3322 return ;
3323}
Jeff Johnson295189b2012-06-20 16:38:30 -07003324/*
3325 * FUNCTION: WDA_ProcessFinshScanReq
3326 * Trigger Finish SCAN in WDI
3327 */
3328VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3329 tFinishScanParams *finishScanParams)
3330{
3331 WDI_Status status = WDI_STATUS_SUCCESS;
3332 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3333 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3334 sizeof(WDI_FinishScanReqParamsType)) ;
3335 tWDA_ReqParams *pWdaParams ;
3336 tANI_U8 i = 0;
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 if(NULL == wdiFinishScanParams)
3340 {
3341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 VOS_ASSERT(0);
3344 return VOS_STATUS_E_NOMEM;
3345 }
3346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3347 if(NULL == pWdaParams)
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0);
3352 vos_mem_free(wdiFinishScanParams);
3353 return VOS_STATUS_E_NOMEM;
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 /* Copy init Scan params to WDI structure */
3356 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3357 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3358 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3360 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3361 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3362 finishScanParams->frameLength ;
3363 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3364 finishScanParams->currentOperChannel ;
3365 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3366 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3367 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003368 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3369 {
3370 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3371 finishScanParams->scanEntry.bssIdx[i] ;
3372 }
3373
3374
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 /* if Frame length, copy macMgmtHdr ro WDI structure */
3376 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3377 {
3378 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3379 &finishScanParams->macMgmtHdr,
3380 sizeof(WDI_MacMgmtHdr)) ;
3381 }
3382 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 /* Store Init Req pointer, as this will be used for response */
3384 /* store Params pass it to WDI */
3385 pWdaParams->pWdaContext = pWDA;
3386 pWdaParams->wdaMsgParam = finishScanParams;
3387 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 /* call DAL API to pass init scan request to DAL */
3389 status = WDI_FinishScanReq(wdiFinishScanParams,
3390 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003391
Jeff Johnson295189b2012-06-20 16:38:30 -07003392
3393 /*
3394 * WDI API returns failure..
3395 */
3396 if(IS_WDI_STATUS_FAILURE( status))
3397 {
3398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3399 "Failure in Finish Scan WDI API, free all the memory " );
3400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3401 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 finishScanParams->status = eSIR_FAILURE ;
3403 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 return CONVERT_WDI2VOS_STATUS(status) ;
3406}
Jeff Johnson295189b2012-06-20 16:38:30 -07003407/*---------------------------------------------------------------------
3408 * ASSOC API's
3409 *---------------------------------------------------------------------
3410 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003411/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303412 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 * Trigger Init SCAN callback
3414 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303415void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003416{
3417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3418 tWDA_CbContext *pWDA;
3419 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003421 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 if(NULL == pWdaParams)
3423 {
3424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003425 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 VOS_ASSERT(0) ;
3427 return ;
3428 }
3429 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3430 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3432 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 /* reset macBSSID */
3434 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 /* reset macSTASelf */
3436 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003437 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 return ;
3440}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303441
3442/*
3443 * FUNCTION: WDA_JoinReqCallback
3444 * Free memory and send SWITCH CHANNEL RSP back to PE.
3445 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3446 */
3447void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3448{
3449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3450 tWDA_CbContext *pWDA;
3451 tSwitchChannelParams *joinReqParam;
3452
3453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3454 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3455
3456 if(NULL == pWdaParams)
3457 {
3458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3459 "%s: pWdaParams received NULL", __func__);
3460 VOS_ASSERT(0);
3461 return;
3462 }
3463
3464 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3465 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3466 joinReqParam->status = wdiStatus;
3467
3468 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3469 {
3470 /* reset macBSSID */
3471 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3472 /* reset macSTASelf */
3473 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3474
3475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3476 vos_mem_free(pWdaParams);
3477 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3478 }
3479
3480 return;
3481}
3482
Jeff Johnson295189b2012-06-20 16:38:30 -07003483/*
3484 * FUNCTION: WDA_ProcessJoinReq
3485 * Trigger Join REQ in WDI
3486 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003487VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3488 tSwitchChannelParams* joinReqParam)
3489{
3490 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 WDI_JoinReqParamsType *wdiJoinReqParam =
3492 (WDI_JoinReqParamsType *)vos_mem_malloc(
3493 sizeof(WDI_JoinReqParamsType)) ;
3494 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 if(NULL == wdiJoinReqParam)
3498 {
3499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003502 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 return VOS_STATUS_E_NOMEM;
3504 }
3505 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3506 if(NULL == pWdaParams)
3507 {
3508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 VOS_ASSERT(0);
3511 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003512 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003513 return VOS_STATUS_E_NOMEM;
3514 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003515
3516 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3517 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3518 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3521 "%s: received join request when BSSID or self-STA is NULL "
3522 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003524 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3525 VOS_ASSERT(0);
3526 vos_mem_free(wdiJoinReqParam);
3527 vos_mem_free(pWdaParams);
3528 joinReqParam->status = eSIR_FAILURE ;
3529 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3530 return VOS_STATUS_E_INVAL;
3531 }
3532
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 /* copy the BSSID for pWDA */
3534 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3535 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3537 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3539 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003540#ifdef WLAN_FEATURE_VOWIFI
3541 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3542 joinReqParam->maxTxPower ;
3543#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3545 joinReqParam->localPowerConstraint ;
3546#endif
3547 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3548 joinReqParam->secondaryChannelOffset ;
3549 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3550
Sachin Ahuja935eda782014-07-30 14:57:41 +05303551 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3552 wdiJoinReqParam->pUserData = pWdaParams;
3553
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 /* Store Init Req pointer, as this will be used for response */
3555 /* store Params pass it to WDI */
3556 pWdaParams->pWdaContext = pWDA;
3557 pWdaParams->wdaMsgParam = joinReqParam;
3558 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303560 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 if(IS_WDI_STATUS_FAILURE(status))
3562 {
3563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3564 "Failure in Join WDI API, free all the memory " );
3565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3566 vos_mem_free(pWdaParams) ;
3567 joinReqParam->status = eSIR_FAILURE ;
3568 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 return CONVERT_WDI2VOS_STATUS(status) ;
3571}
Jeff Johnson295189b2012-06-20 16:38:30 -07003572/*
3573 * FUNCTION: WDA_SwitchChannelReqCallback
3574 * send Switch channel RSP back to PE
3575 */
3576void WDA_SwitchChannelReqCallback(
3577 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3578{
3579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3580 tWDA_CbContext *pWDA;
3581 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 if(NULL == pWdaParams)
3585 {
3586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003587 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 VOS_ASSERT(0) ;
3589 return ;
3590 }
3591 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3592 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3593
3594#ifdef WLAN_FEATURE_VOWIFI
3595 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3596#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3598 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003600 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 return ;
3603}
Jeff Johnson295189b2012-06-20 16:38:30 -07003604/*
3605 * FUNCTION: WDA_ProcessChannelSwitchReq
3606 * Request to WDI to switch channel REQ params.
3607 */
3608VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3609 tSwitchChannelParams *pSwitchChanParams)
3610{
3611 WDI_Status status = WDI_STATUS_SUCCESS ;
3612 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3613 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3614 sizeof(WDI_SwitchChReqParamsType)) ;
3615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 if(NULL == wdiSwitchChanParam)
3619 {
3620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 VOS_ASSERT(0);
3623 return VOS_STATUS_E_NOMEM;
3624 }
3625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3626 if(NULL == pWdaParams)
3627 {
3628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 VOS_ASSERT(0);
3631 vos_mem_free(wdiSwitchChanParam);
3632 return VOS_STATUS_E_NOMEM;
3633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3635#ifndef WLAN_FEATURE_VOWIFI
3636 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3637 pSwitchChanParams->localPowerConstraint;
3638#endif
3639 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3640 pSwitchChanParams->secondaryChannelOffset;
3641 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 /* Store req pointer, as this will be used for response */
3643 /* store Params pass it to WDI */
3644 pWdaParams->pWdaContext = pWDA;
3645 pWdaParams->wdaMsgParam = pSwitchChanParams;
3646 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647#ifdef WLAN_FEATURE_VOWIFI
3648 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3649 = pSwitchChanParams->maxTxPower;
3650 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3651 pSwitchChanParams ->selfStaMacAddr,
3652 sizeof(tSirMacAddr));
3653#endif
3654 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3655 pSwitchChanParams->bssId,
3656 sizeof(tSirMacAddr));
3657
3658 status = WDI_SwitchChReq(wdiSwitchChanParam,
3659 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 if(IS_WDI_STATUS_FAILURE(status))
3661 {
3662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3663 "Failure in process channel switch Req WDI API, free all the memory " );
3664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3665 vos_mem_free(pWdaParams) ;
3666 pSwitchChanParams->status = eSIR_FAILURE ;
3667 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 return CONVERT_WDI2VOS_STATUS(status) ;
3670}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003671
3672/*
3673 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3674 * send Switch channel RSP back to PE
3675 */
3676void WDA_SwitchChannelReqCallback_V1(
3677 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3678 void* pUserData)
3679{
3680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3681 tWDA_CbContext *pWDA;
3682 tSwitchChannelParams *pSwitchChanParams;
3683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3684 "<------ %s " ,__func__);
3685
3686 if (NULL == pWdaParams)
3687 {
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3689 "%s: pWdaParams received NULL", __func__);
3690 VOS_ASSERT(0);
3691 return ;
3692 }
3693 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3694 pSwitchChanParams =
3695 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3696 pSwitchChanParams->channelSwitchSrc =
3697 wdiSwitchChanRsp->channelSwitchSrc;
3698#ifdef WLAN_FEATURE_VOWIFI
3699 pSwitchChanParams->txMgmtPower =
3700 wdiSwitchChanRsp->ucTxMgmtPower;
3701#endif
3702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3703 vos_mem_free(pWdaParams);
3704 pSwitchChanParams->status =
3705 wdiSwitchChanRsp->wdiStatus ;
3706 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3707 (void *)pSwitchChanParams , 0);
3708 return;
3709}
3710
3711/*
3712 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3713 * Request to WDI to switch channel REQ params.
3714 */
3715VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3716 tSwitchChannelParams *pSwitchChanParams)
3717{
3718 WDI_Status status = WDI_STATUS_SUCCESS ;
3719 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3720 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3721 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3722 tWDA_ReqParams *pWdaParams ;
3723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3724 "------> %s " ,__func__);
3725 if (NULL == wdiSwitchChanParam)
3726 {
3727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3728 "%s: VOS MEM Alloc Failure", __func__);
3729 VOS_ASSERT(0);
3730 return VOS_STATUS_E_NOMEM;
3731 }
3732 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3733 if (NULL == pWdaParams)
3734 {
3735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3736 "%s: VOS MEM Alloc Failure", __func__);
3737 VOS_ASSERT(0);
3738 vos_mem_free(wdiSwitchChanParam);
3739 return VOS_STATUS_E_NOMEM;
3740 }
3741 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3742 pSwitchChanParams->channelSwitchSrc;
3743
3744 wdiSwitchChanParam->wdiChInfo.ucChannel =
3745 pSwitchChanParams->channelNumber;
3746#ifndef WLAN_FEATURE_VOWIFI
3747 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3748 pSwitchChanParams->localPowerConstraint;
3749#endif
3750 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3751 pSwitchChanParams->secondaryChannelOffset;
3752 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3753 /* Store req pointer, as this will be used for response */
3754 /* store Params pass it to WDI */
3755 pWdaParams->pWdaContext = pWDA;
3756 pWdaParams->wdaMsgParam = pSwitchChanParams;
3757 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3758#ifdef WLAN_FEATURE_VOWIFI
3759 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3760 pSwitchChanParams->maxTxPower;
3761 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3762 pSwitchChanParams ->selfStaMacAddr,
3763 sizeof(tSirMacAddr));
3764#endif
3765 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3766 pSwitchChanParams->bssId,
3767 sizeof(tSirMacAddr));
3768
3769 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3770 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3771 pWdaParams);
3772 if (IS_WDI_STATUS_FAILURE(status))
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3775 "Failure in process channel switch Req WDI "
3776 "API, free all the memory " );
3777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3778 vos_mem_free(pWdaParams) ;
3779 pSwitchChanParams->status = eSIR_FAILURE ;
3780 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3781 (void *)pSwitchChanParams, 0) ;
3782 }
3783 return CONVERT_WDI2VOS_STATUS(status) ;
3784}
3785
Jeff Johnson295189b2012-06-20 16:38:30 -07003786/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303787 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 * config BSS Req Callback, called by WDI
3789 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303790void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 ,void* pUserData)
3792{
3793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3794 tWDA_CbContext *pWDA;
3795 tAddBssParams *configBssReqParam;
3796 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 if(NULL == pWdaParams)
3800 {
3801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 VOS_ASSERT(0) ;
3804 return ;
3805 }
3806 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3807 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3808 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003810 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3812 {
3813 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3814 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3816 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3817 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3818
3819 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3820 {
3821 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3822 {
3823 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3824 staConfigBssParam->staType = STA_ENTRY_BSSID;
3825 }
3826 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3827 (staConfigBssParam->staType == STA_ENTRY_SELF))
3828 {
3829 /* This is the 1st add BSS Req for the BTAMP STA */
3830 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3831 staConfigBssParam->staType = STA_ENTRY_BSSID;
3832 }
3833 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3834 (staConfigBssParam->staType == STA_ENTRY_PEER))
3835 {
3836 /* This is the 2nd ADD BSS Request that is sent
3837 * on the BTAMP STA side. The Sta type is
3838 * set to STA_ENTRY_PEER here.*/
3839 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3840 }
3841 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3842 (staConfigBssParam->staType == STA_ENTRY_SELF))
3843 {
3844 /* statype is already set by PE.
3845 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3846 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3847 staConfigBssParam->staType = STA_ENTRY_BSSID;
3848 }
3849 else
3850 {
3851 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3852 staConfigBssParam->staType = STA_ENTRY_PEER;
3853 }
3854 }
3855 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3856 {
3857 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3858 staConfigBssParam->staType = STA_ENTRY_SELF;
3859 }
3860 else
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3863 "Invalid operation mode specified");
3864 VOS_ASSERT(0);
3865 }
3866
3867 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3872 sizeof(tSirMacAddr));
3873 staConfigBssParam->txChannelWidthSet =
3874 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3876 staConfigBssParam->htCapable)
3877 {
3878 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3879 wdiConfigBssRsp->ucBSSIdx;
3880 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3881 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303882 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3883 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3886 wdiConfigBssRsp->ucBSSIdx,
3887 wdiConfigBssRsp->ucSTAIdx))
3888 {
3889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003890 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 VOS_ASSERT(0) ;
3892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3894 {
3895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003896 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 VOS_ASSERT(0) ;
3898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003899#ifdef WLAN_FEATURE_VOWIFI
3900 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3901#endif
3902 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303903 else
3904 {
3905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3906 "%s: Failure with status %d", __func__,
3907 wdiConfigBssRsp->wdiStatus);
3908 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3909 WLAN_LOG_INDICATOR_HOST_DRIVER,
3910 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3911 FALSE, TRUE);
3912 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303913 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3914 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3916 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 return ;
3919}
Jeff Johnson295189b2012-06-20 16:38:30 -07003920/*
3921 * FUNCTION: WDA_UpdateEdcaParamsForAC
3922 * Update WDI EDCA params with PE edca params
3923 */
3924void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3925 WDI_EdcaParamRecord *wdiEdcaParam,
3926 tSirMacEdcaParamRecord *macEdcaParam)
3927{
3928 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3929 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3930 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3931 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3932 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3933 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3934}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303935void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3936 void* pUserData)
3937{
3938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3939 tWDA_CbContext *pWDA;
3940 tAddBssParams *addBssParams;
3941
3942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3943 "<------ %s, wdiStatus: %d",
3944 __func__, wdiStatus);
3945
3946 if (NULL == pWdaParams)
3947 {
3948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3949 "%s: Invalid pWdaParams pointer", __func__);
3950 VOS_ASSERT(0);
3951 return;
3952 }
3953
3954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3955 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3956
3957 addBssParams->status = wdiStatus;
3958
3959 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3960 {
3961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3962 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303963 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3964 WLAN_LOG_INDICATOR_HOST_DRIVER,
3965 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3966 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303967 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3968 }
3969
3970 return ;
3971}
3972
Jeff Johnson295189b2012-06-20 16:38:30 -07003973/*
3974 * FUNCTION: WDA_ProcessConfigBssReq
3975 * Configure BSS before starting Assoc with AP
3976 */
3977VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3978 tAddBssParams* configBssReqParam)
3979{
3980 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303981 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303985 if (NULL == configBssReqParam)
3986 {
3987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3988 "%s: configBssReqParam is NULL", __func__);
3989 return VOS_STATUS_E_INVAL;
3990 }
3991
3992 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3993 sizeof(WDI_ConfigBSSReqParamsType)) ;
3994
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 if(NULL == wdiConfigBssReqParam)
3996 {
3997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 VOS_ASSERT(0);
4000 return VOS_STATUS_E_NOMEM;
4001 }
4002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4003 if(NULL == pWdaParams)
4004 {
4005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 VOS_ASSERT(0);
4008 vos_mem_free(wdiConfigBssReqParam);
4009 return VOS_STATUS_E_NOMEM;
4010 }
Kiran4a17ebe2013-01-31 10:43:43 -08004011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4012 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4015 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304016 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4017 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 /* Store Init Req pointer, as this will be used for response */
4019 /* store Params pass it to WDI */
4020 pWdaParams->pWdaContext = pWDA;
4021 pWdaParams->wdaMsgParam = configBssReqParam;
4022 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304024 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(IS_WDI_STATUS_FAILURE(status))
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4028 "Failure in Config BSS WDI API, free all the memory " );
4029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4030 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 return CONVERT_WDI2VOS_STATUS(status) ;
4035}
Jeff Johnson295189b2012-06-20 16:38:30 -07004036#ifdef ENABLE_HAL_COMBINED_MESSAGES
4037/*
4038 * FUNCTION: WDA_PostAssocReqCallback
4039 * Post ASSOC req callback, send RSP back to PE
4040 */
4041void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4042 void* pUserData)
4043{
4044 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4045 tPostAssocParams *postAssocReqParam =
4046 (tPostAssocParams *)pWDA->wdaMsgParam ;
4047 /*STA context within the BSS Params*/
4048 tAddStaParams *staPostAssocParam =
4049 &postAssocReqParam->addBssParams.staContext ;
4050 /*STA Params for self STA*/
4051 tAddStaParams *selfStaPostAssocParam =
4052 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004056 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4058 {
4059 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4060 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4061 sizeof(tSirMacAddr)) ;
4062 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4063 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4064 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4066 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304067 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4069 pWDA->wdaWdiApiMsgParam = NULL;
4070 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 return ;
4073}
Jeff Johnson295189b2012-06-20 16:38:30 -07004074/*
4075 * FUNCTION: WDA_ProcessPostAssocReq
4076 * Trigger POST ASSOC processing in WDI
4077 */
4078VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4079 tPostAssocParams *postAssocReqParam)
4080{
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 WDI_Status status = WDI_STATUS_SUCCESS ;
4082
4083 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4084 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4085 sizeof(WDI_PostAssocReqParamsType)) ;
4086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004087 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004088
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 if(NULL == wdiPostAssocReqParam)
4090 {
4091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 VOS_ASSERT(0);
4094 return VOS_STATUS_E_NOMEM;
4095 }
4096
4097 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4098 {
4099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004100 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 VOS_ASSERT(0);
4102 return VOS_STATUS_E_FAILURE;
4103 }
4104
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 /* update BSS params into WDI structure */
4106 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4107 &postAssocReqParam->addBssParams) ;
4108 /* update STA params into WDI structure */
4109 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4110 &postAssocReqParam->addStaParams) ;
4111
4112 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4113 postAssocReqParam->addBssParams.highPerformance;
4114 WDA_UpdateEdcaParamsForAC(pWDA,
4115 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4116 &postAssocReqParam->addBssParams.acbe);
4117 WDA_UpdateEdcaParamsForAC(pWDA,
4118 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4119 &postAssocReqParam->addBssParams.acbk);
4120 WDA_UpdateEdcaParamsForAC(pWDA,
4121 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4122 &postAssocReqParam->addBssParams.acvi);
4123 WDA_UpdateEdcaParamsForAC(pWDA,
4124 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4125 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 /* Store Init Req pointer, as this will be used for response */
4127 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 /* store Params pass it to WDI */
4129 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4131 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 if(IS_WDI_STATUS_FAILURE(status))
4133 {
4134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4135 "Failure in Post Assoc WDI API, free all the memory " );
4136 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4137 pWDA->wdaWdiApiMsgParam = NULL;
4138 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 return CONVERT_WDI2VOS_STATUS(status) ;
4143}
4144#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004145/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304146 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 * ADD STA req callback, send RSP back to PE
4148 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304149void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 void* pUserData)
4151{
4152 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4153 tWDA_CbContext *pWDA;
4154 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004156 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004157 if(NULL == pWdaParams)
4158 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_ASSERT(0) ;
4161 return ;
4162 }
4163 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4164 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004166 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4168 {
4169 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4170 /*TODO: UMAC structure doesn't have these fields*/
4171 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4172 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4173 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4174 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4175 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4176 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004177#ifdef FEATURE_WLAN_TDLS
4178 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4179 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4180#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004182#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 {
4184 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4185 wdiConfigStaRsp->ucBssIdx;
4186 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4187 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304188 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4189 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 }
4191 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4192 {
4193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004194 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 VOS_ASSERT(0) ;
4196 return ;
4197 }
4198 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304199 else
4200 {
4201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4202 "%s: Failure with status %d", __func__,
4203 wdiConfigStaRsp->wdiStatus);
4204 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4205 WLAN_LOG_INDICATOR_HOST_DRIVER,
4206 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4207 FALSE, TRUE);
4208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4210 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 return ;
4213}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304214void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4215 void* pUserData)
4216{
4217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4218 tWDA_CbContext *pWDA;
4219 tAddStaParams *addStaParams;
4220
4221 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4222 "<------ %s, wdiStatus: %d",
4223 __func__, wdiStatus);
4224
4225 if (NULL == pWdaParams)
4226 {
4227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4228 "%s: Invalid pWdaParams pointer", __func__);
4229 VOS_ASSERT(0);
4230 return;
4231 }
4232
4233 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4234 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4235
4236 addStaParams->status = wdiStatus;
4237
4238 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4239 {
4240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4241 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304242 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4243 WLAN_LOG_INDICATOR_HOST_DRIVER,
4244 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4245 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304246 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4247 }
4248
4249 return ;
4250}
4251
Jeff Johnson295189b2012-06-20 16:38:30 -07004252/*
4253 * FUNCTION: WDA_ConfigStaReq
4254 * Trigger Config STA processing in WDI
4255 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304256VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 tAddStaParams *addStaReqParam)
4258{
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4261 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4262 sizeof(WDI_ConfigSTAReqParamsType)) ;
4263 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 if(NULL == wdiConfigStaReqParam)
4267 {
4268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 VOS_ASSERT(0);
4271 return VOS_STATUS_E_NOMEM;
4272 }
4273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4274 if(NULL == pWdaParams)
4275 {
4276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_ASSERT(0);
4279 vos_mem_free(wdiConfigStaReqParam);
4280 return VOS_STATUS_E_NOMEM;
4281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 /* update STA params into WDI structure */
4284 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4285 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304286 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4287 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 /* Store Init Req pointer, as this will be used for response */
4289 /* store Params pass it to WDI */
4290 pWdaParams->pWdaContext = pWDA;
4291 pWdaParams->wdaMsgParam = addStaReqParam;
4292 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304293
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304295 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 if(IS_WDI_STATUS_FAILURE(status))
4297 {
4298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4299 "Failure in Config STA WDI API, free all the memory " );
4300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4301 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 return CONVERT_WDI2VOS_STATUS(status) ;
4306}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304307
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304309 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304311 */
4312void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 void* pUserData)
4314{
4315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4316 tWDA_CbContext *pWDA;
4317 tDeleteBssParams *delBssReqParam;
4318 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 if(NULL == pWdaParams)
4322 {
4323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 VOS_ASSERT(0) ;
4326 return ;
4327 }
4328 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4329 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004330 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4332 {
4333 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4334 sizeof(tSirMacAddr)) ;
4335 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304336 else
4337 {
4338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4339 "%s: Failure with status %d", __func__,
4340 wdiDelBssRsp->wdiStatus);
4341 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4342 WLAN_LOG_INDICATOR_HOST_DRIVER,
4343 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4344 FALSE, TRUE);
4345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4347 {
4348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004349 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 VOS_ASSERT(0) ;
4351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4353 {
4354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 VOS_ASSERT(0) ;
4357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004361 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 VOS_ASSERT(0) ;
4363 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304364
4365 WLANTL_StartForwarding(staIdx,0,0);
4366
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4368 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 /* reset the the system role*/
4370 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4371
4372 /* Reset the BA related information */
4373 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4374 {
4375 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4376 {
4377 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4378 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304379 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 /* Reset framesTxed counters here */
4381 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4382 {
4383 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4384 }
4385 }
4386 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304387
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 return ;
4390}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304391void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4392 void* pUserData)
4393{
4394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4395 tWDA_CbContext *pWDA;
4396 tDeleteBssParams *delbssParams;
4397
4398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4399 "<------ %s, wdiStatus: %d",
4400 __func__, wdiStatus);
4401
4402 if (NULL == pWdaParams)
4403 {
4404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4405 "%s: Invalid pWdaParams pointer", __func__);
4406 VOS_ASSERT(0);
4407 return;
4408 }
4409
4410 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4411 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4412
4413 delbssParams->status = wdiStatus ;
4414
4415 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4416 {
4417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4418 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304419 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4420 WLAN_LOG_INDICATOR_HOST_DRIVER,
4421 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4422 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304423 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4424 }
4425
4426 return ;
4427}
Jeff Johnson295189b2012-06-20 16:38:30 -07004428
Jeff Johnson295189b2012-06-20 16:38:30 -07004429/*
4430 * FUNCTION: WDA_ProcessDelBssReq
4431 * Init DEL BSS req with WDI
4432 */
4433VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4434 tDeleteBssParams *delBssParam)
4435{
4436 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4438 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4439 sizeof(WDI_DelBSSReqParamsType)) ;
4440 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004442 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 if(NULL == wdiDelBssReqParam)
4444 {
4445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304446 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 VOS_ASSERT(0);
4448 return VOS_STATUS_E_NOMEM;
4449 }
4450 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4451 if(NULL == pWdaParams)
4452 {
4453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004454 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 VOS_ASSERT(0);
4456 vos_mem_free(wdiDelBssReqParam);
4457 return VOS_STATUS_E_NOMEM;
4458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304460 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4461 wdiDelBssReqParam->pUserData = pWdaParams;
4462
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 /* Store Init Req pointer, as this will be used for response */
4464 /* store Params pass it to WDI */
4465 pWdaParams->pWdaContext = pWDA;
4466 pWdaParams->wdaMsgParam = delBssParam;
4467 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304468
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304470 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 if(IS_WDI_STATUS_FAILURE(status))
4472 {
4473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4474 "Failure in Del BSS WDI API, free all the memory " );
4475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4476 vos_mem_free(pWdaParams) ;
4477 delBssParam->status = eSIR_FAILURE ;
4478 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 return CONVERT_WDI2VOS_STATUS(status) ;
4481}
Jeff Johnson295189b2012-06-20 16:38:30 -07004482/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304483 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304485 */
4486void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 void* pUserData)
4488{
4489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4490 tWDA_CbContext *pWDA;
4491 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004493 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 if(NULL == pWdaParams)
4495 {
4496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004497 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304498 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 return ;
4500 }
4501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4502 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004503 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4505 {
4506 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4507 {
4508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004509 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 VOS_ASSERT(0) ;
4511 }
4512 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304513 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304515 else
4516 {
4517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4518 "%s: Failure with status %d", __func__,
4519 wdiDelStaRsp->wdiStatus);
4520 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4521 WLAN_LOG_INDICATOR_HOST_DRIVER,
4522 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4523 FALSE, TRUE);
4524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4526 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 /*Reset the BA information corresponding to this STAIdx */
4528 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4529 WDA_INVALID_STA_INDEX;
4530 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304531 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 return ;
4534}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304535void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4536 void* pUserData)
4537{
4538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4539 tWDA_CbContext *pWDA;
4540 tDeleteStaParams *delStaParams;
4541
4542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4543 "<------ %s, wdiStatus: %d",
4544 __func__, wdiStatus);
4545
4546 if (NULL == pWdaParams)
4547 {
4548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4549 "%s: Invalid pWdaParams pointer", __func__);
4550 VOS_ASSERT(0);
4551 return;
4552 }
4553
4554 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4555 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4556
4557 delStaParams->status = wdiStatus ;
4558
4559 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4560 {
4561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4562 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304563 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4564 WLAN_LOG_INDICATOR_HOST_DRIVER,
4565 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4566 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304567 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4568 }
4569
4570 return ;
4571}
4572
Jeff Johnson295189b2012-06-20 16:38:30 -07004573/*
4574 * FUNCTION: WDA_ProcessDelStaReq
4575 * Init DEL STA req with WDI
4576 */
4577VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4578 tDeleteStaParams *delStaParam)
4579{
4580 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4582 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4583 sizeof(WDI_DelSTAReqParamsType)) ;
4584 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 if(NULL == wdiDelStaReqParam)
4588 {
4589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 VOS_ASSERT(0);
4592 return VOS_STATUS_E_NOMEM;
4593 }
4594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4595 if(NULL == pWdaParams)
4596 {
4597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_ASSERT(0);
4600 vos_mem_free(wdiDelStaReqParam);
4601 return VOS_STATUS_E_NOMEM;
4602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304604 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4605 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 /* Store Init Req pointer, as this will be used for response */
4607 /* store Params pass it to WDI */
4608 pWdaParams->pWdaContext = pWDA;
4609 pWdaParams->wdaMsgParam = delStaParam;
4610 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304611
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304613 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 if(IS_WDI_STATUS_FAILURE(status))
4615 {
4616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4617 "Failure in Del STA WDI API, free all the memory status = %d",
4618 status );
4619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4620 vos_mem_free(pWdaParams) ;
4621 delStaParam->status = eSIR_FAILURE ;
4622 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004624 return CONVERT_WDI2VOS_STATUS(status) ;
4625}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304626void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004627{
4628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4629 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304630 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004632 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004633 if(NULL == pWdaParams)
4634 {
4635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004636 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 VOS_ASSERT(0) ;
4638 return ;
4639 }
4640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4641 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4643 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4645 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4646 pwdiAddSTASelfRsp->macSelfSta,
4647 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304648 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4649 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4650 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4651 {
4652 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4653 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4655 "%s: Failure with status %d failcnter %d", __func__,
4656 pwdiAddSTASelfRsp->wdiStatus,
4657 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4658 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4659 WLAN_LOG_INDICATOR_HOST_DRIVER,
4660 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4661 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 return ;
4665}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304666void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4667 void* pUserData)
4668{
4669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4670 tWDA_CbContext *pWDA;
4671 tAddStaSelfParams *addStaSelfParams;
4672
4673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4674 "<------ %s, wdiStatus: %d",
4675 __func__, wdiStatus);
4676
4677 if (NULL == pWdaParams)
4678 {
4679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4680 "%s: Invalid pWdaParams pointer", __func__);
4681 VOS_ASSERT(0);
4682 return;
4683 }
4684
4685 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4686 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4687
4688 addStaSelfParams->status = wdiStatus ;
4689
4690 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4691 {
4692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4693 vos_mem_free(pWdaParams) ;
4694 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4695 = WDA_ADDSTA_REQ_WDI_FAIL;
4696 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4698 "%s: Failure with status %d failcnter %d", __func__,
4699 wdiStatus,
4700 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4701 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4702 WLAN_LOG_INDICATOR_HOST_DRIVER,
4703 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4704 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304705 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4706 }
4707
4708 return ;
4709}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304710
Jeff Johnson295189b2012-06-20 16:38:30 -07004711/*
4712 * FUNCTION: WDA_ProcessAddStaSelfReq
4713 *
4714 */
4715VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4716{
4717 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004718 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004719 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4720 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4721 sizeof(WDI_AddSTASelfReqParamsType)) ;
4722 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004724 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304725 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 if( NULL == wdiAddStaSelfReq )
4727 {
4728 VOS_ASSERT( 0 );
4729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004730 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304731 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4732 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 return( VOS_STATUS_E_NOMEM );
4734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 if( NULL == pWdaParams )
4737 {
4738 VOS_ASSERT( 0 );
4739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004740 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304741 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4742 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 vos_mem_free(wdiAddStaSelfReq) ;
4744 return( VOS_STATUS_E_NOMEM );
4745 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304746 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4747 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004749 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 /* Store Init Req pointer, as this will be used for response */
4751 /* store Params pass it to WDI */
4752 pWdaParams->pWdaContext = pWDA;
4753 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304754 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4755
4756 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4757 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004758
Jeff Johnson43971f52012-07-17 12:26:56 -07004759 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 {
4761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4762 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004763 wstatus );
4764 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4766 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304767 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4768 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 pAddStaSelfReq->status = eSIR_FAILURE ;
4770 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4771 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004772 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004773}
Jeff Johnson295189b2012-06-20 16:38:30 -07004774/*
4775 * FUNCTION: WDA_DelSTASelfRespCallback
4776 *
4777 */
4778void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4779 wdiDelStaSelfRspParams , void* pUserData)
4780{
4781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4782 tWDA_CbContext *pWDA;
4783 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004785 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 if (NULL == pWdaParams)
4787 {
4788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004789 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 VOS_ASSERT(0);
4791 return;
4792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4794 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004796 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797
4798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4799 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304800 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304801 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4803 "%s: Failure with status %d", __func__,
4804 wdiDelStaSelfRspParams->wdiStatus);
4805 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4806 WLAN_LOG_INDICATOR_HOST_DRIVER,
4807 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4808 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 return ;
4812}
Jeff Johnson295189b2012-06-20 16:38:30 -07004813/*
4814 * FUNCTION: WDA_DelSTASelfReqCallback
4815 *
4816 */
4817void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4818 void* pUserData)
4819{
4820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4821 tWDA_CbContext *pWDA;
4822 tDelStaSelfParams *delStaSelfParams;
4823
4824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304825 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004826 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827
4828 if (NULL == pWdaParams)
4829 {
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004831 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 VOS_ASSERT(0);
4833 return;
4834 }
4835
4836 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4837 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4838
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004839 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004840
4841 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4842 {
4843 VOS_ASSERT(0);
4844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4845 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304846 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4847 WLAN_LOG_INDICATOR_HOST_DRIVER,
4848 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4849 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4851 }
4852
4853 return ;
4854}
4855
4856/*
4857 * FUNCTION: WDA_DelSTASelfReq
4858 * Trigger Config STA processing in WDI
4859 */
4860VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4861 tDelStaSelfParams* pDelStaSelfReqParam)
4862{
4863 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004864 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 tWDA_ReqParams *pWdaParams = NULL;
4866 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4867 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4868 sizeof(WDI_DelSTASelfReqParamsType)) ;
4869
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004871 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 if( NULL == wdiDelStaSelfReq )
4873 {
4874 VOS_ASSERT( 0 );
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 return( VOS_STATUS_E_NOMEM );
4878 }
4879
4880 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4881 if( NULL == pWdaParams )
4882 {
4883 VOS_ASSERT( 0 );
4884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004885 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 vos_mem_free(wdiDelStaSelfReq) ;
4887 return( VOS_STATUS_E_NOMEM );
4888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 pWdaParams->pWdaContext = pWDA;
4890 /* Store param pointer as passed in by caller */
4891 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4892 /* store Params pass it to WDI */
4893 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4895 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4896
4897 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4898 wdiDelStaSelfReq->pUserData = pWdaParams;
4899
Jeff Johnson43971f52012-07-17 12:26:56 -07004900 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4902
Jeff Johnson43971f52012-07-17 12:26:56 -07004903 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 {
4905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4906 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4907 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004908 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4910 vos_mem_free(pWdaParams) ;
4911 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4912 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4913 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004914 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004915}
4916
Jeff Johnson295189b2012-06-20 16:38:30 -07004917/*
4918 * FUNCTION: WDA_SendMsg
4919 * Send Message back to PE
4920 */
4921void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4922 void *pBodyptr, tANI_U32 bodyVal)
4923{
4924 tSirMsgQ msg = {0} ;
4925 tANI_U32 status = VOS_STATUS_SUCCESS ;
4926 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 msg.type = msgType;
4928 msg.bodyval = bodyVal;
4929 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 if (VOS_STATUS_SUCCESS != status)
4932 {
4933 if(NULL != pBodyptr)
4934 {
4935 vos_mem_free(pBodyptr);
4936 }
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0) ;
4940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 return ;
4942}
Jeff Johnson295189b2012-06-20 16:38:30 -07004943/*
4944 * FUNCTION: WDA_UpdateBSSParams
4945 * Translated WDA/PE BSS info into WDI BSS info..
4946 */
4947void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4948 WDI_ConfigBSSReqInfoType *wdiBssParams,
4949 tAddBssParams *wdaBssParams)
4950{
4951 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304952 v_U8_t i = 0;
4953
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 /* copy bssReq Params to WDI structure */
4955 vos_mem_copy(wdiBssParams->macBSSID,
4956 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4957 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4958 sizeof(tSirMacAddr)) ;
4959 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4960 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4961 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 wdiBssParams->ucShortSlotTimeSupported =
4963 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4965 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4966 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4967 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4968 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4969
4970 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4971 wdiBssParams->ucTXOPProtectionFullSupport =
4972 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4974 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4977 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4978 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4979 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4980
Chet Lanctot186b5732013-03-18 10:26:30 -07004981 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4982
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 /* copy SSID into WDI structure */
4984 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4985 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4986 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4988 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004990#ifdef WLAN_FEATURE_VOWIFI
4991 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4992#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004995#ifdef WLAN_FEATURE_VOWIFI_11R
4996 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 if(wdiBssParams->bExtSetStaKeyParamValid)
4998 {
4999 /* copy set STA key params to WDI structure */
5000 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5001 wdaBssParams->extSetStaKeyParam.staIdx;
5002 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5003 wdaBssParams->extSetStaKeyParam.encType;
5004 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5005 wdaBssParams->extSetStaKeyParam.wepType;
5006 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5007 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5009 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005010 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5012 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5013 {
5014 WDA_GetWepKeysFromCfg( pWDA,
5015 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5016 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5017 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5018 }
5019 else
5020 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5022 keyIndex++)
5023 {
5024 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5025 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5026 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5027 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5028 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5029 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305030
5031 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5032 {
5033 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5034 {
5035 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5036 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5037 }
5038
5039 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5040 {
5041 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5042 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5043 }
5044 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5045 FL("%s: Negated Keys"), __func__);
5046 }
5047 else
5048 {
5049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5050 FL("%s: No change in Keys "), __func__);
5051 vos_mem_copy(
5052 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5053 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5054 WLAN_MAX_KEY_RSC_LEN);
5055 vos_mem_copy(
5056 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5057 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5058 SIR_MAC_MAX_KEY_LENGTH);
5059 }
5060
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5062 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5063 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5064 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005065 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305066 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 }
5069 }
5070 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5071 }
5072 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5073 {
5074 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5075 sizeof(wdaBssParams->extSetStaKeyParam) );
5076 }
5077#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005078#ifdef WLAN_FEATURE_11AC
5079 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5080 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5081#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005082
5083 return ;
5084}
Jeff Johnson295189b2012-06-20 16:38:30 -07005085/*
5086 * FUNCTION: WDA_UpdateSTAParams
5087 * Translated WDA/PE BSS info into WDI BSS info..
5088 */
5089void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5090 WDI_ConfigStaReqInfoType *wdiStaParams,
5091 tAddStaParams *wdaStaParams)
5092{
5093 tANI_U8 i = 0;
5094 /* Update STA params */
5095 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5096 sizeof(tSirMacAddr)) ;
5097 wdiStaParams->usAssocId = wdaStaParams->assocId;
5098 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005099 wdiStaParams->staIdx = wdaStaParams->staIdx;
5100
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 wdiStaParams->ucShortPreambleSupported =
5102 wdaStaParams->shortPreambleSupported;
5103 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5104 sizeof(tSirMacAddr)) ;
5105 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5106
5107 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5108
5109 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5110 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5111 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5112 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5113 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5114 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5115 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5116
5117 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5118 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 wdiStaParams->wdiSupportedRates.opRateMode =
5120 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5122 {
5123 wdiStaParams->wdiSupportedRates.llbRates[i] =
5124 wdaStaParams->supportedRates.llbRates[i];
5125 }
5126 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5127 {
5128 wdiStaParams->wdiSupportedRates.llaRates[i] =
5129 wdaStaParams->supportedRates.llaRates[i];
5130 }
5131 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5132 {
5133 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5134 wdaStaParams->supportedRates.aniLegacyRates[i];
5135 }
5136 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5137 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005138#ifdef WLAN_FEATURE_11AC
5139 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5140 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5141 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5142 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5143#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5145 {
5146 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5147 wdaStaParams->supportedRates.supportedMCSSet[i];
5148 }
5149 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5150 wdaStaParams->supportedRates.rxHighestDataRate;
5151
5152 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5153
5154 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5155
5156 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5157 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5158 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5159
5160 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5161 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5162 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5163 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005165#ifdef WLAN_FEATURE_11AC
5166 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5167 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005168 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305169 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5170 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5171 * must be set by default */
5172 if ( wdiStaParams->vhtTxMUBformeeCapable )
5173 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005174#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005175 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5176 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 return ;
5178}
Jeff Johnson295189b2012-06-20 16:38:30 -07005179/*
5180 * -------------------------------------------------------------------------
5181 * CFG update to WDI
5182 * -------------------------------------------------------------------------
5183 */
5184
5185 /*
5186 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5187 * Convert the WNI CFG ID to HAL CFG ID
5188 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005189static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005190{
5191 switch(wniCfgId)
5192 {
5193 case WNI_CFG_STA_ID:
5194 return QWLAN_HAL_CFG_STA_ID;
5195 case WNI_CFG_CURRENT_TX_ANTENNA:
5196 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5197 case WNI_CFG_CURRENT_RX_ANTENNA:
5198 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5199 case WNI_CFG_LOW_GAIN_OVERRIDE:
5200 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5201 case WNI_CFG_POWER_STATE_PER_CHAIN:
5202 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5203 case WNI_CFG_CAL_PERIOD:
5204 return QWLAN_HAL_CFG_CAL_PERIOD;
5205 case WNI_CFG_CAL_CONTROL:
5206 return QWLAN_HAL_CFG_CAL_CONTROL;
5207 case WNI_CFG_PROXIMITY:
5208 return QWLAN_HAL_CFG_PROXIMITY;
5209 case WNI_CFG_NETWORK_DENSITY:
5210 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5211 case WNI_CFG_MAX_MEDIUM_TIME:
5212 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5213 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5214 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5215 case WNI_CFG_RTS_THRESHOLD:
5216 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5217 case WNI_CFG_SHORT_RETRY_LIMIT:
5218 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5219 case WNI_CFG_LONG_RETRY_LIMIT:
5220 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5221 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5222 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5223 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5224 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5225 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5226 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5227 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5228 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5229 case WNI_CFG_FIXED_RATE:
5230 return QWLAN_HAL_CFG_FIXED_RATE;
5231 case WNI_CFG_RETRYRATE_POLICY:
5232 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5233 case WNI_CFG_RETRYRATE_SECONDARY:
5234 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5235 case WNI_CFG_RETRYRATE_TERTIARY:
5236 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5237 case WNI_CFG_FORCE_POLICY_PROTECTION:
5238 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5239 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5240 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5241 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5242 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5243 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5244 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5245 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5246 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5247 case WNI_CFG_MAX_BA_SESSIONS:
5248 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5249 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5250 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5251 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5252 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5253 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5254 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5255 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5256 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5257 case WNI_CFG_STATS_PERIOD:
5258 return QWLAN_HAL_CFG_STATS_PERIOD;
5259 case WNI_CFG_CFP_MAX_DURATION:
5260 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5261#if 0 /*This is not part of CFG*/
5262 case WNI_CFG_FRAME_TRANS_ENABLED:
5263 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5264#endif
5265 case WNI_CFG_DTIM_PERIOD:
5266 return QWLAN_HAL_CFG_DTIM_PERIOD;
5267 case WNI_CFG_EDCA_WME_ACBK:
5268 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5269 case WNI_CFG_EDCA_WME_ACBE:
5270 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5271 case WNI_CFG_EDCA_WME_ACVI:
5272 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5273 case WNI_CFG_EDCA_WME_ACVO:
5274 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5275#if 0
5276 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5277 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5278 case WNI_CFG_TELE_BCN_TRANS_LI:
5279 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5280 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5281 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5282 case WNI_CFG_TELE_BCN_MAX_LI:
5283 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5284 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5285 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5286#endif
5287 case WNI_CFG_ENABLE_CLOSE_LOOP:
5288 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005289 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5290 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305291 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5292 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 default:
5294 {
5295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005296 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 wniCfgId);
5298 return VOS_STATUS_E_INVAL;
5299 }
5300 }
5301}
Jeff Johnson295189b2012-06-20 16:38:30 -07005302/*
5303 * FUNCTION: WDA_UpdateCfgCallback
5304 *
5305 */
5306void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5307{
5308 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5309 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5310 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 /*
5314 * currently there is no response message is expected between PE and
5315 * WDA, Failure return from WDI is a ASSERT condition
5316 */
5317 if(WDI_STATUS_SUCCESS != wdiStatus)
5318 {
5319 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005320 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5322 }
5323
5324 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5325 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5326 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 return ;
5328}
Jeff Johnson295189b2012-06-20 16:38:30 -07005329/*
5330 * FUNCTION: WDA_UpdateCfg
5331 *
5332 */
5333VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5334{
5335
5336 WDI_Status status = WDI_STATUS_SUCCESS ;
5337 tANI_U32 val =0;
5338 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5339 tHalCfg *configData;
5340 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5341 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 if (NULL == pMac )
5345 {
5346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005347 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 return VOS_STATUS_E_FAILURE;
5349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 if(WDA_START_STATE != pWDA->wdaState)
5351 {
5352 return VOS_STATUS_E_FAILURE;
5353 }
5354
5355 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5356 {
5357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005358 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 VOS_ASSERT(0);
5360 return VOS_STATUS_E_FAILURE;
5361 }
5362
5363 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5364 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 if(NULL == wdiCfgReqParam)
5366 {
5367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 VOS_ASSERT(0);
5370 return VOS_STATUS_E_NOMEM;
5371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5373 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 if(NULL == wdiCfgReqParam->pConfigBuffer)
5375 {
5376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 vos_mem_free(wdiCfgReqParam);
5379 VOS_ASSERT(0);
5380 return VOS_STATUS_E_NOMEM;
5381 }
5382
5383 /*convert the WNI CFG Id to HAL CFG Id*/
5384 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5385 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5386
5387 /*TODO: revisit this for handling string parameters */
5388 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5389 &val) != eSIR_SUCCESS)
5390 {
5391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005392 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5394 vos_mem_free(wdiCfgReqParam);
5395 return eSIR_FAILURE;
5396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5398 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5399 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5400 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5401 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5402
5403 /* store Params pass it to WDI */
5404 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005405#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5406 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5407 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 if(IS_WDI_STATUS_FAILURE(status))
5409 {
5410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5411 "Failure in Update CFG WDI API, free all the memory " );
5412 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5413 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5414 pWDA->wdaWdiCfgApiMsgParam = NULL;
5415 /* Failure is not expected */
5416 VOS_ASSERT(0) ;
5417 }
5418#else
5419 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5420 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5421 pWDA->wdaWdiCfgApiMsgParam = NULL;
5422#endif
5423 return CONVERT_WDI2VOS_STATUS(status) ;
5424}
5425
Jeff Johnson295189b2012-06-20 16:38:30 -07005426VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5427 v_U8_t *pDefaultKeyId,
5428 v_U8_t *pNumKeys,
5429 WDI_KeysType *pWdiKeys )
5430{
5431 v_U32_t i, j, defKeyId = 0;
5432 v_U32_t val = SIR_MAC_KEY_LENGTH;
5433 VOS_STATUS status = WDI_STATUS_SUCCESS;
5434 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 if (NULL == pMac )
5436 {
5437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005438 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005439 return VOS_STATUS_E_FAILURE;
5440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5442 &defKeyId ))
5443 {
5444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5445 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5446 }
5447
5448 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 /* Need to extract ALL of the configured WEP Keys */
5450 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5451 {
5452 val = SIR_MAC_KEY_LENGTH;
5453 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5454 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5455 pWdiKeys[j].key,
5456 &val ))
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005459 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 }
5461 else
5462 {
5463 pWdiKeys[j].keyId = (tANI_U8) i;
5464 /*
5465 * Actually, a DC (Don't Care) because
5466 * this is determined (and set) by PE/MLME
5467 */
5468 pWdiKeys[j].unicast = 0;
5469 /*
5470 * Another DC (Don't Care)
5471 */
5472 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5473 /* Another DC (Don't Care). Unused for WEP */
5474 pWdiKeys[j].paeRole = 0;
5475 /* Determined from wlan_cfgGetStr() above.*/
5476 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 j++;
5478 *pNumKeys = (tANI_U8) j;
5479 }
5480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 return status;
5482}
Jeff Johnson295189b2012-06-20 16:38:30 -07005483/*
5484 * FUNCTION: WDA_SetBssKeyReqCallback
5485 * send SET BSS key RSP back to PE
5486 */
5487void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5488{
5489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5490 tWDA_CbContext *pWDA;
5491 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 if(NULL == pWdaParams)
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005497 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 VOS_ASSERT(0) ;
5499 return ;
5500 }
5501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5502 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305503 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5504 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5506 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005507 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 return ;
5510}
Jeff Johnson295189b2012-06-20 16:38:30 -07005511/*
5512 * FUNCTION: WDA_ProcessSetBssKeyReq
5513 * Request to WDI for programming the BSS key( key for
5514 * broadcast/multicast frames Encryption)
5515 */
5516VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5517 tSetBssKeyParams *setBssKeyParams )
5518{
5519 WDI_Status status = WDI_STATUS_SUCCESS ;
5520 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5521 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5522 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5523 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 if(NULL == wdiSetBssKeyParam)
5528 {
5529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 VOS_ASSERT(0);
5532 return VOS_STATUS_E_NOMEM;
5533 }
5534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5535 if(NULL == pWdaParams)
5536 {
5537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_ASSERT(0);
5540 vos_mem_free(wdiSetBssKeyParam);
5541 return VOS_STATUS_E_NOMEM;
5542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 /* copy set BSS params to WDI structure */
5545 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5546 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5547 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 if(setBssKeyParams->encType != eSIR_ED_NONE)
5549 {
5550 if( setBssKeyParams->numKeys == 0 &&
5551 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5552 setBssKeyParams->encType == eSIR_ED_WEP104))
5553 {
5554 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5556 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5557 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5558 }
5559 else
5560 {
5561 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5562 {
5563 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5564 setBssKeyParams->key[keyIndex].keyId;
5565 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5566 setBssKeyParams->key[keyIndex].unicast;
5567 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5568 setBssKeyParams->key[keyIndex].keyDirection;
5569 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5570 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5571 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5572 setBssKeyParams->key[keyIndex].paeRole;
5573 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5574 setBssKeyParams->key[keyIndex].keyLength;
5575 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5576 setBssKeyParams->key[keyIndex].key,
5577 SIR_MAC_MAX_KEY_LENGTH);
5578 }
5579 }
5580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5582 setBssKeyParams->singleTidRc;
5583 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 /* Store set key pointer, as this will be used for response */
5585 /* store Params pass it to WDI */
5586 pWdaParams->pWdaContext = pWDA;
5587 pWdaParams->wdaMsgParam = setBssKeyParams;
5588 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5590 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5591
5592 if(IS_WDI_STATUS_FAILURE(status))
5593 {
5594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5595 "Failure in Set BSS Key Req WDI API, free all the memory " );
5596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5597 vos_mem_free(pWdaParams) ;
5598 setBssKeyParams->status = eSIR_FAILURE ;
5599 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 return CONVERT_WDI2VOS_STATUS(status) ;
5602}
Jeff Johnson295189b2012-06-20 16:38:30 -07005603/*
5604 * FUNCTION: WDA_RemoveBssKeyReqCallback
5605 * send SET BSS key RSP back to PE
5606 */
5607void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5608{
5609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5610 tWDA_CbContext *pWDA;
5611 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 if(NULL == pWdaParams)
5615 {
5616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005617 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 VOS_ASSERT(0) ;
5619 return ;
5620 }
5621 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5622 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5624 vos_mem_free(pWdaParams) ;
5625
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005626 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 return ;
5629}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305630
5631/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305632 * FUNCTION: WDA_GetFrameLogRspCallback
5633 * recieves get frame log response from FW
5634 */
5635void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5636 void* pUserData)
5637{
5638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5639 tWDA_CbContext *pWDA = NULL;
5640 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5641
5642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5643 "<------ Entering: %s " ,__func__);
5644 if(NULL == pWdaParams)
5645 {
5646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5647 "%s: pWdaParams received NULL", __func__);
5648 VOS_ASSERT(0) ;
5649 return ;
5650 }
5651
5652 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5653 if (NULL == pWDA)
5654 {
5655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5656 "%s:pWDA is NULL", __func__);
5657 VOS_ASSERT(0);
5658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5659 vos_mem_free(pWdaParams);
5660 return ;
5661 }
5662
5663 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5664 if(NULL == pGetFrameLogReqParams)
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5667 "%s: pGetFrameLogReqParams received NULL", __func__);
5668 VOS_ASSERT(0);
5669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5670 vos_mem_free(pWdaParams);
5671 return;
5672 }
5673
Siddharth Bhal64246172015-02-27 01:04:37 +05305674 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305676 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5677 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305678 }
5679
5680 /* free WDI command buffer only */
5681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5682 vos_mem_free(pWdaParams->wdaMsgParam);
5683 vos_mem_free(pWdaParams);
5684
5685 return ;
5686
5687}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305688
5689/*
5690 * FUNCTION: WDA_RssiMonitorStopRspCallback
5691 * recieves Rssi Monitor stop response from FW
5692 */
5693void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5694 void* pUserData)
5695{
5696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5697 tSirRssiMonitorReq *pRssiMonitorReqParams;
5698
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5700 "<------ %s " ,__func__);
5701
5702 if(NULL == pWdaParams)
5703 {
5704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5705 "%s: pWdaParams received NULL", __func__);
5706 VOS_ASSERT(0);
5707 return ;
5708 }
5709
5710 if(NULL == pWdaParams->wdaMsgParam)
5711 {
5712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5713 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5714 VOS_ASSERT(0);
5715 vos_mem_free(pWdaParams);
5716 return ;
5717 }
5718
5719 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5720
5721 if(pRssiMonitorReqParams->rssiMonitorCallback)
5722 {
5723 pRssiMonitorReqParams->rssiMonitorCallback(
5724 pRssiMonitorReqParams->rssiMonitorCbContext,
5725 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5726 }
5727 else
5728 {
5729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5730 "%s: pFWLoggingInitParams callback is NULL", __func__);
5731 }
5732
5733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5734 vos_mem_free(pWdaParams->wdaMsgParam);
5735 vos_mem_free(pWdaParams);
5736
5737 return;
5738}
5739
5740/*
5741 * FUNCTION: WDA_RssiMonitorStartRspCallback
5742 * recieves Rssi Monitor start response from FW
5743 */
5744void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5745 void* pUserData)
5746{
5747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5748 tSirRssiMonitorReq *pRssiMonitorReqParams;
5749
5750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5751 "<------ %s " ,__func__);
5752
5753 if(NULL == pWdaParams)
5754 {
5755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5756 "%s: pWdaParams received NULL", __func__);
5757 VOS_ASSERT(0);
5758 return ;
5759 }
5760
5761 if(NULL == pWdaParams->wdaMsgParam)
5762 {
5763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5764 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5765 VOS_ASSERT(0);
5766 vos_mem_free(pWdaParams);
5767 return ;
5768 }
5769
5770 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5771
5772 if(pRssiMonitorReqParams->rssiMonitorCallback)
5773 {
5774 pRssiMonitorReqParams->rssiMonitorCallback(
5775 pRssiMonitorReqParams->rssiMonitorCbContext,
5776 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5777 }
5778 else
5779 {
5780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5781 "%s: pFWLoggingInitParams callback is NULL", __func__);
5782 }
5783
5784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5785 vos_mem_free(pWdaParams->wdaMsgParam);
5786 vos_mem_free(pWdaParams);
5787
5788 return;
5789}
5790
Siddharth Bhal64246172015-02-27 01:04:37 +05305791/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305792 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305793 * recieves Mgmt Logging init response from FW
5794 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305795void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305796 void* pUserData)
5797{
5798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305799 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305800 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305801
5802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5803 "<------ %s " ,__func__);
5804
5805 if(NULL == pWdaParams)
5806 {
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5808 "%s: pWdaParams received NULL", __func__);
5809 VOS_ASSERT(0);
5810 return ;
5811 }
5812
5813 if(NULL == pWdaParams->wdaMsgParam)
5814 {
5815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5816 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5817 VOS_ASSERT(0);
5818 vos_mem_free(pWdaParams);
5819 return ;
5820 }
5821
c_manjeecfd1efb2015-09-25 19:32:34 +05305822 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5823 if(NULL == pWdaParams)
5824 {
5825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5826 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5827 VOS_ASSERT(0);
5828 vos_mem_free(pWdaParams);
5829 return;
5830 }
5831
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305832 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305833 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305834
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305835 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305836 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305837 pFWLoggingInitParams->fwlogInitCallback(
5838 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305839 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305840 }
5841 else
5842 {
5843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305844 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305845 }
5846
c_manjeecfd1efb2015-09-25 19:32:34 +05305847 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5849 vos_mem_free(pWdaParams->wdaMsgParam);
5850 vos_mem_free(pWdaParams);
5851
5852 return;
5853}
5854
5855/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305856 * FUNCTION: WDA_SpoofMacAddrRspCallback
5857 * recieves spoof mac addr response from FW
5858 */
5859void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5860{
5861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5862 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305863
Siddharth Bhal171788a2014-09-29 21:02:40 +05305864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5865 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305866
Siddharth Bhal171788a2014-09-29 21:02:40 +05305867 if(NULL == pWdaParams)
5868 {
5869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5870 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305871 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305872 return ;
5873 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305874 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305875
Siddharth Bhal029d6732014-10-09 21:31:23 +05305876 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305878 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305879 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305880 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5881 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305882
Siddharth Bhal171788a2014-09-29 21:02:40 +05305883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305884 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305885 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305886
5887 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888}
5889
Jeff Johnson295189b2012-06-20 16:38:30 -07005890/*
5891 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5892 * Request to WDI to remove the BSS key( key for broadcast/multicast
5893 * frames Encryption)
5894 */
5895VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5896 tRemoveBssKeyParams *removeBssKeyParams )
5897{
5898 WDI_Status status = WDI_STATUS_SUCCESS ;
5899 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5900 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5901 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5902 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 if(NULL == wdiRemoveBssKeyParam)
5906 {
5907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 VOS_ASSERT(0);
5910 return VOS_STATUS_E_NOMEM;
5911 }
5912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5913 if(NULL == pWdaParams)
5914 {
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_ASSERT(0);
5918 vos_mem_free(wdiRemoveBssKeyParam);
5919 return VOS_STATUS_E_NOMEM;
5920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 /* copy Remove BSS key params to WDI structure*/
5922 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5923 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5924 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5925 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5926 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 /* Store remove key pointer, as this will be used for response */
5928 /* store Params pass it to WDI */
5929 pWdaParams->pWdaContext = pWDA;
5930 pWdaParams->wdaMsgParam = removeBssKeyParams;
5931 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5933 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 if(IS_WDI_STATUS_FAILURE(status))
5935 {
5936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5937 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5939 vos_mem_free(pWdaParams) ;
5940 removeBssKeyParams->status = eSIR_FAILURE ;
5941 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 return CONVERT_WDI2VOS_STATUS(status) ;
5944}
Jeff Johnson295189b2012-06-20 16:38:30 -07005945/*
5946 * FUNCTION: WDA_SetBssKeyReqCallback
5947 * send SET BSS key RSP back to PE
5948 */
5949void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5950{
5951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5952 tWDA_CbContext *pWDA;
5953 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 if(NULL == pWdaParams)
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005959 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_ASSERT(0) ;
5961 return ;
5962 }
5963 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5964 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305965 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5966 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5968 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005969 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 return ;
5972}
Jeff Johnson295189b2012-06-20 16:38:30 -07005973/*
5974 * FUNCTION: WDA_ProcessSetStaKeyReq
5975 * Request to WDI for programming the STA key( key for Unicast frames
5976 * Encryption)
5977 */
5978VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5979 tSetStaKeyParams *setStaKeyParams )
5980{
5981 WDI_Status status = WDI_STATUS_SUCCESS ;
5982 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5983 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5984 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5985 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005988 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 if(NULL == wdiSetStaKeyParam)
5990 {
5991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 VOS_ASSERT(0);
5994 return VOS_STATUS_E_NOMEM;
5995 }
5996 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5997 if(NULL == pWdaParams)
5998 {
5999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 VOS_ASSERT(0);
6002 vos_mem_free(wdiSetStaKeyParam);
6003 return VOS_STATUS_E_NOMEM;
6004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 /* copy set STA key params to WDI structure */
6008 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6009 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6010 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6011 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 if(setStaKeyParams->encType != eSIR_ED_NONE)
6013 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006014 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6016 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6017 {
6018 WDA_GetWepKeysFromCfg( pWDA,
6019 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6020 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6021 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6022 }
6023 else
6024 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6026 keyIndex++)
6027 {
6028 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6029 setStaKeyParams->key[keyIndex].keyId;
6030 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6031 setStaKeyParams->key[keyIndex].unicast;
6032 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6033 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6035 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6036 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6037 setStaKeyParams->key[keyIndex].paeRole;
6038 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6039 setStaKeyParams->key[keyIndex].keyLength;
6040 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6041 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6042 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6043 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6044 {
6045 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6046 }
6047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6049 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 }
6051 }
6052 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6053 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 /* Store set key pointer, as this will be used for response */
6055 /* store Params pass it to WDI */
6056 pWdaParams->pWdaContext = pWDA;
6057 pWdaParams->wdaMsgParam = setStaKeyParams;
6058 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6060 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 if(IS_WDI_STATUS_FAILURE(status))
6062 {
6063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6064 "Failure in set STA Key Req WDI API, free all the memory " );
6065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6066 vos_mem_free(pWdaParams) ;
6067 setStaKeyParams->status = eSIR_FAILURE ;
6068 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 return CONVERT_WDI2VOS_STATUS(status) ;
6071}
Jeff Johnson295189b2012-06-20 16:38:30 -07006072/*
6073 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6074 * send SET Bcast STA key RSP back to PE
6075 */
6076void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6077{
6078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6079 tWDA_CbContext *pWDA;
6080 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006082 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 if(NULL == pWdaParams)
6084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006086 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_ASSERT(0) ;
6088 return ;
6089 }
6090 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6091 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6093 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006094 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 return ;
6097}
6098
Jeff Johnson295189b2012-06-20 16:38:30 -07006099/*
6100 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6101 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6102 * Encryption)
6103 */
6104VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6105 tSetStaKeyParams *setStaKeyParams )
6106{
6107 WDI_Status status = WDI_STATUS_SUCCESS ;
6108 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6109 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6110 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 if(NULL == wdiSetStaKeyParam)
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_ASSERT(0);
6120 return VOS_STATUS_E_NOMEM;
6121 }
6122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6123 if(NULL == pWdaParams)
6124 {
6125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_ASSERT(0);
6128 vos_mem_free(wdiSetStaKeyParam);
6129 return VOS_STATUS_E_NOMEM;
6130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 /* copy set STA key params to WDI structure */
6134 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6135 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6136 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6137 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 if(setStaKeyParams->encType != eSIR_ED_NONE)
6139 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6141 keyIndex++)
6142 {
6143 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6144 setStaKeyParams->key[keyIndex].keyId;
6145 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6146 setStaKeyParams->key[keyIndex].unicast;
6147 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6148 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6150 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6151 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6152 setStaKeyParams->key[keyIndex].paeRole;
6153 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6154 setStaKeyParams->key[keyIndex].keyLength;
6155 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6156 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6159 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 }
6161 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 /* Store set key pointer, as this will be used for response */
6163 /* store Params pass it to WDI */
6164 pWdaParams->pWdaContext = pWDA;
6165 pWdaParams->wdaMsgParam = setStaKeyParams;
6166 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6168 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 if(IS_WDI_STATUS_FAILURE(status))
6170 {
6171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6172 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6174 vos_mem_free(pWdaParams) ;
6175 setStaKeyParams->status = eSIR_FAILURE ;
6176 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 return CONVERT_WDI2VOS_STATUS(status) ;
6179}
Jeff Johnson295189b2012-06-20 16:38:30 -07006180/*
6181 * FUNCTION: WDA_RemoveStaKeyReqCallback
6182 * send SET BSS key RSP back to PE
6183 */
6184void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6185{
6186 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6187 tWDA_CbContext *pWDA;
6188 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if(NULL == pWdaParams)
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006194 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 VOS_ASSERT(0) ;
6196 return ;
6197 }
6198 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6199 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6201 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006202 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 return ;
6205}
6206
Jeff Johnson295189b2012-06-20 16:38:30 -07006207/*
6208 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6209 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6210 */
6211VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6212 tRemoveStaKeyParams *removeStaKeyParams )
6213{
6214 WDI_Status status = WDI_STATUS_SUCCESS ;
6215 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6216 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6217 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 if(NULL == wdiRemoveStaKeyParam)
6222 {
6223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 VOS_ASSERT(0);
6226 return VOS_STATUS_E_NOMEM;
6227 }
6228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6229 if(NULL == pWdaParams)
6230 {
6231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 VOS_ASSERT(0);
6234 vos_mem_free(wdiRemoveStaKeyParam);
6235 return VOS_STATUS_E_NOMEM;
6236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 /* copy remove STA key params to WDI structure*/
6238 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6239 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6240 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6241 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6242 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 /* Store remove key pointer, as this will be used for response */
6244 /* store Params pass it to WDI */
6245 pWdaParams->pWdaContext = pWDA;
6246 pWdaParams->wdaMsgParam = removeStaKeyParams;
6247 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6249 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(IS_WDI_STATUS_FAILURE(status))
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6253 "Failure in remove STA Key Req WDI API, free all the memory " );
6254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6255 vos_mem_free(pWdaParams) ;
6256 removeStaKeyParams->status = eSIR_FAILURE ;
6257 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 return CONVERT_WDI2VOS_STATUS(status) ;
6260}
Jeff Johnson295189b2012-06-20 16:38:30 -07006261/*
6262 * FUNCTION: WDA_IsHandleSetLinkStateReq
6263 * Update the WDA state and return the status to handle this message or not
6264 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006265WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6266 tWDA_CbContext *pWDA,
6267 tLinkStateParams *linkStateParams)
6268{
6269 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 switch(linkStateParams->state)
6271 {
6272 case eSIR_LINK_PREASSOC_STATE:
6273 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6274 /*
6275 * set the WDA state to PRE ASSOC
6276 * copy the BSSID into pWDA to use it in join request and return,
6277 * No need to handle these messages.
6278 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006279 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6280 {
6281 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006283 }
6284 else
6285 {
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006287 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006288 VOS_ASSERT(0);
6289 }
6290
6291 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6292 {
6293 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006295 }
6296 else
6297 {
6298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006299 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006300 VOS_ASSERT(0);
6301 }
6302
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6304 *channel and after ) so reset the WDA state to ready when the second
6305 * time UMAC issue the link state with PREASSOC
6306 */
6307 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6308 {
6309 /* RESET WDA state back to WDA_READY_STATE */
6310 pWDA->wdaState = WDA_READY_STATE;
6311 }
6312 else
6313 {
6314 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6315 }
6316 //populate linkState info in WDACbCtxt
6317 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 default:
6320 if(pWDA->wdaState != WDA_READY_STATE)
6321 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006322 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6323 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6324 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6325 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6326 *the ASSERT in WDA_Stop during module unload.*/
6327 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6328 {
6329 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006330 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006331 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006332 else
6333 {
6334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006335 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006336 status = WDA_IGNORE_SET_LINK_STATE;
6337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 }
6339 break;
6340 }
6341
6342 return status;
6343}
Jeff Johnson295189b2012-06-20 16:38:30 -07006344/*
6345 * FUNCTION: WDA_SetLinkStateCallback
6346 * call back function for set link state from WDI
6347 */
6348void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6349{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306350 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 tLinkStateParams *linkStateParams;
6352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006354 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306355 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 {
6357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 VOS_ASSERT(0) ;
6360 return ;
6361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306363 if (NULL == pWDA)
6364 {
6365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6366 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6368 vos_mem_free(pWdaParams->wdaMsgParam);
6369 vos_mem_free(pWdaParams);
6370
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306371 VOS_ASSERT(0);
6372 return ;
6373 }
6374
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 /*
6377 * In STA mode start the BA activity check timer after association
6378 * and in AP mode start BA activity check timer after BSS start */
6379 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6380 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006381 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6382 ((status == WDI_STATUS_SUCCESS) &&
6383 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 {
6385 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 /*
6389 * No respone required for WDA_SET_LINK_STATE so free the request
6390 * param here
6391 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6393 vos_mem_free(pWdaParams);
6394
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 return ;
6396}
Jeff Johnson295189b2012-06-20 16:38:30 -07006397/*
6398 * FUNCTION: WDA_ProcessSetLinkState
6399 * Request to WDI to set the link status.
6400 */
6401VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6402 tLinkStateParams *linkStateParams)
6403{
6404 WDI_Status status = WDI_STATUS_SUCCESS ;
6405 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6406 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6407 sizeof(WDI_SetLinkReqParamsType)) ;
6408 tWDA_ReqParams *pWdaParams ;
6409 tpAniSirGlobal pMac;
6410 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6411
6412 if(NULL == pMac)
6413 {
6414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006415 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006417 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 return VOS_STATUS_E_FAILURE;
6419 }
6420
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006422 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 if(NULL == wdiSetLinkStateParam)
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 VOS_ASSERT(0);
6428 return VOS_STATUS_E_NOMEM;
6429 }
6430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6431 if(NULL == pWdaParams)
6432 {
6433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 VOS_ASSERT(0);
6436 vos_mem_free(wdiSetLinkStateParam);
6437 return VOS_STATUS_E_NOMEM;
6438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 if(WDA_IGNORE_SET_LINK_STATE ==
6440 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6441 {
6442 status = WDI_STATUS_E_FAILURE;
6443 }
6444 else
6445 {
6446 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6447 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6449 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6451 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 pWdaParams->pWdaContext = pWDA;
6453 /* Store remove key pointer, as this will be used for response */
6454 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 /* store Params pass it to WDI */
6456 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6457 /* Stop Timer only other than GO role and concurrent session */
6458 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006459 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6461 {
6462 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6465 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 if(IS_WDI_STATUS_FAILURE(status))
6467 {
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6469 "Failure in set link state Req WDI API, free all the memory " );
6470 }
6471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 if(IS_WDI_STATUS_FAILURE(status))
6473 {
6474 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006475 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 vos_mem_free(pWdaParams);
6477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 return CONVERT_WDI2VOS_STATUS(status) ;
6479}
Jeff Johnson295189b2012-06-20 16:38:30 -07006480/*
6481 * FUNCTION: WDA_GetStatsReqParamsCallback
6482 * send the response to PE with Stats received from WDI
6483 */
6484void WDA_GetStatsReqParamsCallback(
6485 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6486 void* pUserData)
6487{
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306489 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006490
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006492 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 pGetPEStatsRspParams =
6494 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6495 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6496
6497 if(NULL == pGetPEStatsRspParams)
6498 {
6499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 VOS_ASSERT(0);
6502 return;
6503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306505 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6507 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006508
6509 //Fill the Session Id Properly in PE
6510 pGetPEStatsRspParams->sessionId = 0;
6511 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006512 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6514 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 vos_mem_copy( pGetPEStatsRspParams + 1,
6516 wdiGetStatsRsp + 1,
6517 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306518
6519 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6520 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6521 vosMsg.bodyval = 0;
6522 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6523 (vos_msg_t*)&vosMsg))
6524 {
6525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6526 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6527 vos_mem_free(pGetPEStatsRspParams);
6528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006529
6530 return;
6531}
6532
Jeff Johnson295189b2012-06-20 16:38:30 -07006533/*
6534 * FUNCTION: WDA_ProcessGetStatsReq
6535 * Request to WDI to get the statistics
6536 */
6537VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6538 tAniGetPEStatsReq *pGetStatsParams)
6539{
6540 WDI_Status status = WDI_STATUS_SUCCESS ;
6541 WDI_GetStatsReqParamsType wdiGetStatsParam;
6542 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306543 vos_msg_t vosMsg;
6544
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006546 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006547 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6548 pGetStatsParams->staId;
6549 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6550 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 status = WDI_GetStatsReq(&wdiGetStatsParam,
6553 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 if(IS_WDI_STATUS_FAILURE(status))
6555 {
6556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6557 "Failure in Get Stats Req WDI API, free all the memory " );
6558 pGetPEStatsRspParams =
6559 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6560 if(NULL == pGetPEStatsRspParams)
6561 {
6562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006565 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 return VOS_STATUS_E_NOMEM;
6567 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306568 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6570 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6571 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306572
6573 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6574 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6575 vosMsg.bodyval = 0;
6576 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6577 (vos_msg_t*)&vosMsg))
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6580 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6581 vos_mem_free(pGetPEStatsRspParams);
6582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 /* Free the request message */
6585 vos_mem_free(pGetStatsParams);
6586 return CONVERT_WDI2VOS_STATUS(status);
6587}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006588
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006589#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006590/*
6591 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6592 * send the response to PE with roam Rssi received from WDI
6593 */
6594void WDA_GetRoamRssiReqParamsCallback(
6595 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6596 void* pUserData)
6597{
6598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6599 tWDA_CbContext *pWDA = NULL;
6600 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6601 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6603 "<------ %s " ,__func__);
6604 if(NULL == pWdaParams)
6605 {
6606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6607 "%s: pWdaParams received NULL", __func__);
6608 VOS_ASSERT(0) ;
6609 return ;
6610 }
6611 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6612 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6613
6614 if(NULL == pGetRoamRssiReqParams)
6615 {
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6617 "%s: pGetRoamRssiReqParams received NULL", __func__);
6618 VOS_ASSERT(0);
6619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6620 vos_mem_free(pWdaParams);
6621 return ;
6622 }
6623 pGetRoamRssiRspParams =
6624 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6625
6626 if(NULL == pGetRoamRssiRspParams)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6629 "%s: VOS MEM Alloc Failure", __func__);
6630 VOS_ASSERT(0);
6631 return;
6632 }
6633 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6634 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006635 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006636 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6637 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6638
6639 /* Assign get roam rssi req (backup) in to the response */
6640 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6641
6642 /* free WDI command buffer */
6643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6644 vos_mem_free(pWdaParams) ;
6645
6646 /* send response to UMAC*/
6647 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6648
6649 return;
6650}
6651
6652
6653
6654/*
6655 * FUNCTION: WDA_ProcessGetRoamRssiReq
6656 * Request to WDI to get the statistics
6657 */
6658VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6659 tAniGetRssiReq *pGetRoamRssiParams)
6660{
6661 WDI_Status status = WDI_STATUS_SUCCESS ;
6662 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6663 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6664 tWDA_ReqParams *pWdaParams = NULL;
6665
6666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6667 "------> %s " ,__func__);
6668 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6669 pGetRoamRssiParams->staId;
6670 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6671
6672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6673 if(NULL == pWdaParams)
6674 {
6675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6676 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306677 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006678 VOS_ASSERT(0);
6679 return VOS_STATUS_E_NOMEM;
6680 }
6681
6682 /* Store Init Req pointer, as this will be used for response */
6683 pWdaParams->pWdaContext = pWDA;
6684
6685 /* Take Get roam Rssi req backup as it stores the callback to be called after
6686 receiving the response */
6687 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6688 pWdaParams->wdaWdiApiMsgParam = NULL;
6689
6690 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6691 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6692 if(IS_WDI_STATUS_FAILURE(status))
6693 {
6694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6695 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6696 pGetRoamRssiRspParams =
6697 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6698 if(NULL == pGetRoamRssiRspParams)
6699 {
6700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6701 "%s: VOS MEM Alloc Failure", __func__);
6702 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306703 vos_mem_free(pGetRoamRssiParams);
6704 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006705 return VOS_STATUS_E_NOMEM;
6706 }
6707 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6708 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6709 pGetRoamRssiRspParams->rssi = 0;
6710 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6711 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6712 (void *)pGetRoamRssiRspParams, 0) ;
6713 }
6714 return CONVERT_WDI2VOS_STATUS(status);
6715}
6716#endif
6717
6718
Jeff Johnson295189b2012-06-20 16:38:30 -07006719/*
6720 * FUNCTION: WDA_UpdateEDCAParamCallback
6721 * call back function for Update EDCA params from WDI
6722 */
6723void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6724{
6725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6726 tEdcaParams *pEdcaParams;
6727
6728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 if(NULL == pWdaParams)
6731 {
6732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006733 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 VOS_ASSERT(0) ;
6735 return ;
6736 }
6737 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6739 vos_mem_free(pWdaParams);
6740 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 return ;
6742}
Jeff Johnson295189b2012-06-20 16:38:30 -07006743/*
6744 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6745 * Request to WDI to Update the EDCA params.
6746 */
6747VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6748 tEdcaParams *pEdcaParams)
6749{
6750 WDI_Status status = WDI_STATUS_SUCCESS ;
6751 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6752 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6753 sizeof(WDI_UpdateEDCAParamsType)) ;
6754 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 if(NULL == wdiEdcaParam)
6758 {
6759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006762 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 return VOS_STATUS_E_NOMEM;
6764 }
6765 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6766 if(NULL == pWdaParams)
6767 {
6768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 VOS_ASSERT(0);
6771 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006772 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 return VOS_STATUS_E_NOMEM;
6774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006776 /*
6777 Since firmware is not using highperformance flag, we have removed
6778 this flag from wdiEDCAInfo structure to match sizeof the structure
6779 between host and firmware.In future if we are planning to use
6780 highperformance flag then Please define this flag in wdiEDCAInfo
6781 structure, update it here and send it to firmware. i.e.
6782 Following is the original line which we removed as part of the fix
6783 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6784 pEdcaParams->highPerformance;
6785 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6787 &pEdcaParams->acbe);
6788 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6789 &pEdcaParams->acbk);
6790 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6791 &pEdcaParams->acvi);
6792 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6793 &pEdcaParams->acvo);
6794 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 pWdaParams->pWdaContext = pWDA;
6796 /* Store remove key pointer, as this will be used for response */
6797 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 /* store Params pass it to WDI */
6799 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6801 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 if(IS_WDI_STATUS_FAILURE(status))
6803 {
6804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6805 "Failure in Update EDCA Params WDI API, free all the memory " );
6806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6807 vos_mem_free(pWdaParams);
6808 vos_mem_free(pEdcaParams);
6809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 return CONVERT_WDI2VOS_STATUS(status) ;
6811}
Jeff Johnson295189b2012-06-20 16:38:30 -07006812/*
6813 * FUNCTION: WDA_AddBAReqCallback
6814 * send ADD BA RSP back to PE
6815 */
6816void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6817 void* pUserData)
6818{
6819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6820 tWDA_CbContext *pWDA;
6821 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006823 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306824 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 {
6826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006827 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 VOS_ASSERT(0) ;
6829 return ;
6830 }
6831 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306832 if (NULL == pWDA)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6835 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6837 vos_mem_free(pWdaParams->wdaMsgParam);
6838 vos_mem_free(pWdaParams);
6839
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306840 VOS_ASSERT(0);
6841 return ;
6842 }
6843
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6846 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006847 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 return ;
6850}
6851
Jeff Johnson295189b2012-06-20 16:38:30 -07006852/*
6853 * FUNCTION: WDA_ProcessAddBAReq
6854 * Request to WDI to Update the ADDBA REQ params.
6855 */
6856VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306857 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006858{
Jeff Johnson43971f52012-07-17 12:26:56 -07006859 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6861 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6862 sizeof(WDI_AddBAReqParamsType)) ;
6863 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(NULL == wdiAddBAReqParam)
6867 {
6868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 VOS_ASSERT(0);
6871 return VOS_STATUS_E_NOMEM;
6872 }
6873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6874 if(NULL == pWdaParams)
6875 {
6876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 VOS_ASSERT(0);
6879 vos_mem_free(wdiAddBAReqParam);
6880 return VOS_STATUS_E_NOMEM;
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 do
6883 {
6884 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 wdiAddBaInfo->ucSTAIdx = staIdx ;
6886 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306887 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 } while(0) ;
6889 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 pWdaParams->pWdaContext = pWDA;
6891 /* store Params pass it to WDI */
6892 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6893 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006894 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6895 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006896
Jeff Johnson43971f52012-07-17 12:26:56 -07006897 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006900 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6901 status = CONVERT_WDI2VOS_STATUS(wstatus);
6902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 vos_mem_free(pWdaParams);
6904 pAddBAReqParams->status = eSIR_FAILURE;
6905 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6906 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006907 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006908}
Jeff Johnson295189b2012-06-20 16:38:30 -07006909/*
6910 * FUNCTION: WDA_AddBASessionReqCallback
6911 * send ADD BA SESSION RSP back to PE/(or TL)
6912 */
6913void WDA_AddBASessionReqCallback(
6914 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6915{
6916 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306918 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006921 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 if(NULL == pWdaParams)
6923 {
6924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006925 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 VOS_ASSERT(0) ;
6927 return ;
6928 }
6929 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306930 if (NULL == pWDA)
6931 {
6932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6933 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6935 vos_mem_free(pWdaParams->wdaMsgParam);
6936 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306937 VOS_ASSERT(0);
6938 return ;
6939 }
6940
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 if( NULL == pAddBAReqParams )
6943 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006945 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6948 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 return ;
6950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6952 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306954 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 * another request to HAL(/WDI) (ADD_BA_REQ)
6956 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 if((VOS_STATUS_SUCCESS ==
6958 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306959 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 {
6961 /* Update TL with BA info received from HAL/WDI */
6962 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6963 wdiAddBaSession->usBaSessionID,
6964 wdiAddBaSession->ucSTAIdx,
6965 wdiAddBaSession->ucBaTID,
6966 wdiAddBaSession->ucBaBufferSize,
6967 wdiAddBaSession->ucWinSize,
6968 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306970 wdiAddBaSession->ucSTAIdx,
6971 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 }
6973 else
6974 {
6975 pAddBAReqParams->status =
6976 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6977
6978 /* Setting Flag to indicate that Set BA is success */
6979 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6980 {
6981 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6982 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6983 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 /*Reset the WDA state to READY */
6988 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 return ;
6990}
6991
Jeff Johnson295189b2012-06-20 16:38:30 -07006992/*
6993 * FUNCTION: WDA_ProcessAddBASessionReq
6994 * Request to WDI to Update the ADDBA REQ params.
6995 */
6996VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6997 tAddBAParams *pAddBAReqParams)
6998{
6999 WDI_Status status = WDI_STATUS_SUCCESS ;
7000 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7001 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7002 sizeof(WDI_AddBASessionReqParamsType)) ;
7003 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007004 WLANTL_STAStateType tlSTAState = 0;
7005
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007007 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 if(NULL == wdiAddBASessionReqParam)
7009 {
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_ASSERT(0);
7013 return VOS_STATUS_E_NOMEM;
7014 }
7015 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7016 if(NULL == pWdaParams)
7017 {
7018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 VOS_ASSERT(0);
7021 vos_mem_free(wdiAddBASessionReqParam);
7022 return VOS_STATUS_E_NOMEM;
7023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 /*
7025 * Populate ADD BA parameters and pass these paarmeters to WDI.
7026 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7027 * the state to track if these is BA recipient case or BA initiator
7028 * case.
7029 */
7030 do
7031 {
7032 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7033 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7034 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7035 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7036 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7037 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7038 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7041 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7042 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7043 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7044 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307045
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 }while(0) ;
7047 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 pWdaParams->pWdaContext = pWDA;
7049 /* Store ADD BA pointer, as this will be used for response */
7050 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7051 /* store Params pass it to WDI */
7052 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007053
7054 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7055 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7056 */
7057 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7058 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007061 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007062 status = WDI_STATUS_E_NOT_ALLOWED;
7063 pAddBAReqParams->status =
7064 CONVERT_WDI2SIR_STATUS(status) ;
7065 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7066 /*Reset the WDA state to READY */
7067 pWDA->wdaState = WDA_READY_STATE;
7068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7069 vos_mem_free(pWdaParams);
7070
7071 return CONVERT_WDI2VOS_STATUS(status) ;
7072 }
7073
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7075 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 if(IS_WDI_STATUS_FAILURE(status))
7077 {
7078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007079 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007081 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007082 pAddBAReqParams->status =
7083 CONVERT_WDI2SIR_STATUS(status) ;
7084 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007085 /*Reset the WDA state to READY */
7086 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 vos_mem_free(pWdaParams);
7089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091}
Jeff Johnson295189b2012-06-20 16:38:30 -07007092/*
7093 * FUNCTION: WDA_DelBANotifyTL
7094 * send DEL BA IND to TL
7095 */
7096void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7097 tDelBAParams *pDelBAReqParams)
7098{
7099 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7100 //tSirMsgQ msg;
7101 vos_msg_t vosMsg;
7102 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 if(NULL == pDelBAInd)
7104 {
7105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 VOS_ASSERT(0) ;
7108 return;
7109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7111 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7112 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7113 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007114
Jeff Johnson295189b2012-06-20 16:38:30 -07007115
7116 vosMsg.type = WDA_DELETEBA_IND;
7117 vosMsg.bodyptr = pDelBAInd;
7118 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7119 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7120 {
7121 vosStatus = VOS_STATUS_E_BADMSG;
7122 }
7123}
Jeff Johnson295189b2012-06-20 16:38:30 -07007124/*
7125 * FUNCTION: WDA_DelBAReqCallback
7126 * send DEL BA RSP back to PE
7127 */
7128void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7129{
7130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7131 tWDA_CbContext *pWDA;
7132 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 if(NULL == pWdaParams)
7136 {
7137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007138 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 VOS_ASSERT(0) ;
7140 return ;
7141 }
7142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307143
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 /* Notify TL about DEL BA in case of recipinet */
7146 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7147 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7148 {
7149 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 /*
7152 * No respone required for WDA_DELBA_IND so just free the request
7153 * param here
7154 */
7155 vos_mem_free(pDelBAReqParams);
7156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7157 vos_mem_free(pWdaParams);
7158 return ;
7159}
7160
Jeff Johnson295189b2012-06-20 16:38:30 -07007161/*
7162 * FUNCTION: WDA_ProcessDelBAReq
7163 * Request to WDI to Update the DELBA REQ params.
7164 */
7165VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7166 tDelBAParams *pDelBAReqParams)
7167{
7168 WDI_Status status = WDI_STATUS_SUCCESS ;
7169 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7170 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7171 sizeof(WDI_DelBAReqParamsType)) ;
7172 tWDA_ReqParams *pWdaParams ;
7173 tANI_U16 staIdx = 0;
7174 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 if(NULL == wdiDelBAReqParam)
7178 {
7179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 VOS_ASSERT(0);
7182 return VOS_STATUS_E_NOMEM;
7183 }
7184 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7185 if(NULL == pWdaParams)
7186 {
7187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_ASSERT(0);
7190 vos_mem_free(wdiDelBAReqParam);
7191 return VOS_STATUS_E_NOMEM;
7192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7194 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7195 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7196 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 pWdaParams->pWdaContext = pWDA;
7198 /* Store DEL BA pointer, as this will be used for response */
7199 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 /* store Params pass it to WDI */
7201 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7203 * maintained in WDA, so that WDA can retry for another BA session
7204 */
7205 staIdx = pDelBAReqParams->staIdx;
7206 tid = pDelBAReqParams->baTID;
7207 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 status = WDI_DelBAReq(wdiDelBAReqParam,
7209 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 if(IS_WDI_STATUS_FAILURE(status))
7211 {
7212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7213 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7215 vos_mem_free(pWdaParams->wdaMsgParam);
7216 vos_mem_free(pWdaParams);
7217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007219}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007220
7221/*
7222 * FUNCTION: WDA_UpdateChReqCallback
7223 *
7224 */
7225void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7226{
Siddharth Bhala006c122014-05-03 12:13:27 +05307227 tWDA_ReqParams *pWdaParams;
7228 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7229 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7230 WDI_UpdateChannelReqinfoType *pChanInfoType;
7231 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007232
7233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7234 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307235 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007236 {
7237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307238 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007239 VOS_ASSERT(0);
7240 return;
7241 }
7242
Siddharth Bhala006c122014-05-03 12:13:27 +05307243 pWdaParams = (tWDA_ReqParams *)pUserData;
7244 pwdiUpdateChReqParam =
7245 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7246 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7247 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7248 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007249 /*
7250 * currently there is no response message is expected between PE and
7251 * WDA, Failure return from WDI is a ASSERT condition
7252 */
7253 vos_mem_free(pChanInfoType);
7254 vos_mem_free(pChanList);
7255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7256 vos_mem_free(pWdaParams);
7257
7258 return;
7259}
7260
7261/*
7262 * FUNCTION: WDA_ProcessUpdateChannelList
7263 * Request to WDI to Update the ChannelList params.
7264 */
7265VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7266 tSirUpdateChanList *pChanList)
7267{
7268 WDI_Status status = WDI_STATUS_SUCCESS;
7269 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7270 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7271 WDI_UpdateChannelReqinfoType *pChanInfoType;
7272 tWDA_ReqParams *pWdaParams;
7273 wpt_uint8 i;
7274
7275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7276 "------> %s " ,__func__);
7277 if(NULL == pChanList)
7278 {
7279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7280 "%s: NULL pChanList", __func__);
7281 VOS_ASSERT(0);
7282 return VOS_STATUS_E_INVAL;
7283 }
7284
7285 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7286 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007288 "Update channel list capability Not Supported");
7289 vos_mem_free(pChanList);
7290 return VOS_STATUS_E_INVAL;
7291 }
7292
7293 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7294 sizeof(WDI_UpdateChReqParamsType));
7295 if(NULL == pwdiUpdateChReqParam)
7296 {
7297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7298 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7299 __func__);
7300 VOS_ASSERT(0);
7301 vos_mem_free(pChanList);
7302 return VOS_STATUS_E_NOMEM;
7303 }
7304 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7305 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7306 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7307 pChanList->numChan);
7308 if(NULL == pChanInfoType)
7309 {
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7311 "%s: VOS MEM Alloc Failure", __func__);
7312 VOS_ASSERT(0);
7313 vos_mem_free(pChanList);
7314 vos_mem_free(pwdiUpdateChReqParam);
7315 return VOS_STATUS_E_NOMEM;
7316 }
7317 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7318 * pChanList->numChan);
7319 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7320
7321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7322 if(NULL == pWdaParams)
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7325 "%s: VOS MEM Alloc Failure", __func__);
7326 VOS_ASSERT(0);
7327 vos_mem_free(pChanList);
7328 vos_mem_free(pChanInfoType);
7329 vos_mem_free(pwdiUpdateChReqParam);
7330 return VOS_STATUS_E_NOMEM;
7331 }
7332 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7333
7334 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7335 {
7336 pChanInfoType->mhz =
7337 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7338
7339 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7340 pChanInfoType->band_center_freq2 = 0;
7341
7342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7343 "chan[%d] = %u", i, pChanInfoType->mhz);
7344 if (pChanList->chanParam[i].dfsSet)
7345 {
7346 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7348 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7349 pChanList->chanParam[i].dfsSet);
7350 }
7351
7352 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7353 {
7354 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7355 }
7356 else
7357 {
7358 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7359 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7360 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7361 }
7362
7363 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7364 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307365 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007366 pChanInfoType++;
7367 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007368 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7369 pWdaParams->pWdaContext = pWDA;
7370 pWdaParams->wdaMsgParam = (void *)pChanList;
7371 /* store Params pass it to WDI */
7372 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7373 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7374 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7375 if(IS_WDI_STATUS_FAILURE(status))
7376 {
7377 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "Failure in Update Channel REQ Params WDI API, free all the memory");
7379 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7380 vos_mem_free(pwdiUpdateChReqParam);
7381 vos_mem_free(pWdaParams->wdaMsgParam);
7382 vos_mem_free(pWdaParams);
7383 }
7384 return CONVERT_WDI2VOS_STATUS(status);
7385}
7386
Jeff Johnson295189b2012-06-20 16:38:30 -07007387/*
7388 * FUNCTION: WDA_AddTSReqCallback
7389 * send ADD TS RSP back to PE
7390 */
7391void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7392{
7393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307394 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 tAddTsParams *pAddTsReqParams;
7396
7397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 if(NULL == pWdaParams)
7400 {
7401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007402 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 VOS_ASSERT(0) ;
7404 return ;
7405 }
7406 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307407 if (NULL == pWDA)
7408 {
7409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7410 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7412 vos_mem_free(pWdaParams->wdaMsgParam);
7413 vos_mem_free(pWdaParams);
7414
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307415 VOS_ASSERT(0);
7416 return ;
7417 }
7418
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7421 vos_mem_free(pWdaParams);
7422
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007423 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 return ;
7426}
7427
Jeff Johnson295189b2012-06-20 16:38:30 -07007428/*
7429 * FUNCTION: WDA_ProcessAddTSReq
7430 * Request to WDI to Update the ADD TS REQ params.
7431 */
7432VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7433 tAddTsParams *pAddTsReqParams)
7434{
7435 WDI_Status status = WDI_STATUS_SUCCESS ;
7436 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7437 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7438 sizeof(WDI_AddTSReqParamsType)) ;
7439 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007441 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 if(NULL == wdiAddTSReqParam)
7443 {
7444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 VOS_ASSERT(0);
7447 return VOS_STATUS_E_NOMEM;
7448 }
7449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7450 if(NULL == pWdaParams)
7451 {
7452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 VOS_ASSERT(0);
7455 vos_mem_free(wdiAddTSReqParam);
7456 return VOS_STATUS_E_NOMEM;
7457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7459 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 //TS IE
7461 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7463 pAddTsReqParams->tspec.length;
7464
7465 //TS IE : TS INFO : TRAFFIC
7466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7467 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7469 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7470 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7471 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7472 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7473 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7474 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7475 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7476 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7477 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7478 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7479 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7480 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7481 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7482
7483 //TS IE : TS INFO : SCHEDULE
7484 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7485 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7486 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7487 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 //TS IE
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7490 pAddTsReqParams->tspec.nomMsduSz;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7492 pAddTsReqParams->tspec.maxMsduSz;
7493 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7494 pAddTsReqParams->tspec.minSvcInterval;
7495 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7496 pAddTsReqParams->tspec.maxSvcInterval;
7497 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7498 pAddTsReqParams->tspec.inactInterval;
7499 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7500 pAddTsReqParams->tspec.suspendInterval;
7501 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7502 pAddTsReqParams->tspec.svcStartTime;
7503 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7504 pAddTsReqParams->tspec.minDataRate;
7505 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7506 pAddTsReqParams->tspec.meanDataRate;
7507 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7508 pAddTsReqParams->tspec.peakDataRate;
7509 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7510 pAddTsReqParams->tspec.maxBurstSz;
7511 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7512 pAddTsReqParams->tspec.delayBound;
7513 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7514 pAddTsReqParams->tspec.minPhyRate;
7515 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7516 pAddTsReqParams->tspec.surplusBw;
7517 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7518 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 /* TODO: tAddTsParams doesn't have the following fields */
7520#if 0
7521 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7522 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7523 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7524 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7525#endif
7526 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7527
7528 pWdaParams->pWdaContext = pWDA;
7529 /* Store ADD TS pointer, as this will be used for response */
7530 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 /* store Params pass it to WDI */
7532 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 status = WDI_AddTSReq(wdiAddTSReqParam,
7534 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 if(IS_WDI_STATUS_FAILURE(status))
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7538 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7540 vos_mem_free(pWdaParams);
7541 pAddTsReqParams->status = eSIR_FAILURE ;
7542 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007545}
7546
Jeff Johnson295189b2012-06-20 16:38:30 -07007547/*
7548 * FUNCTION: WDA_DelTSReqCallback
7549 * send DEL TS RSP back to PE
7550 */
7551void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7552{
7553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7557 vos_mem_free(pWdaParams->wdaMsgParam) ;
7558 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 /*
7560 * No respone required for WDA_DEL_TS_REQ so just free the request
7561 * param here
7562 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 return ;
7564}
7565
Jeff Johnson295189b2012-06-20 16:38:30 -07007566/*
7567 * FUNCTION: WDA_ProcessDelTSReq
7568 * Request to WDI to Update the DELTS REQ params.
7569 */
7570VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7571 tDelTsParams *pDelTSReqParams)
7572{
7573 WDI_Status status = WDI_STATUS_SUCCESS ;
7574 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7575 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7576 sizeof(WDI_DelTSReqParamsType)) ;
7577 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007579 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 if(NULL == wdiDelTSReqParam)
7581 {
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007584 VOS_ASSERT(0);
7585 return VOS_STATUS_E_NOMEM;
7586 }
7587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7588 if(NULL == pWdaParams)
7589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_ASSERT(0);
7593 vos_mem_free(wdiDelTSReqParam);
7594 return VOS_STATUS_E_NOMEM;
7595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7597 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7598 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7599 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7600 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 pWdaParams->pWdaContext = pWDA;
7602 /* Store DEL TS pointer, as this will be used for response */
7603 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007604 /* store Params pass it to WDI */
7605 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 status = WDI_DelTSReq(wdiDelTSReqParam,
7607 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 if(IS_WDI_STATUS_FAILURE(status))
7609 {
7610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7611 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7613 vos_mem_free(pWdaParams->wdaMsgParam);
7614 vos_mem_free(pWdaParams);
7615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007617}
Jeff Johnson295189b2012-06-20 16:38:30 -07007618/*
7619 * FUNCTION: WDA_UpdateBeaconParamsCallback
7620 * Free the memory. No need to send any response to PE in this case
7621 */
7622void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7623{
7624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007626 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 if(NULL == pWdaParams)
7628 {
7629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007630 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 VOS_ASSERT(0) ;
7632 return ;
7633 }
7634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7635 vos_mem_free(pWdaParams->wdaMsgParam) ;
7636 vos_mem_free(pWdaParams);
7637 /*
7638 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7639 * param here
7640 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 return ;
7642}
Jeff Johnson295189b2012-06-20 16:38:30 -07007643/*
7644 * FUNCTION: WDA_ProcessUpdateBeaconParams
7645 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7646 */
7647VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7648 tUpdateBeaconParams *pUpdateBeaconParams)
7649{
7650 WDI_Status status = WDI_STATUS_SUCCESS ;
7651 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7652 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7653 sizeof(WDI_UpdateBeaconParamsType)) ;
7654 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007656 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 if(NULL == wdiUpdateBeaconParams)
7658 {
7659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007660 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 VOS_ASSERT(0);
7662 return VOS_STATUS_E_NOMEM;
7663 }
7664 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7665 if(NULL == pWdaParams)
7666 {
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 VOS_ASSERT(0);
7670 vos_mem_free(wdiUpdateBeaconParams);
7671 return VOS_STATUS_E_NOMEM;
7672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7674 pUpdateBeaconParams->bssIdx;
7675 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7676 pUpdateBeaconParams->fShortPreamble;
7677 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7678 pUpdateBeaconParams->fShortSlotTime;
7679 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7680 pUpdateBeaconParams->beaconInterval;
7681 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7682 pUpdateBeaconParams->llaCoexist;
7683 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7684 pUpdateBeaconParams->llbCoexist;
7685 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7686 pUpdateBeaconParams->llgCoexist;
7687 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7688 pUpdateBeaconParams->ht20MhzCoexist;
7689 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7690 pUpdateBeaconParams->llnNonGFCoexist;
7691 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7692 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7693 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7694 pUpdateBeaconParams->fRIFSMode;
7695 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7696 pUpdateBeaconParams->paramChangeBitmap;
7697 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7698
7699 pWdaParams->pWdaContext = pWDA;
7700 /* Store UpdateBeacon Req pointer, as this will be used for response */
7701 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007702 /* store Params pass it to WDI */
7703 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7705 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7706 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 if(IS_WDI_STATUS_FAILURE(status))
7708 {
7709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7710 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7712 vos_mem_free(pWdaParams->wdaMsgParam);
7713 vos_mem_free(pWdaParams);
7714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007716}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007717#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007718/*
7719 * FUNCTION: WDA_TSMStatsReqCallback
7720 * send TSM Stats RSP back to PE
7721 */
7722void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7723{
7724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7725 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007726 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7727 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007730 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 if(NULL == pWdaParams)
7732 {
7733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 VOS_ASSERT(0) ;
7736 return ;
7737 }
7738 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307739 if (NULL == pWDA)
7740 {
7741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7742 "%s:pWDA is NULL", __func__);
7743 VOS_ASSERT(0);
7744 return ;
7745 }
7746
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007747 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7748
7749 if(NULL == pGetTsmStatsReqParams)
7750 {
7751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7752 "%s: pGetTsmStatsReqParams received NULL", __func__);
7753 VOS_ASSERT(0);
7754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7755 vos_mem_free(pWdaParams);
7756 return;
7757 }
7758
7759 pTsmRspParams =
7760 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 if( NULL == pTsmRspParams )
7762 {
7763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007764 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 VOS_ASSERT( 0 );
7766 return ;
7767 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007768 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7769 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7770 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7771
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7773 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7774 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7775 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7776 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7777 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7778 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7779 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7780 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7781 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007782
7783 /* Assign get tsm stats req req (backup) in to the response */
7784 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7785
7786 /* free WDI command buffer */
7787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7788 vos_mem_free(pWdaParams);
7789
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 return ;
7792}
7793
7794
Jeff Johnson295189b2012-06-20 16:38:30 -07007795/*
7796 * FUNCTION: WDA_ProcessTsmStatsReq
7797 * Request to WDI to get the TSM Stats params.
7798 */
7799VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007800 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007801{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007802 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007804 tWDA_ReqParams *pWdaParams = NULL;
7805 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7806
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007808 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7810 sizeof(WDI_TSMStatsReqParamsType));
7811 if(NULL == wdiTSMReqParam)
7812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 VOS_ASSERT(0);
7816 return VOS_STATUS_E_NOMEM;
7817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7819 if(NULL == pWdaParams)
7820 {
7821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 VOS_ASSERT(0);
7824 vos_mem_free(wdiTSMReqParam);
7825 return VOS_STATUS_E_NOMEM;
7826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7828 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7829 pTsmStats->bssId,
7830 sizeof(wpt_macAddr));
7831 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7832
7833 pWdaParams->pWdaContext = pWDA;
7834 /* Store TSM Stats pointer, as this will be used for response */
7835 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007836 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 status = WDI_TSMStatsReq(wdiTSMReqParam,
7838 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 if(IS_WDI_STATUS_FAILURE(status))
7840 {
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7842 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007843 vos_mem_free(pWdaParams);
7844
7845 pGetTsmStatsRspParams =
7846 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7847 if(NULL == pGetTsmStatsRspParams)
7848 {
7849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7850 "%s: VOS MEM Alloc Failure", __func__);
7851 VOS_ASSERT(0);
7852 vos_mem_free(pTsmStats);
7853 return VOS_STATUS_E_NOMEM;
7854 }
7855 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7856 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7857 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7858
7859 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 return CONVERT_WDI2VOS_STATUS(status) ;
7862}
7863#endif
7864/*
7865 * FUNCTION: WDA_SendBeaconParamsCallback
7866 * No need to send any response to PE in this case
7867 */
7868void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7869{
7870
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 return ;
7874}
Jeff Johnson295189b2012-06-20 16:38:30 -07007875/*
7876 * FUNCTION: WDA_ProcessSendBeacon
7877 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7878 * start beacon trasmission
7879 */
7880VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7881 tSendbeaconParams *pSendbeaconParams)
7882{
7883 WDI_Status status = WDI_STATUS_SUCCESS ;
7884 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7888 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7889 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7890 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7892 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307893 /* p2pIeOffset should be atleast greater than timIeOffset */
7894 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7895 (pSendbeaconParams->p2pIeOffset <
7896 pSendbeaconParams->timIeOffset))
7897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7899 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307900 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307901 VOS_ASSERT( 0 );
7902 return WDI_STATUS_E_FAILURE;
7903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7905 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 /* Copy the beacon template to local buffer */
7907 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7908 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7909 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7910
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7912 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 if(IS_WDI_STATUS_FAILURE(status))
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7916 "Failure in SEND BEACON REQ Params WDI API" );
7917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 vos_mem_free(pSendbeaconParams);
7919 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007920}
Jeff Johnson295189b2012-06-20 16:38:30 -07007921/*
7922 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7923 * No need to send any response to PE in this case
7924 */
7925void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7926{
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 return ;
7930}
7931
Jeff Johnson295189b2012-06-20 16:38:30 -07007932/*
7933 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7934 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7935 * send probe response
7936 */
7937VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7938 tSendProbeRespParams *pSendProbeRspParams)
7939{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007940 WDI_Status status = WDI_STATUS_SUCCESS;
7941 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7942 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007944 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007945
7946 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307947 {
7948 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007949 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307950 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007951
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007953 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007955 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 /* Copy the Probe Response template to local buffer */
7958 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007959 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 pSendProbeRspParams->pProbeRespTemplate,
7961 pSendProbeRspParams->probeRespTemplateLen);
7962 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007963 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007964 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7965 WDI_PROBE_REQ_BITMAP_IE_LEN);
7966
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007967 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007968
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007969 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 if(IS_WDI_STATUS_FAILURE(status))
7972 {
7973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7974 "Failure in SEND Probe RSP Params WDI API" );
7975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007977 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007980#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007981/*
7982 * FUNCTION: WDA_SetMaxTxPowerCallBack
7983 * send the response to PE with power value received from WDI
7984 */
7985void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7986 void* pUserData)
7987{
7988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7989 tWDA_CbContext *pWDA = NULL;
7990 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7991
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007993 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 if(NULL == pWdaParams)
7995 {
7996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 VOS_ASSERT(0) ;
7999 return ;
8000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308002 if (NULL == pWDA)
8003 {
8004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8005 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8007 vos_mem_free(pWdaParams->wdaMsgParam);
8008 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308009 VOS_ASSERT(0);
8010 return ;
8011 }
8012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 if( NULL == pMaxTxPowerParams )
8015 {
8016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008017 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008018 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8020 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 return ;
8022 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008023
Jeff Johnson295189b2012-06-20 16:38:30 -07008024
8025 /*need to free memory for the pointers used in the
8026 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8028 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008030
Jeff Johnson295189b2012-06-20 16:38:30 -07008031
8032 /* send response to UMAC*/
8033 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8034
8035 return;
8036}
Jeff Johnson295189b2012-06-20 16:38:30 -07008037/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008038 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 * Request to WDI to send set Max Tx Power Request
8040 */
8041 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8042 tMaxTxPowerParams *MaxTxPowerParams)
8043{
8044 WDI_Status status = WDI_STATUS_SUCCESS;
8045 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8046 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008047
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008049 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008050
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8052 sizeof(WDI_SetMaxTxPowerParamsType));
8053 if(NULL == wdiSetMaxTxPowerParams)
8054 {
8055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 VOS_ASSERT(0);
8058 return VOS_STATUS_E_NOMEM;
8059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8061 if(NULL == pWdaParams)
8062 {
8063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 vos_mem_free(wdiSetMaxTxPowerParams);
8066 VOS_ASSERT(0);
8067 return VOS_STATUS_E_NOMEM;
8068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 /* Copy.Max.Tx.Power Params to WDI structure */
8070 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8071 MaxTxPowerParams->bssId,
8072 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8074 MaxTxPowerParams->selfStaMacAddr,
8075 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8077 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 pWdaParams->pWdaContext = pWDA;
8080 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 /* store Params pass it to WDI */
8082 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8084 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 if(IS_WDI_STATUS_FAILURE(status))
8086 {
8087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8088 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8090 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008091 /* send response to UMAC*/
8092 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 }
8094 return CONVERT_WDI2VOS_STATUS(status);
8095
8096}
Jeff Johnson295189b2012-06-20 16:38:30 -07008097#endif
schang86c22c42013-03-13 18:41:24 -07008098
8099/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008100 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8101 * send the response to PE with power value received from WDI
8102 */
8103void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8104 *pwdiSetMaxTxPowerPerBandRsp,
8105 void* pUserData)
8106{
8107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8108 tWDA_CbContext *pWDA = NULL;
8109 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8110
8111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8112 "<------ %s ", __func__);
8113 if (NULL == pWdaParams)
8114 {
8115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8116 "%s: pWdaParams received NULL", __func__);
8117 VOS_ASSERT(0);
8118 return ;
8119 }
8120 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308121 if (NULL == pWDA)
8122 {
8123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8124 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8126 vos_mem_free(pWdaParams->wdaMsgParam);
8127 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308128 VOS_ASSERT(0);
8129 return ;
8130 }
8131
Arif Hussaina5ebce02013-08-09 15:09:58 -07008132 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8133 if ( NULL == pMxTxPwrPerBandParams )
8134 {
8135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8136 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8137 VOS_ASSERT(0);
8138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8139 vos_mem_free(pWdaParams);
8140 return;
8141 }
8142
8143 /*need to free memory for the pointers used in the
8144 WDA Process.Set Max Tx Power Req function*/
8145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8146 vos_mem_free(pWdaParams);
8147 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8148
8149 /* send response to UMAC*/
8150 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8151 pMxTxPwrPerBandParams, 0);
8152
8153 return;
8154}
8155
8156/*
8157 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8158 * Request to WDI to send set Max Tx Power Per band Request
8159 */
8160 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8161 tMaxTxPowerPerBandParams
8162 *MaxTxPowerPerBandParams)
8163{
8164 WDI_Status status = WDI_STATUS_SUCCESS;
8165 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8166 tWDA_ReqParams *pWdaParams = NULL;
8167
8168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8169 "------> %s ", __func__);
8170
8171 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8172 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8173
8174 if (NULL == wdiSetMxTxPwrPerBandParams)
8175 {
8176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8177 "%s: VOS MEM Alloc Failure", __func__);
8178 VOS_ASSERT(0);
8179 return VOS_STATUS_E_NOMEM;
8180 }
8181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8182 if (NULL == pWdaParams)
8183 {
8184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8185 "%s: VOS MEM Alloc Failure", __func__);
8186 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8187 VOS_ASSERT(0);
8188 return VOS_STATUS_E_NOMEM;
8189 }
8190 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8191 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8192 MaxTxPowerPerBandParams->bandInfo;
8193 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8194 MaxTxPowerPerBandParams->power;
8195 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8196 pWdaParams->pWdaContext = pWDA;
8197 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8198 /* store Params pass it to WDI */
8199 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8200 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8201 WDA_SetMaxTxPowerPerBandCallBack,
8202 pWdaParams);
8203 if (IS_WDI_STATUS_FAILURE(status))
8204 {
8205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8206 "Failure in SET MAX TX Power REQ Params WDI API,"
8207 " free all the memory");
8208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8209 vos_mem_free(pWdaParams);
8210 /* send response to UMAC*/
8211 WDA_SendMsg(pWDA,
8212 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8213 MaxTxPowerPerBandParams, 0);
8214 }
8215 return CONVERT_WDI2VOS_STATUS(status);
8216}
8217
8218/*
schang86c22c42013-03-13 18:41:24 -07008219 * FUNCTION: WDA_SetTxPowerCallBack
8220 * send the response to PE with power value received from WDI
8221 */
8222void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8223 void* pUserData)
8224{
8225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8226 tWDA_CbContext *pWDA = NULL;
8227 tSirSetTxPowerReq *pTxPowerParams = NULL;
8228
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8230 "<------ %s ", __func__);
8231 if(NULL == pWdaParams)
8232 {
8233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8234 "%s: pWdaParams received NULL", __func__);
8235 VOS_ASSERT(0) ;
8236 return ;
8237 }
8238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308239 if (NULL == pWDA)
8240 {
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8242 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8244 vos_mem_free(pWdaParams->wdaMsgParam);
8245 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308246 VOS_ASSERT(0);
8247 return ;
8248 }
8249
schang86c22c42013-03-13 18:41:24 -07008250 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8251 if(NULL == pTxPowerParams)
8252 {
8253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8254 "%s: pTxPowerParams received NULL " ,__func__);
8255 VOS_ASSERT(0);
8256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8257 vos_mem_free(pWdaParams);
8258 return ;
8259 }
8260
8261 /*need to free memory for the pointers used in the
8262 WDA Process.Set Max Tx Power Req function*/
8263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8264 vos_mem_free(pWdaParams);
8265
8266 /* send response to UMAC*/
8267 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8268 return;
8269}
8270
8271/*
8272 * FUNCTION: WDA_ProcessSetTxPowerReq
8273 * Request to WDI to send set Tx Power Request
8274 */
8275 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8276 tSirSetTxPowerReq *txPowerParams)
8277{
8278 WDI_Status status = WDI_STATUS_SUCCESS;
8279 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8280 tWDA_ReqParams *pWdaParams = NULL;
8281
8282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8283 "------> %s ", __func__);
8284
8285 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8286 sizeof(WDI_SetTxPowerParamsType));
8287 if(NULL == wdiSetTxPowerParams)
8288 {
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8290 "%s: VOS MEM Alloc Failure", __func__);
8291 VOS_ASSERT(0);
8292 return VOS_STATUS_E_NOMEM;
8293 }
8294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8295 if(NULL == pWdaParams)
8296 {
8297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8298 "%s: VOS MEM Alloc Failure", __func__);
8299 vos_mem_free(wdiSetTxPowerParams);
8300 VOS_ASSERT(0);
8301 return VOS_STATUS_E_NOMEM;
8302 }
8303 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8304 txPowerParams->bssIdx;
8305 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8306 txPowerParams->mwPower;
8307 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8308 pWdaParams->pWdaContext = pWDA;
8309 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8310 /* store Params pass it to WDI */
8311 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8312 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8313 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8314 if(IS_WDI_STATUS_FAILURE(status))
8315 {
8316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8317 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8319 vos_mem_free(pWdaParams);
8320 /* send response to UMAC*/
8321 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8322 }
8323 return CONVERT_WDI2VOS_STATUS(status);
8324}
8325
Jeff Johnson295189b2012-06-20 16:38:30 -07008326/*
8327 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8328 * Free the memory. No need to send any response to PE in this case
8329 */
8330void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8331{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8333
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008336
8337 if(NULL == pWdaParams)
8338 {
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008340 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008341 VOS_ASSERT(0) ;
8342 return ;
8343 }
8344
8345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8346 vos_mem_free(pWdaParams->wdaMsgParam) ;
8347 vos_mem_free(pWdaParams);
8348
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 /*
8350 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8351 * so just free the request param here
8352 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 return ;
8354}
8355
Jeff Johnson295189b2012-06-20 16:38:30 -07008356/*
8357 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8358 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8359 */
8360VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8361 tP2pPsParams *pP2pPsConfigParams)
8362{
8363 WDI_Status status = WDI_STATUS_SUCCESS ;
8364 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8365 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8366 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008367 tWDA_ReqParams *pWdaParams = NULL;
8368
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 if(NULL == wdiSetP2PGONOAReqParam)
8372 {
8373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008374 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308375 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 VOS_ASSERT(0);
8377 return VOS_STATUS_E_NOMEM;
8378 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008379
8380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8381 if(NULL == pWdaParams)
8382 {
8383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008385 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008386 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008387 VOS_ASSERT(0);
8388 return VOS_STATUS_E_NOMEM;
8389 }
8390
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8392 pP2pPsConfigParams->opp_ps;
8393 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8394 pP2pPsConfigParams->ctWindow;
8395 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8396 pP2pPsConfigParams->count;
8397 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8398 pP2pPsConfigParams->duration;
8399 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8400 pP2pPsConfigParams->interval;
8401 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8402 pP2pPsConfigParams->single_noa_duration;
8403 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8404 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008405
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8407 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008408 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8409
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008411 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8412 pWdaParams->pWdaContext = pWDA;
8413
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008415 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8416
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 if(IS_WDI_STATUS_FAILURE(status))
8418 {
8419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8420 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8422 vos_mem_free(pWdaParams->wdaMsgParam);
8423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 return CONVERT_WDI2VOS_STATUS(status);
8426
Jeff Johnson295189b2012-06-20 16:38:30 -07008427}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308428
8429#ifdef FEATURE_WLAN_TDLS
8430/*
8431 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8432 * Free the memory. No need to send any response to PE in this case
8433 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308434void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8435 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308436{
8437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8438 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308439 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308440
8441
8442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8443 "<------ %s " ,__func__);
8444 if(NULL == pWdaParams)
8445 {
8446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8447 "%s: pWdaParams received NULL", __func__);
8448 VOS_ASSERT(0) ;
8449 return ;
8450 }
8451 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8452
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308453 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308454 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8456 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8458 vos_mem_free(pWdaParams->wdaMsgParam);
8459 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308460 VOS_ASSERT(0);
8461 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308462 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308463
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308464 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8465 if( NULL == pTdlsLinkEstablishParams )
8466 {
8467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8468 "%s: pTdlsLinkEstablishParams "
8469 "received NULL " ,__func__);
8470 VOS_ASSERT(0);
8471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8472 vos_mem_free(pWdaParams);
8473 return ;
8474 }
8475 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8476 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308478 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308479 /* send response to UMAC*/
8480 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8481
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308482 return ;
8483}
8484
8485VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8486 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8487{
8488 WDI_Status status = WDI_STATUS_SUCCESS ;
8489 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8490 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8491 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8492 tWDA_ReqParams *pWdaParams = NULL;
8493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8494 "------> %s " ,__func__);
8495 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308499 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308500 VOS_ASSERT(0);
8501 return VOS_STATUS_E_NOMEM;
8502 }
8503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8504 if(NULL == pWdaParams)
8505 {
8506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8507 "%s: VOS MEM Alloc Failure", __func__);
8508 vos_mem_free(pTdlsLinkEstablishParams);
8509 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8510 VOS_ASSERT(0);
8511 return VOS_STATUS_E_NOMEM;
8512 }
8513 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308514 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308515 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308516 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308517 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308518 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308519 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308520 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308521 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308522 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308523 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8524 pTdlsLinkEstablishParams->isOffChannelSupported;
8525
8526 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8527 pTdlsLinkEstablishParams->validChannels,
8528 pTdlsLinkEstablishParams->validChannelsLen);
8529
8530 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8531 pTdlsLinkEstablishParams->validChannelsLen;
8532
8533 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8534 pTdlsLinkEstablishParams->validOperClasses,
8535 pTdlsLinkEstablishParams->validOperClassesLen);
8536 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8537 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308538
8539 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8540 /* Store msg pointer from PE, as this will be used for response */
8541 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8542 /* store Params pass it to WDI */
8543 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8544 pWdaParams->pWdaContext = pWDA;
8545
8546 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8547 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8548 WDA_SetTDLSLinkEstablishReqParamsCallback,
8549 pWdaParams);
8550 if(IS_WDI_STATUS_FAILURE(status))
8551 {
8552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8553 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8555 vos_mem_free(pWdaParams->wdaMsgParam);
8556 vos_mem_free(pWdaParams);
8557 }
8558 return CONVERT_WDI2VOS_STATUS(status);
8559}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308560
8561// tdlsoffchan
8562void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8563 void* pUserData)
8564{
8565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8566 tWDA_CbContext *pWDA = NULL;
8567 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8568
8569
8570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8571 "<------ %s " ,__func__);
8572 if(NULL == pWdaParams)
8573 {
8574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8575 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308576 VOS_ASSERT(0) ;
8577 return ;
8578 }
8579 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8580
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308581 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308582 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8584 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8586 vos_mem_free(pWdaParams->wdaMsgParam);
8587 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308588 VOS_ASSERT(0);
8589 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308590 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308591
Atul Mittalc0f739f2014-07-31 13:47:47 +05308592 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308593 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8596 "%s: pTdlsChanSwitchParams "
8597 "received NULL " ,__func__);
8598 VOS_ASSERT(0);
8599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8600 vos_mem_free(pWdaParams);
8601 return ;
8602 }
8603 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8604 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8606 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308607 /* send response to UMAC*/
8608 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308609
8610 return ;
8611}
8612VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8613 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8614{
8615 WDI_Status status = WDI_STATUS_SUCCESS ;
8616 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8617 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8618 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8619 tWDA_ReqParams *pWdaParams = NULL;
8620
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8622 "Enter: %s ",__func__);
8623 if(NULL == wdiSetTDLSChanSwitchReqParam)
8624 {
8625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8626 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308627 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308628 VOS_ASSERT(0);
8629 return VOS_STATUS_E_NOMEM;
8630 }
8631
8632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8633 if(NULL == pWdaParams)
8634 {
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8636 "%s: VOS MEM Alloc Failure", __func__);
8637 vos_mem_free(pTdlsChanSwitchParams);
8638 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8639 VOS_ASSERT(0);
8640 return VOS_STATUS_E_NOMEM;
8641 }
8642 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8643 pTdlsChanSwitchParams->staIdx;
8644 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8645 pTdlsChanSwitchParams->tdlsSwMode;
8646 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8647 pTdlsChanSwitchParams->operClass;
8648 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8649 pTdlsChanSwitchParams->tdlsOffCh;
8650 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8651 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8652
8653
8654 /* Store msg pointer from PE, as this will be used for response */
8655 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8656 /* store Params pass it to WDI */
8657 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8658 pWdaParams->pWdaContext = pWDA;
8659 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8660 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8661 WDA_SetTDLSChanSwitchReqParamsCallback,
8662 pWdaParams);
8663 if(IS_WDI_STATUS_FAILURE(status))
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8666 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8668 vos_mem_free(pWdaParams->wdaMsgParam);
8669 vos_mem_free(pWdaParams);
8670 }
8671 return CONVERT_WDI2VOS_STATUS(status);
8672}
8673#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308674
8675
Jeff Johnson295189b2012-06-20 16:38:30 -07008676#ifdef WLAN_FEATURE_VOWIFI_11R
8677/*
8678 * FUNCTION: WDA_AggrAddTSReqCallback
8679 * send ADD AGGREGATED TS RSP back to PE
8680 */
8681void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8682{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308684 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008688 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008689 if(NULL == pWdaParams)
8690 {
8691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008692 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008693 VOS_ASSERT(0) ;
8694 return ;
8695 }
8696
8697 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308698 if (NULL == pWDA)
8699 {
8700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8701 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8703 vos_mem_free(pWdaParams->wdaMsgParam);
8704 vos_mem_free(pWdaParams);
8705
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308706 VOS_ASSERT(0);
8707 return ;
8708 }
8709
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008710 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008711
8712 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8713 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008714 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008717
8718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8719 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 return ;
8721}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008722/*
8723 * FUNCTION: WDA_ProcessAddTSReq
8724 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8725 */
8726VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8727 tAggrAddTsParams *pAggrAddTsReqParams)
8728{
8729 WDI_Status status = WDI_STATUS_SUCCESS ;
8730 int i;
8731 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008732 tWDA_ReqParams *pWdaParams = NULL;
8733
8734
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008736 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8738 sizeof(WDI_AggrAddTSReqParamsType)) ;
8739 if(NULL == wdiAggrAddTSReqParam)
8740 {
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008742 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308743 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_ASSERT(0);
8745 return VOS_STATUS_E_NOMEM;
8746 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008747
8748
8749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8750 if(NULL == pWdaParams)
8751 {
8752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008753 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008755 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008756 VOS_ASSERT(0);
8757 return VOS_STATUS_E_NOMEM;
8758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8760 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8761 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8763 {
8764 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8765 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8766 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8768 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8770 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8771 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8772 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8773 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8774 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8775 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8776 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8777 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8778 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8780 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8782 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8784 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8786 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8788 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8790 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8792 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8794 pAggrAddTsReqParams->tspec[i].inactInterval;
8795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8796 pAggrAddTsReqParams->tspec[i].suspendInterval;
8797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8798 pAggrAddTsReqParams->tspec[i].svcStartTime;
8799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8800 pAggrAddTsReqParams->tspec[i].minDataRate;
8801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8802 pAggrAddTsReqParams->tspec[i].meanDataRate;
8803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8804 pAggrAddTsReqParams->tspec[i].peakDataRate;
8805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8806 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8808 pAggrAddTsReqParams->tspec[i].delayBound;
8809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8810 pAggrAddTsReqParams->tspec[i].minPhyRate;
8811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8812 pAggrAddTsReqParams->tspec[i].surplusBw;
8813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8814 pAggrAddTsReqParams->tspec[i].mediumTime;
8815 }
8816
8817 /* TODO: tAggrAddTsParams doesn't have the following fields */
8818#if 0
8819 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8820 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8821 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8822 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8823#endif
8824 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8825
8826 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008827 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008829 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8830
8831 pWdaParams->pWdaContext = pWDA;
8832
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008834 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8835
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 if(IS_WDI_STATUS_FAILURE(status))
8837 {
8838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8839 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8841 vos_mem_free(pWdaParams);
8842
8843 /* send the failure response back to PE*/
8844 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8845 {
8846 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8847 }
8848
8849 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8850 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 return CONVERT_WDI2VOS_STATUS(status) ;
8853}
8854#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008855/*
Mihir Shetea4306052014-03-25 00:02:54 +05308856 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 * send Enter IMPS RSP back to PE
8858 */
Mihir Shetea4306052014-03-25 00:02:54 +05308859void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008860{
Mihir Shetea4306052014-03-25 00:02:54 +05308861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308862 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308863
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308865 "<------ %s status=%d" ,__func__,status);
8866 if(NULL == pWdaParams)
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "%s: pWdaParams received NULL", __func__);
8870 VOS_ASSERT(0);
8871 return;
8872 }
8873
8874 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308875 if (NULL == pWDA)
8876 {
8877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8878 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8880 vos_mem_free(pWdaParams->wdaMsgParam);
8881 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308882 VOS_ASSERT(0);
8883 return ;
8884 }
Mihir Shetea4306052014-03-25 00:02:54 +05308885
8886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8887 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308888 if (WDI_STATUS_SUCCESS != status)
8889 {
8890 pWDA->failureCounts.enterImpsFailureCount++;
8891 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8892 pWDA->failureCounts.enterImpsFailureCount)
8893 {
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8895 "%s: Status %d fail count %d", __func__, status,
8896 pWDA->failureCounts.enterImpsFailureCount);
8897 pWDA->failureCounts.enterImpsFailureCount = 0;
8898 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8899 WLAN_LOG_INDICATOR_HOST_DRIVER,
8900 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8901 FALSE, TRUE);
8902 }
8903 }
8904 else
8905 {
8906 pWDA->failureCounts.enterImpsFailureCount = 0;
8907 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008908 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 return ;
8910}
Mihir Shetea4306052014-03-25 00:02:54 +05308911
8912
8913/*
8914 * FUNCTION: WDA_EnterImpsReqCallback
8915 * Free memory and send Enter IMPS RSP back to PE.
8916 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8917 */
8918void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8919{
8920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308921 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308922
8923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8924 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8925
8926 if(NULL == pWdaParams)
8927 {
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8929 "%s: pWdaParams received NULL", __func__);
8930 VOS_ASSERT(0);
8931 return;
8932 }
8933
8934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308935 if (NULL == pWDA)
8936 {
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8938 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8940 vos_mem_free(pWdaParams->wdaMsgParam);
8941 vos_mem_free(pWdaParams);
8942
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308943 VOS_ASSERT(0);
8944 return ;
8945 }
8946
Mihir Shetea4306052014-03-25 00:02:54 +05308947
8948 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8949 {
8950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8951 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308952 pWDA->failureCounts.enterImpsFailureCount++;
8953 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8954 pWDA->failureCounts.enterImpsFailureCount)
8955 {
8956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8957 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8958 pWDA->failureCounts.enterImpsFailureCount);
8959 pWDA->failureCounts.enterImpsFailureCount = 0;
8960 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8961 WLAN_LOG_INDICATOR_HOST_DRIVER,
8962 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8963 FALSE, TRUE);
8964 }
Mihir Shetea4306052014-03-25 00:02:54 +05308965 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8966 CONVERT_WDI2SIR_STATUS(wdiStatus));
8967 }
8968
8969 return;
8970}
Jeff Johnson295189b2012-06-20 16:38:30 -07008971/*
8972 * FUNCTION: WDA_ProcessEnterImpsReq
8973 * Request to WDI to Enter IMPS power state.
8974 */
8975VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8976{
8977 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308978 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8979 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308980 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008982 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308983
8984
8985 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8986 if (NULL == wdiEnterImpsReqParams)
8987 {
8988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8989 "%s: VOS MEM Alloc Failure", __func__);
8990 VOS_ASSERT(0);
8991 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8992 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8993 return VOS_STATUS_E_NOMEM;
8994 }
8995
8996 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8997 if (NULL == pWdaParams)
8998 {
8999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9000 "%s: VOS MEM Alloc Failure", __func__);
9001 VOS_ASSERT(0);
9002 vos_mem_free(wdiEnterImpsReqParams);
9003 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9004 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9005 return VOS_STATUS_E_NOMEM;
9006 }
9007
9008 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9009 wdiEnterImpsReqParams->pUserData = pWdaParams;
9010
9011 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9012 pWdaParams->wdaMsgParam = NULL;
9013 pWdaParams->pWdaContext = pWDA;
9014
9015 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9016 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9017 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 if(IS_WDI_STATUS_FAILURE(status))
9019 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309020 if (! (failcnt & 0xF))
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9022 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9023 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309024 vos_mem_free(wdiEnterImpsReqParams);
9025 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009026 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 return CONVERT_WDI2VOS_STATUS(status) ;
9029}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309030
9031/*
9032 * FUNCTION: WDA_ExitImpsRespCallback
9033 * send Exit IMPS RSP back to PE
9034 */
9035void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9036{
9037 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9038 tWDA_CbContext *pWDA;
9039
9040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9041 "<------ %s " ,__func__);
9042
9043 if (NULL == pWdaParams)
9044 {
9045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9046 "%s: pWdaParams received NULL", __func__);
9047 VOS_ASSERT(0);
9048 return;
9049 }
9050 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9051
9052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9053 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309054 if (WDI_STATUS_SUCCESS != status)
9055 {
9056 pWDA->failureCounts.exitImpsFailureCount++;
9057 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9058 pWDA->failureCounts.exitImpsFailureCount)
9059 {
9060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9061 "%s: Status %d fail count %d", __func__,
9062 status,
9063 pWDA->failureCounts.exitImpsFailureCount);
9064 pWDA->failureCounts.exitImpsFailureCount = 0;
9065 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9066 WLAN_LOG_INDICATOR_HOST_DRIVER,
9067 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9068 FALSE, TRUE);
9069 }
9070 }
9071 else
9072 {
9073 pWDA->failureCounts.exitImpsFailureCount = 0;
9074 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309075
9076 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9077 return;
9078}
9079
Jeff Johnson295189b2012-06-20 16:38:30 -07009080/*
9081 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 */
9083void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9084{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309086 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309089 if(NULL == pWdaParams)
9090 {
9091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9092 "%s: pWdaParams received NULL", __func__);
9093 VOS_ASSERT(0);
9094 return;
9095 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309096 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309097 if (IS_WDI_STATUS_FAILURE(status))
9098 {
9099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9100 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309101
9102 pWDA->failureCounts.exitImpsFailureCount++;
9103 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9104 pWDA->failureCounts.exitImpsFailureCount)
9105 {
9106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9107 "%s: wdiStatus %d fail count %d", __func__,
9108 status,
9109 pWDA->failureCounts.exitImpsFailureCount);
9110 pWDA->failureCounts.exitImpsFailureCount = 0;
9111 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9112 WLAN_LOG_INDICATOR_HOST_DRIVER,
9113 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9114 FALSE, TRUE);
9115 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309116 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9117 {
9118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9119 FL("reload wlan driver"));
9120 wpalWlanReload();
9121 }
9122 }
9123 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009124}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309125
Jeff Johnson295189b2012-06-20 16:38:30 -07009126/*
9127 * FUNCTION: WDA_ProcessExitImpsReq
9128 * Request to WDI to Exit IMPS power state.
9129 */
9130VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9131{
9132 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309133 tWDA_ReqParams *pWdaParams;
9134 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9135
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009137 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309138 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9139 sizeof(WDI_ExitImpsReqParamsType));
9140 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9143 "%s: VOS MEM Alloc Failure", __func__);
9144 VOS_ASSERT(0);
9145 return VOS_STATUS_E_NOMEM;
9146 }
9147 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9148 if(NULL == pWdaParams)
9149 {
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9151 "%s: VOS MEM Alloc Failure", __func__);
9152 VOS_ASSERT(0);
9153 vos_mem_free(wdiExitImpsReqParams);
9154 return VOS_STATUS_E_NOMEM;
9155 }
9156 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9157 wdiExitImpsReqParams->pUserData = pWdaParams;
9158
9159 /* Store param pointer as passed in by caller */
9160 /* store Params pass it to WDI */
9161 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9162 pWdaParams->pWdaContext = pWDA;
9163 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9164 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9165 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9166 pWdaParams);
9167 if (IS_WDI_STATUS_FAILURE(status))
9168 {
9169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9170 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9172 vos_mem_free(pWdaParams);
9173 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 return CONVERT_WDI2VOS_STATUS(status) ;
9176}
Jeff Johnson295189b2012-06-20 16:38:30 -07009177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009178 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 * send Enter BMPS RSP back to PE
9180 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009181void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009182{
9183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309184 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009185 tEnterBmpsParams *pEnterBmpsRspParams;
9186
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009188 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 if(NULL == pWdaParams)
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009192 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 VOS_ASSERT(0) ;
9194 return ;
9195 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009196
9197 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309198 if (NULL == pWDA)
9199 {
9200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9201 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309202
9203 if(pWdaParams->wdaWdiApiMsgParam)
9204 {
9205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9206 }
9207 vos_mem_free(pWdaParams);
9208
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309209 VOS_ASSERT(0);
9210 return ;
9211 }
9212
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009213 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9214
9215 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009216 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009217
9218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309220 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9221 {
9222 pWDA->failureCounts.enterBmpsFailureCount++;
9223 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9224 pWDA->failureCounts.enterBmpsFailureCount)
9225 {
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9227 "%s: wdiStatus %d fail count %d", __func__,
9228 pwdiEnterBmpsRsp->wdiStatus,
9229 pWDA->failureCounts.enterBmpsFailureCount);
9230 pWDA->failureCounts.enterBmpsFailureCount = 0;
9231 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9232 WLAN_LOG_INDICATOR_HOST_DRIVER,
9233 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9234 FALSE, TRUE);
9235 }
9236 }
9237 else
9238 {
9239 pWDA->failureCounts.enterBmpsFailureCount = 0;
9240 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009241 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9242
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 return ;
9244}
Jeff Johnson295189b2012-06-20 16:38:30 -07009245/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009246 * FUNCTION: WDA_EnterBmpsReqCallback
9247 * Free memory and send Enter BMPS RSP back to PE.
9248 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9249 */
9250void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9251{
9252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309253 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009254 tEnterBmpsParams *pEnterBmpsRspParams;
9255
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9257 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9258
9259 if(NULL == pWdaParams)
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9262 "%s: pWdaParams received NULL", __func__);
9263 VOS_ASSERT(0);
9264 return;
9265 }
9266
9267 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309268 if (NULL == pWDA)
9269 {
9270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9271 "%s:pWDA is NULL", __func__);
9272 VOS_ASSERT(0);
9273 return ;
9274 }
9275
Yue Ma7f44bbe2013-04-12 11:47:39 -07009276 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9277 pEnterBmpsRspParams->status = wdiStatus;
9278
9279 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9280 {
9281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9282 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309283 pWDA->failureCounts.enterBmpsFailureCount++;
9284 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9285 pWDA->failureCounts.enterBmpsFailureCount)
9286 {
9287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9288 "%s: wdiStatus %d fail count %d", __func__,
9289 wdiStatus,
9290 pWDA->failureCounts.enterBmpsFailureCount);
9291 pWDA->failureCounts.enterBmpsFailureCount = 0;
9292 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9293 WLAN_LOG_INDICATOR_HOST_DRIVER,
9294 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9295 FALSE, TRUE);
9296 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009297 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9298 }
9299
9300 return;
9301}
9302/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 * FUNCTION: WDA_ProcessEnterBmpsReq
9304 * Request to WDI to Enter BMPS power state.
9305 */
9306VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9307 tEnterBmpsParams *pEnterBmpsReqParams)
9308{
9309 WDI_Status status = WDI_STATUS_SUCCESS;
9310 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9311 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009314 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9315 {
9316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009317 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 VOS_ASSERT(0);
9319 return VOS_STATUS_E_FAILURE;
9320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9322 if (NULL == wdiEnterBmpsReqParams)
9323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009327 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9328 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 return VOS_STATUS_E_NOMEM;
9330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9332 if (NULL == pWdaParams)
9333 {
9334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 VOS_ASSERT(0);
9337 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009338 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9339 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 return VOS_STATUS_E_NOMEM;
9341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9343 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9344 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9345 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009346 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9348 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9349 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009350 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9351 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009352
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 /* Store param pointer as passed in by caller */
9354 /* store Params pass it to WDI */
9355 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009356 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009359 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009360 if (IS_WDI_STATUS_FAILURE(status))
9361 {
9362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9363 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009365 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009367 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 return CONVERT_WDI2VOS_STATUS(status);
9370}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009371
9372
9373static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9374 WDI_Status wdiStatus,
9375 tExitBmpsParams *pExitBmpsReqParams)
9376{
9377 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9378
9379 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9380}
9381
9382
Jeff Johnson295189b2012-06-20 16:38:30 -07009383/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009384 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 * send Exit BMPS RSP back to PE
9386 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009387void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009388{
9389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309390 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009391 tExitBmpsParams *pExitBmpsRspParams;
9392
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009394 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 if(NULL == pWdaParams)
9396 {
9397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009398 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009399 VOS_ASSERT(0) ;
9400 return ;
9401 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009402
9403 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309404 if (NULL == pWDA)
9405 {
9406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9407 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309408
9409 if(pWdaParams->wdaWdiApiMsgParam)
9410 {
9411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9412 }
9413 vos_mem_free(pWdaParams);
9414
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309415 VOS_ASSERT(0);
9416 return ;
9417 }
9418
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009419 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9420
9421 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009422 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009423
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309425 vos_mem_free(pWdaParams);
9426
9427 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9428 {
9429 pWDA->failureCounts.exitBmpsFailureCount++;
9430 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9431 pWDA->failureCounts.exitBmpsFailureCount)
9432 {
9433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9434 "%s: Status %d fail count %d", __func__,
9435 pExitBmpsRspParams->status,
9436 pWDA->failureCounts.exitBmpsFailureCount);
9437 pWDA->failureCounts.exitBmpsFailureCount = 0;
9438 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9439 WLAN_LOG_INDICATOR_HOST_DRIVER,
9440 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9441 FALSE, TRUE);
9442 }
9443 }
9444 else
9445 {
9446 pWDA->failureCounts.exitBmpsFailureCount = 0;
9447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009448
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009449 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009450 return ;
9451}
Jeff Johnson295189b2012-06-20 16:38:30 -07009452/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009453 * FUNCTION: WDA_ExitBmpsReqCallback
9454 * Free memory and send Exit BMPS RSP back to PE.
9455 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9456 */
9457void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9458{
9459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309460 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009461 tExitBmpsParams *pExitBmpsRspParams;
9462
9463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9464 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9465
9466 if(NULL == pWdaParams)
9467 {
9468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9469 "%s: pWdaParams received NULL", __func__);
9470 VOS_ASSERT(0);
9471 return;
9472 }
9473
9474 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309475 if (NULL == pWDA)
9476 {
9477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9478 "%s:pWDA is NULL", __func__);
9479 VOS_ASSERT(0);
9480 return ;
9481 }
9482
Yue Ma7f44bbe2013-04-12 11:47:39 -07009483 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9484 pExitBmpsRspParams->status = wdiStatus;
9485
9486 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9487 {
9488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9489 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309490 pWDA->failureCounts.exitBmpsFailureCount++;
9491 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9492 pWDA->failureCounts.exitBmpsFailureCount)
9493 {
9494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9495 "%s: wdiStatus %d fail count %d", __func__,
9496 wdiStatus,
9497 pWDA->failureCounts.exitBmpsFailureCount);
9498 pWDA->failureCounts.exitBmpsFailureCount = 0;
9499 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9500 WLAN_LOG_INDICATOR_HOST_DRIVER,
9501 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9502 FALSE, TRUE);
9503 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009504 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9505 }
9506
9507 return;
9508}
9509/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 * FUNCTION: WDA_ProcessExitBmpsReq
9511 * Request to WDI to Exit BMPS power state.
9512 */
9513VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9514 tExitBmpsParams *pExitBmpsReqParams)
9515{
9516 WDI_Status status = WDI_STATUS_SUCCESS ;
9517 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9518 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9519 sizeof(WDI_ExitBmpsReqParamsType)) ;
9520 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009522 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 if(NULL == wdiExitBmpsReqParams)
9524 {
9525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009528 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 return VOS_STATUS_E_NOMEM;
9530 }
9531 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9532 if(NULL == pWdaParams)
9533 {
9534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 VOS_ASSERT(0);
9537 vos_mem_free(wdiExitBmpsReqParams);
9538 return VOS_STATUS_E_NOMEM;
9539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009541
9542 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9543
Yue Ma7f44bbe2013-04-12 11:47:39 -07009544 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9545 wdiExitBmpsReqParams->pUserData = pWdaParams;
9546
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 /* Store param pointer as passed in by caller */
9548 /* store Params pass it to WDI */
9549 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9550 pWdaParams->pWdaContext = pWDA;
9551 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009553 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 if(IS_WDI_STATUS_FAILURE(status))
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9557 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9559 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009560 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 return CONVERT_WDI2VOS_STATUS(status) ;
9563}
Jeff Johnson295189b2012-06-20 16:38:30 -07009564/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009565 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 * send Enter UAPSD RSP back to PE
9567 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009568void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009569{
9570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309571 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009572 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 if(NULL == pWdaParams)
9576 {
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009578 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 VOS_ASSERT(0) ;
9580 return ;
9581 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009582
9583 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309584 if (NULL == pWDA)
9585 {
9586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9587 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309588
9589 if(pWdaParams->wdaWdiApiMsgParam)
9590 {
9591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9592 }
9593 vos_mem_free(pWdaParams);
9594
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309595 VOS_ASSERT(0);
9596 return ;
9597 }
9598
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009599 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9600
9601 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009602 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009603
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9605 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009606 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 return ;
9608}
Jeff Johnson295189b2012-06-20 16:38:30 -07009609/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009610 * FUNCTION: WDA_EnterUapsdReqCallback
9611 * Free memory and send Enter UAPSD RSP back to PE.
9612 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9613 */
9614void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9615{
9616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9617 tWDA_CbContext *pWDA;
9618 tUapsdParams *pEnterUapsdRsqParams;
9619
9620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9621 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9622
9623 if(NULL == pWdaParams)
9624 {
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9626 "%s: pWdaParams received NULL", __func__);
9627 VOS_ASSERT(0);
9628 return;
9629 }
9630
9631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309632 if (NULL == pWDA)
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9635 "%s:pWDA is NULL", __func__);
9636 VOS_ASSERT(0);
9637 return ;
9638 }
9639
Yue Ma7f44bbe2013-04-12 11:47:39 -07009640 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9641 pEnterUapsdRsqParams->status = wdiStatus;
9642
9643 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9644 {
9645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9646 vos_mem_free(pWdaParams);
9647 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9648 }
9649
9650 return;
9651}
9652/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 * FUNCTION: WDA_ProcessEnterUapsdReq
9654 * Request to WDI to Enter UAPSD power state.
9655 */
9656VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9657 tUapsdParams *pEnterUapsdReqParams)
9658{
9659 WDI_Status status = WDI_STATUS_SUCCESS ;
9660 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9661 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9662 sizeof(WDI_EnterUapsdReqParamsType)) ;
9663 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009665 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 if(NULL == wdiEnterUapsdReqParams)
9667 {
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 VOS_ASSERT(0);
9671 return VOS_STATUS_E_NOMEM;
9672 }
9673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9674 if(NULL == pWdaParams)
9675 {
9676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 VOS_ASSERT(0);
9679 vos_mem_free(wdiEnterUapsdReqParams);
9680 return VOS_STATUS_E_NOMEM;
9681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9683 pEnterUapsdReqParams->beDeliveryEnabled;
9684 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9685 pEnterUapsdReqParams->beTriggerEnabled;
9686 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9687 pEnterUapsdReqParams->bkDeliveryEnabled;
9688 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9689 pEnterUapsdReqParams->bkTriggerEnabled;
9690 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9691 pEnterUapsdReqParams->viDeliveryEnabled;
9692 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9693 pEnterUapsdReqParams->viTriggerEnabled;
9694 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9695 pEnterUapsdReqParams->voDeliveryEnabled;
9696 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9697 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009698 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009699
Yue Ma7f44bbe2013-04-12 11:47:39 -07009700 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9701 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009702
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 /* Store param pointer as passed in by caller */
9704 /* store Params pass it to WDI */
9705 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9706 pWdaParams->pWdaContext = pWDA;
9707 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009708 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009709 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009710 if(IS_WDI_STATUS_FAILURE(status))
9711 {
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9713 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9714 vos_mem_free(pWdaParams->wdaMsgParam) ;
9715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9716 vos_mem_free(pWdaParams) ;
9717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 return CONVERT_WDI2VOS_STATUS(status) ;
9719}
Jeff Johnson295189b2012-06-20 16:38:30 -07009720/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009721 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 * send Exit UAPSD RSP back to PE
9723 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009724void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009725{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009726
9727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9728 tWDA_CbContext *pWDA;
9729 tExitUapsdParams *pExitUapsdRspParams;
9730
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009732 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009733 if(NULL == pWdaParams)
9734 {
9735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009736 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009737 VOS_ASSERT(0);
9738 return;
9739 }
9740
9741 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9742 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9743
9744 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009745 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009746
9747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9748 vos_mem_free(pWdaParams) ;
9749
9750 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 return ;
9752}
Jeff Johnson295189b2012-06-20 16:38:30 -07009753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009754 * FUNCTION: WDA_ExitUapsdReqCallback
9755 * Free memory and send Exit UAPSD RSP back to PE.
9756 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9757 */
9758void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9759{
9760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309761 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009762 tExitUapsdParams *pExitUapsdRspParams;
9763
9764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9766
9767 if(NULL == pWdaParams)
9768 {
9769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9770 "%s: pWdaParams received NULL", __func__);
9771 VOS_ASSERT(0);
9772 return;
9773 }
9774
9775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309776 if (NULL == pWDA)
9777 {
9778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9779 "%s:pWDA is NULL", __func__);
9780 VOS_ASSERT(0);
9781 return ;
9782 }
9783
Yue Ma7f44bbe2013-04-12 11:47:39 -07009784 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9785 pExitUapsdRspParams->status = wdiStatus;
9786
9787 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9788 {
9789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9790 vos_mem_free(pWdaParams);
9791 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9792 }
9793
9794 return;
9795}
9796/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009797 * FUNCTION: WDA_ProcessExitUapsdReq
9798 * Request to WDI to Exit UAPSD power state.
9799 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009800VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9801 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009802{
9803 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009804 tWDA_ReqParams *pWdaParams ;
9805 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9806 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9807 sizeof(WDI_ExitUapsdReqParamsType)) ;
9808
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009810 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009811
9812 if(NULL == wdiExitUapsdReqParams)
9813 {
9814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816 VOS_ASSERT(0);
9817 return VOS_STATUS_E_NOMEM;
9818 }
9819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9820 if(NULL == pWdaParams)
9821 {
9822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009823 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009824 VOS_ASSERT(0);
9825 vos_mem_free(wdiExitUapsdReqParams);
9826 return VOS_STATUS_E_NOMEM;
9827 }
9828
9829 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009830 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9831 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009832
9833 /* Store param pointer as passed in by caller */
9834 /* store Params pass it to WDI */
9835 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9836 pWdaParams->pWdaContext = pWDA;
9837 pWdaParams->wdaMsgParam = pExitUapsdParams;
9838
Yue Ma7f44bbe2013-04-12 11:47:39 -07009839 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 if(IS_WDI_STATUS_FAILURE(status))
9841 {
9842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9843 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009844 vos_mem_free(pWdaParams->wdaMsgParam) ;
9845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9846 vos_mem_free(pWdaParams) ;
9847
Jeff Johnson295189b2012-06-20 16:38:30 -07009848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 return CONVERT_WDI2VOS_STATUS(status) ;
9850}
9851
Jeff Johnson295189b2012-06-20 16:38:30 -07009852/*
9853 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9854 *
9855 */
9856void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9857{
9858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 if(NULL == pWdaParams)
9862 {
9863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 VOS_ASSERT(0) ;
9866 return ;
9867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 if( pWdaParams != NULL )
9869 {
9870 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9871 {
9872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9873 }
9874 if( pWdaParams->wdaMsgParam != NULL )
9875 {
9876 vos_mem_free(pWdaParams->wdaMsgParam) ;
9877 }
9878 vos_mem_free(pWdaParams) ;
9879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 return ;
9881}
Jeff Johnson295189b2012-06-20 16:38:30 -07009882/*
9883 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9884 * Request to WDI to set the power save params at start.
9885 */
9886VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9887 tSirPowerSaveCfg *pPowerSaveCfg)
9888{
9889 WDI_Status status = WDI_STATUS_SUCCESS ;
9890 tHalCfg *tlvStruct = NULL ;
9891 tANI_U8 *tlvStructStart = NULL ;
9892 v_PVOID_t *configParam;
9893 tANI_U32 configParamSize;
9894 tANI_U32 *configDataValue;
9895 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9896 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9900 {
9901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009902 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009903 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009904 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 return VOS_STATUS_E_FAILURE;
9906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9908 if (NULL == wdiPowerSaveCfg)
9909 {
9910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009913 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 return VOS_STATUS_E_NOMEM;
9915 }
9916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9917 if(NULL == pWdaParams)
9918 {
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 VOS_ASSERT(0);
9922 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009923 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 return VOS_STATUS_E_NOMEM;
9925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9927 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 if(NULL == configParam)
9929 {
9930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009931 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009932 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 vos_mem_free(pWdaParams);
9934 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009935 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 return VOS_STATUS_E_NOMEM;
9937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 vos_mem_set(configParam, configParamSize, 0);
9939 wdiPowerSaveCfg->pConfigBuffer = configParam;
9940 tlvStruct = (tHalCfg *)configParam;
9941 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9943 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9944 tlvStruct->length = sizeof(tANI_U32);
9945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9946 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9948 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9950 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9951 tlvStruct->length = sizeof(tANI_U32);
9952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9953 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9955 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9957 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9958 tlvStruct->length = sizeof(tANI_U32);
9959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9960 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9962 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9964 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9965 tlvStruct->length = sizeof(tANI_U32);
9966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9967 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9969 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9971 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9972 tlvStruct->length = sizeof(tANI_U32);
9973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9974 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9976 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9978 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9979 tlvStruct->length = sizeof(tANI_U32);
9980 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9981 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9983 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9985 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9986 tlvStruct->length = sizeof(tANI_U32);
9987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9988 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9990 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9992 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9993 tlvStruct->length = sizeof(tANI_U32);
9994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9995 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9996 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9997 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9999 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10000 tlvStruct->length = sizeof(tANI_U32);
10001 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10002 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10003 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10004 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10006 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10007 tlvStruct->length = sizeof(tANI_U32);
10008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10009 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10011 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10013 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10014 tlvStruct->length = sizeof(tANI_U32);
10015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10016 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10018 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 /* store Params pass it to WDI */
10022 pWdaParams->wdaMsgParam = configParam;
10023 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10024 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10026 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 if(IS_WDI_STATUS_FAILURE(status))
10028 {
10029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10030 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10031 vos_mem_free(pWdaParams->wdaMsgParam);
10032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10033 vos_mem_free(pWdaParams);
10034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 return CONVERT_WDI2VOS_STATUS(status);
10037}
Jeff Johnson295189b2012-06-20 16:38:30 -070010038/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010039 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 *
10041 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010042void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010043{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10045
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010047 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010048
10049 if(NULL == pWdaParams)
10050 {
10051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10052 "%s: pWdaParams received NULL", __func__);
10053 VOS_ASSERT(0);
10054 return ;
10055 }
10056
10057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 vos_mem_free(pWdaParams);
10059
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 return ;
10061}
Jeff Johnson295189b2012-06-20 16:38:30 -070010062/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010063 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10064 * Free memory.
10065 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10066 */
10067void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10068{
10069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10070
10071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10072 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10073
10074 if(NULL == pWdaParams)
10075 {
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10077 "%s: pWdaParams received NULL", __func__);
10078 VOS_ASSERT(0);
10079 return;
10080 }
10081
10082 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10083 {
10084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10085 vos_mem_free(pWdaParams);
10086 }
10087
10088 return;
10089}
10090/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 * FUNCTION: WDA_SetUapsdAcParamsReq
10092 * Request to WDI to set the UAPSD params for an ac (sta mode).
10093 */
10094VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10095 tUapsdInfo *pUapsdInfo)
10096{
10097 WDI_Status status = WDI_STATUS_SUCCESS;
10098 tWDA_CbContext *pWDA = NULL ;
10099 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10100 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10101 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10102 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 if(NULL == wdiUapsdParams)
10106 {
10107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 VOS_ASSERT(0);
10110 return VOS_STATUS_E_NOMEM;
10111 }
10112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10113 if(NULL == pWdaParams)
10114 {
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 VOS_ASSERT(0);
10118 vos_mem_free(wdiUapsdParams);
10119 return VOS_STATUS_E_NOMEM;
10120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10122 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10123 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10124 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10125 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10126 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010127 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10128 wdiUapsdParams->pUserData = pWdaParams;
10129
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 pWdaParams->pWdaContext = pWDA;
10132 /* Store param pointer as passed in by caller */
10133 pWdaParams->wdaMsgParam = pUapsdInfo;
10134 /* store Params pass it to WDI */
10135 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010137 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010138 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 if(IS_WDI_STATUS_FAILURE(status))
10140 {
10141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10142 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10144 vos_mem_free(pWdaParams);
10145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10147 return VOS_STATUS_SUCCESS;
10148 else
10149 return VOS_STATUS_E_FAILURE;
10150
Jeff Johnson295189b2012-06-20 16:38:30 -070010151}
10152/*
10153 * FUNCTION: WDA_ClearUapsdAcParamsReq
10154 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10155 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10156 * and again enter the UPASD with the modified params. Hence the disable
10157 * function was kept empty.
10158 *
10159 */
10160VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10161{
10162 /* do nothing */
10163 return VOS_STATUS_SUCCESS;
10164}
Jeff Johnson295189b2012-06-20 16:38:30 -070010165/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010166 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 *
10168 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010169void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010170{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10172
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010174 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010175
10176 if(NULL == pWdaParams)
10177 {
10178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010179 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010180 VOS_ASSERT(0) ;
10181 return ;
10182 }
10183
10184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10185 vos_mem_free(pWdaParams->wdaMsgParam);
10186 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010187
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 //print a msg, nothing else to do
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010190 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 return ;
10192}
Jeff Johnson295189b2012-06-20 16:38:30 -070010193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010194 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10195 * Free memory.
10196 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10197 */
10198void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10199{
10200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10201
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10203 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10204
10205 if(NULL == pWdaParams)
10206 {
10207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10208 "%s: pWdaParams received NULL", __func__);
10209 VOS_ASSERT(0);
10210 return;
10211 }
10212
10213 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10214 {
10215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10216 vos_mem_free(pWdaParams->wdaMsgParam);
10217 vos_mem_free(pWdaParams);
10218 }
10219
10220 return;
10221}
10222/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 * FUNCTION: WDA_UpdateUapsdParamsReq
10224 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10225 */
10226VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10227 tUpdateUapsdParams* pUpdateUapsdInfo)
10228{
10229 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010230 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10232 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10233 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010234 tWDA_ReqParams *pWdaParams = NULL;
10235
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 if(NULL == wdiUpdateUapsdParams)
10239 {
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 VOS_ASSERT(0);
10243 return VOS_STATUS_E_NOMEM;
10244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10246 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10247 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010248 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10249 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010250
10251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10252 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 {
10254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010257 vos_mem_free(pUpdateUapsdInfo);
10258 vos_mem_free(wdiUpdateUapsdParams);
10259 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010262 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010264 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10265 pWdaParams->pWdaContext = pWDA;
10266
Jeff Johnson43971f52012-07-17 12:26:56 -070010267 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010268 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010269 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270
Jeff Johnson43971f52012-07-17 12:26:56 -070010271 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 {
10273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10274 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010275 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10277 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010278 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010280 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010281}
Jeff Johnson295189b2012-06-20 16:38:30 -070010282/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010283 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 *
10285 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010286void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010287{
10288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 if(WDI_STATUS_SUCCESS != wdiStatus)
10292 {
10293 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010294 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 if(NULL == pWdaParams)
10297 {
10298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010299 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 VOS_ASSERT(0) ;
10301 return ;
10302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10304 vos_mem_free(pWdaParams->wdaMsgParam);
10305 vos_mem_free(pWdaParams);
10306 return ;
10307}
Jeff Johnson295189b2012-06-20 16:38:30 -070010308/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010309 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10310 * Free memory.
10311 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10312 */
10313void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10314{
10315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10316
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10318 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10319
10320 if(NULL == pWdaParams)
10321 {
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10323 "%s: pWdaParams received NULL", __func__);
10324 VOS_ASSERT(0);
10325 return;
10326 }
10327
10328 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10329 {
10330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10331 vos_mem_free(pWdaParams->wdaMsgParam);
10332 vos_mem_free(pWdaParams);
10333 }
10334
10335 return;
10336}
10337/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10339 *
10340 */
10341VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10342 tSirWlanSetRxpFilters *pWlanSuspendParam)
10343{
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010345 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010346 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010348 /* Sanity Check
10349 * This is very unlikely and add assert to collect more info next time */
10350 if(NULL == pWlanSuspendParam)
10351 {
10352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10353 "%s: pWlanSuspendParam received NULL", __func__);
10354 VOS_ASSERT(0) ;
10355 return VOS_STATUS_E_FAULT;
10356 }
10357 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10358 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 if(NULL == wdiRxpFilterParams)
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 VOS_ASSERT(0);
10366 vos_mem_free(pWlanSuspendParam);
10367 return VOS_STATUS_E_NOMEM;
10368 }
10369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10370 if(NULL == pWdaParams)
10371 {
10372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 VOS_ASSERT(0);
10375 vos_mem_free(wdiRxpFilterParams);
10376 vos_mem_free(pWlanSuspendParam);
10377 return VOS_STATUS_E_NOMEM;
10378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10380 pWlanSuspendParam->setMcstBcstFilter;
10381 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10382 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10383
Yue Ma7f44bbe2013-04-12 11:47:39 -070010384 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10385 wdiRxpFilterParams->pUserData = pWdaParams;
10386
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 pWdaParams->pWdaContext = pWDA;
10388 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10389 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010390 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010391 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010393 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 {
10395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10396 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010397 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10399 vos_mem_free(pWdaParams->wdaMsgParam);
10400 vos_mem_free(pWdaParams);
10401 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010402 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010403}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010404
10405/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010406 * FUNCTION: WDA_ProcessGetFrameLogReq
10407 * Request to WDI to get the Frame Log.
10408 */
10409VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10410 tAniGetFrameLogReq *pGetFrameLog)
10411{
10412 VOS_STATUS status = VOS_STATUS_SUCCESS;
10413 WDI_Status wstatus;
10414 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10415 tWDA_ReqParams *pWdaParams ;
10416
10417 /* Sanity Check*/
10418 if(NULL == pGetFrameLog)
10419 {
10420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010421 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010422 VOS_ASSERT(0) ;
10423 return VOS_STATUS_E_FAULT;
10424 }
10425
10426 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10427 sizeof(WDI_GetFrameLogReqInfoType));
10428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10429 "------> %s " ,__func__);
10430
10431 if(NULL == wdiGetFrameLogInfo)
10432 {
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10434 "%s: VOS MEM Alloc Failure", __func__);
10435 VOS_ASSERT(0);
10436 vos_mem_free(pGetFrameLog);
10437 return VOS_STATUS_E_NOMEM;
10438 }
10439
10440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10441 if(NULL == pWdaParams)
10442 {
10443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10444 "%s: VOS MEM Alloc Failure", __func__);
10445 VOS_ASSERT(0);
10446 vos_mem_free(wdiGetFrameLogInfo);
10447 vos_mem_free(pGetFrameLog);
10448 return VOS_STATUS_E_NOMEM;
10449 }
10450
10451 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10452
10453 pWdaParams->pWdaContext = pWDA;
10454 pWdaParams->wdaMsgParam = pGetFrameLog;
10455 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10456
10457 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10458 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10459 pWdaParams);
10460 if(IS_WDI_STATUS_FAILURE(wstatus))
10461 {
10462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10463 "Failure in get frame log REQ WDI API, free all the memory" );
10464 status = CONVERT_WDI2VOS_STATUS(wstatus);
10465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10466 vos_mem_free(pWdaParams->wdaMsgParam);
10467 vos_mem_free(pWdaParams);
10468 }
10469 return status;
10470}
10471
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010472
10473/*
10474 * FUNCTION: WDA_FatalEventLogsRspCallback
10475 * recieves Flush Logs response from FW
10476 */
10477
10478void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10479 void* pUserData)
10480{
10481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10482
10483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10484 "<------ %s,wdiStatus:%d " ,
10485 __func__, wdiRsp->wdiStatus);
10486 if(NULL == pWdaParams)
10487 {
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10489 "%s: pWdaParams received NULL", __func__);
10490 VOS_ASSERT(0);
10491 return ;
10492 }
10493
10494 if(NULL == pWdaParams->wdaMsgParam)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10497 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10498 VOS_ASSERT(0);
10499 vos_mem_free(pWdaParams);
10500 return ;
10501 }
10502
10503 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10504 {
10505 /*
10506 * If it is failure, it means JOb is already posted by FW
10507 * for logging, so for failure scenario also we will get the
10508 * done indication
10509 */
10510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10511 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10512 __func__, wdiRsp->wdiStatus);
10513 }
10514
10515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10516 vos_mem_free(pWdaParams->wdaMsgParam);
10517 vos_mem_free(pWdaParams);
10518
10519 return;
10520
10521}
10522
10523/*
10524 * FUNCTION: WDA_ProcessFatalEventLogsReq
10525 * Request to WDI to send the fatal Event Logs Req.
10526 */
10527
10528VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10529 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10530{
10531 VOS_STATUS status = VOS_STATUS_SUCCESS;
10532 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10533 tWDA_ReqParams *pWdaParams ;
10534 WDI_Status wstatus;
10535
10536
10537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10538 "------> %s " ,__func__);
10539 if (NULL == pFatalEventLogsReqParam)
10540 {
10541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10542 "%s: pMgmtLoggingInitParam received NULL", __func__);
10543 VOS_ASSERT(0) ;
10544 return VOS_STATUS_E_FAULT;
10545 }
10546 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10547 sizeof(WDI_FatalEventLogsReqInfoType));
10548 if(NULL == wdiFatalEventLogsReqInfo)
10549 {
10550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10551 "%s: VOS MEM Alloc Failure", __func__);
10552 VOS_ASSERT(0);
10553 vos_mem_free(pFatalEventLogsReqParam);
10554 return VOS_STATUS_E_NOMEM;
10555 }
10556 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10557 if(NULL == pWdaParams)
10558 {
10559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10560 "%s: VOS MEM Alloc Failure", __func__);
10561 VOS_ASSERT(0);
10562 vos_mem_free(wdiFatalEventLogsReqInfo);
10563 vos_mem_free(pFatalEventLogsReqParam);
10564 return VOS_STATUS_E_NOMEM;
10565 }
10566 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10567 pWdaParams->pWdaContext = pWDA;
10568 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10569 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10570
10571 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10572 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10573 pWdaParams);
10574 if(IS_WDI_STATUS_FAILURE(wstatus))
10575 {
10576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10577 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10578 status = CONVERT_WDI2VOS_STATUS(wstatus);
10579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10580 vos_mem_free(pWdaParams->wdaMsgParam);
10581 vos_mem_free(pWdaParams);
10582 }
10583
10584 return status;
10585
10586}
10587
Siddharth Bhal64246172015-02-27 01:04:37 +053010588/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010589 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010590 *
10591 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010592VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10593 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010594{
10595 VOS_STATUS status = VOS_STATUS_SUCCESS;
10596 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010597 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010598 tWDA_ReqParams *pWdaParams ;
10599
10600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10601 "------> %s " ,__func__);
10602
10603 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010604 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010607 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010608 VOS_ASSERT(0) ;
10609 return VOS_STATUS_E_FAULT;
10610 }
10611
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010612 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10613 sizeof(WDI_FWLoggingInitReqInfoType));
10614 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010615 {
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10617 "%s: VOS MEM Alloc Failure", __func__);
10618 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010619 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010620 return VOS_STATUS_E_NOMEM;
10621 }
10622
10623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10624 if(NULL == pWdaParams)
10625 {
10626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10627 "%s: VOS MEM Alloc Failure", __func__);
10628 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010629 vos_mem_free(wdiFWLoggingInitInfo);
10630 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010631 return VOS_STATUS_E_NOMEM;
10632 }
10633
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010634 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10635 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10636 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10637 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10638 wdiFWLoggingInitInfo->continuousFrameLogging =
10639 pFWLoggingInitParam->continuousFrameLogging;
10640 wdiFWLoggingInitInfo->minLogBufferSize=
10641 pFWLoggingInitParam->minLogBufferSize;
10642 wdiFWLoggingInitInfo->maxLogBufferSize=
10643 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010644
10645 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010646 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010648
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010649 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10650 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010651 pWdaParams);
10652 if(IS_WDI_STATUS_FAILURE(wstatus))
10653 {
10654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10655 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10656 status = CONVERT_WDI2VOS_STATUS(wstatus);
10657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10658 vos_mem_free(pWdaParams->wdaMsgParam);
10659 vos_mem_free(pWdaParams);
10660 }
10661
10662 return status;
10663}
10664
Jeff Johnson295189b2012-06-20 16:38:30 -070010665/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010666 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10667 *
10668 */
10669VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10670 tSirRssiMonitorReq *pRssiMonitorReqParam)
10671{
10672 VOS_STATUS status = VOS_STATUS_SUCCESS;
10673 WDI_Status wstatus;
10674 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10675 tWDA_ReqParams *pWdaParams ;
10676
10677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10678 "------> %s " ,__func__);
10679
10680 /* Sanity Check*/
10681 if(NULL == pRssiMonitorReqParam)
10682 {
10683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10684 "%s: pRssiMonitorReqParam received NULL", __func__);
10685 VOS_ASSERT(0) ;
10686 return VOS_STATUS_E_FAULT;
10687 }
10688
10689 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10690 sizeof(WDI_RssiMonitorReqInfoType));
10691 if(NULL == wdiRssiMonitorInfo)
10692 {
10693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10694 "%s: VOS MEM Alloc Failure", __func__);
10695 VOS_ASSERT(0);
10696 vos_mem_free(pRssiMonitorReqParam);
10697 return VOS_STATUS_E_NOMEM;
10698 }
10699
10700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10701 if(NULL == pWdaParams)
10702 {
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10704 "%s: VOS MEM Alloc Failure", __func__);
10705 VOS_ASSERT(0);
10706 vos_mem_free(wdiRssiMonitorInfo);
10707 vos_mem_free(pRssiMonitorReqParam);
10708 return VOS_STATUS_E_NOMEM;
10709 }
10710
10711 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10712 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10713 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10714 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10715 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10716
10717 pWdaParams->pWdaContext = pWDA;
10718 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10719 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10720
10721 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10722 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10723 pWdaParams);
10724 if(IS_WDI_STATUS_FAILURE(wstatus))
10725 {
10726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10727 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10728 status = CONVERT_WDI2VOS_STATUS(wstatus);
10729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10730 vos_mem_free(pWdaParams->wdaMsgParam);
10731 vos_mem_free(pWdaParams);
10732 }
10733
10734 return status;
10735}
10736
10737/*
10738 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10739 *
10740 */
10741VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10742 tSirRssiMonitorReq *pRssiMonitorReqParam)
10743{
10744 VOS_STATUS status = VOS_STATUS_SUCCESS;
10745 WDI_Status wstatus;
10746 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10747 tWDA_ReqParams *pWdaParams ;
10748
10749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10750 "------> %s " ,__func__);
10751
10752 /* Sanity Check*/
10753 if(NULL == pRssiMonitorReqParam)
10754 {
10755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10756 "%s: pRssiMonitorReqParam received NULL", __func__);
10757 VOS_ASSERT(0) ;
10758 return VOS_STATUS_E_FAULT;
10759 }
10760
10761 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10762 sizeof(WDI_RssiMonitorReqInfoType));
10763 if(NULL == wdiRssiMonitorInfo)
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10766 "%s: VOS MEM Alloc Failure", __func__);
10767 VOS_ASSERT(0);
10768 vos_mem_free(pRssiMonitorReqParam);
10769 return VOS_STATUS_E_NOMEM;
10770 }
10771
10772 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10773 if(NULL == pWdaParams)
10774 {
10775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10776 "%s: VOS MEM Alloc Failure", __func__);
10777 VOS_ASSERT(0);
10778 vos_mem_free(wdiRssiMonitorInfo);
10779 vos_mem_free(pRssiMonitorReqParam);
10780 return VOS_STATUS_E_NOMEM;
10781 }
10782
10783 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10784 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10785 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10786
10787 pWdaParams->pWdaContext = pWDA;
10788 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10789 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10790
10791 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10792 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10793 pWdaParams);
10794 if(IS_WDI_STATUS_FAILURE(wstatus))
10795 {
10796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10797 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10798 status = CONVERT_WDI2VOS_STATUS(wstatus);
10799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10800 vos_mem_free(pWdaParams->wdaMsgParam);
10801 vos_mem_free(pWdaParams);
10802 }
10803
10804 return status;
10805}
10806
10807
10808/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 * FUNCTION: WDA_WdiIndicationCallback
10810 *
10811 */
10812void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10813 void* pUserData)
10814{
10815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010816 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010817}
Jeff Johnson295189b2012-06-20 16:38:30 -070010818/*
10819 * FUNCTION: WDA_ProcessWlanSuspendInd
10820 *
10821 */
10822VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10823 tSirWlanSuspendParam *pWlanSuspendParam)
10824{
10825 WDI_Status wdiStatus;
10826 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010828 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10830 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10831 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10832 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10835 if(WDI_STATUS_PENDING == wdiStatus)
10836 {
10837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010838 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 }
10840 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10841 {
10842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 vos_mem_free(pWlanSuspendParam);
10846 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10847}
10848
Chet Lanctot186b5732013-03-18 10:26:30 -070010849#ifdef WLAN_FEATURE_11W
10850/*
10851 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10852 *
10853 */
10854VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10855 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10856{
10857 WDI_Status wdiStatus;
10858 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10860 "------> %s ", __func__);
10861
10862 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10863 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10864 sizeof(tSirMacAddr));
10865
10866 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10867 wdiExclUnencryptParams.pUserData = pWDA;
10868
10869 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10870 if(WDI_STATUS_PENDING == wdiStatus)
10871 {
10872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10873 "Pending received for %s:%d ", __func__, __LINE__ );
10874 }
10875 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10878 "Failure in %s:%d ", __func__, __LINE__ );
10879 }
10880 vos_mem_free(pExclUnencryptParam);
10881 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10882}
10883#endif
10884
Jeff Johnson295189b2012-06-20 16:38:30 -070010885/*
10886 * FUNCTION: WDA_ProcessWlanResumeCallback
10887 *
10888 */
10889void WDA_ProcessWlanResumeCallback(
10890 WDI_SuspendResumeRspParamsType *resumeRspParams,
10891 void* pUserData)
10892{
10893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010896 if(NULL == pWdaParams)
10897 {
10898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 VOS_ASSERT(0) ;
10901 return ;
10902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10904 {
10905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010906 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10909 vos_mem_free(pWdaParams->wdaMsgParam);
10910 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 return ;
10912}
Jeff Johnson295189b2012-06-20 16:38:30 -070010913/*
10914 * FUNCTION: WDA_ProcessWlanResumeReq
10915 *
10916 */
10917VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10918 tSirWlanResumeParam *pWlanResumeParam)
10919{
10920 WDI_Status wdiStatus;
10921 WDI_ResumeParamsType *wdiResumeParams =
10922 (WDI_ResumeParamsType *)vos_mem_malloc(
10923 sizeof(WDI_ResumeParamsType) ) ;
10924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 if(NULL == wdiResumeParams)
10928 {
10929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010931 VOS_ASSERT(0);
10932 return VOS_STATUS_E_NOMEM;
10933 }
10934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10935 if(NULL == pWdaParams)
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 VOS_ASSERT(0);
10940 vos_mem_free(wdiResumeParams);
10941 return VOS_STATUS_E_NOMEM;
10942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10944 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 wdiResumeParams->wdiReqStatusCB = NULL;
10947 pWdaParams->wdaMsgParam = pWlanResumeParam;
10948 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10949 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010950 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10951 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10952 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10954 {
10955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10956 "Failure in Host Resume REQ WDI API, free all the memory " );
10957 VOS_ASSERT(0);
10958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10959 vos_mem_free(pWdaParams->wdaMsgParam);
10960 vos_mem_free(pWdaParams);
10961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10963}
10964
Jeff Johnson295189b2012-06-20 16:38:30 -070010965/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010966 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 *
10968 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010969void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010970{
10971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010973 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 if(NULL == pWdaParams)
10975 {
10976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010977 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 VOS_ASSERT(0) ;
10979 return ;
10980 }
10981
10982 vos_mem_free(pWdaParams->wdaMsgParam) ;
10983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10984 vos_mem_free(pWdaParams) ;
10985 /*
10986 * No respone required for SetBeaconFilter req so just free the request
10987 * param here
10988 */
10989
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 return ;
10991}
Jeff Johnson295189b2012-06-20 16:38:30 -070010992/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010993 * FUNCTION: WDA_SetBeaconFilterReqCallback
10994 * Free memory.
10995 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10996 */
10997void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10998{
10999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11000
11001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11002 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11003
11004 if(NULL == pWdaParams)
11005 {
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11007 "%s: pWdaParams received NULL", __func__);
11008 VOS_ASSERT(0);
11009 return;
11010 }
11011
11012 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11013 {
11014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11015 vos_mem_free(pWdaParams->wdaMsgParam);
11016 vos_mem_free(pWdaParams);
11017 }
11018
11019 return;
11020}
11021/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 * FUNCTION: WDA_SetBeaconFilterReq
11023 * Request to WDI to send the beacon filtering related information.
11024 */
11025VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11026 tBeaconFilterMsg* pBeaconFilterInfo)
11027{
11028 WDI_Status status = WDI_STATUS_SUCCESS;
11029 tANI_U8 *dstPtr, *srcPtr;
11030 tANI_U8 filterLength;
11031 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11032 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11033 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11034 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011036 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 if(NULL == wdiBeaconFilterInfo)
11038 {
11039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 VOS_ASSERT(0);
11042 return VOS_STATUS_E_NOMEM;
11043 }
11044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11045 if(NULL == pWdaParams)
11046 {
11047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 VOS_ASSERT(0);
11050 vos_mem_free(wdiBeaconFilterInfo);
11051 return VOS_STATUS_E_NOMEM;
11052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11054 pBeaconFilterInfo->beaconInterval;
11055 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11056 pBeaconFilterInfo->capabilityInfo;
11057 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11058 pBeaconFilterInfo->capabilityMask;
11059 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011060
11061 //Fill the BssIdx
11062 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11063
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 //Fill structure with info contained in the beaconFilterTable
11065 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11066 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11067 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11068 if(WDI_BEACON_FILTER_LEN < filterLength)
11069 {
11070 filterLength = WDI_BEACON_FILTER_LEN;
11071 }
11072 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011073 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11074 wdiBeaconFilterInfo->pUserData = pWdaParams;
11075
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 /* Store param pointer as passed in by caller */
11077 /* store Params pass it to WDI */
11078 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11079 pWdaParams->pWdaContext = pWDA;
11080 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11081
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011083 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 if(IS_WDI_STATUS_FAILURE(status))
11085 {
11086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11087 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11088 vos_mem_free(pWdaParams->wdaMsgParam) ;
11089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11090 vos_mem_free(pWdaParams) ;
11091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 return CONVERT_WDI2VOS_STATUS(status) ;
11093}
Jeff Johnson295189b2012-06-20 16:38:30 -070011094/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011095 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 *
11097 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011098void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011099{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11101
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011103 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011104
11105 if(NULL == pWdaParams)
11106 {
11107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011109 VOS_ASSERT(0) ;
11110 return ;
11111 }
11112
11113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11114 vos_mem_free(pWdaParams->wdaMsgParam);
11115 vos_mem_free(pWdaParams);
11116
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 //print a msg, nothing else to do
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011119 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 return ;
11121}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011122/*
11123 * FUNCTION: WDA_RemBeaconFilterReqCallback
11124 * Free memory.
11125 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11126 */
11127void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11128{
11129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11130
11131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11132 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11133
11134 if(NULL == pWdaParams)
11135 {
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11137 "%s: pWdaParams received NULL", __func__);
11138 VOS_ASSERT(0);
11139 return;
11140 }
11141
11142 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11143 {
11144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11145 vos_mem_free(pWdaParams->wdaMsgParam);
11146 vos_mem_free(pWdaParams);
11147 }
11148
11149 return;
11150}
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 // TODO: PE does not have this feature for now implemented,
11152 // but the support for removing beacon filter exists between
11153 // HAL and FW. This function can be called whenever PE defines
11154 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011155/*
11156 * FUNCTION: WDA_RemBeaconFilterReq
11157 * Request to WDI to send the removal of beacon filtering related information.
11158 */
11159VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11160 tRemBeaconFilterMsg* pBeaconFilterInfo)
11161{
11162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011163 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11165 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11166 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011167 tWDA_ReqParams *pWdaParams ;
11168
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011170 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 if(NULL == wdiBeaconFilterInfo)
11172 {
11173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 VOS_ASSERT(0);
11176 return VOS_STATUS_E_NOMEM;
11177 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011178 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11179 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 {
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011184 vos_mem_free(wdiBeaconFilterInfo);
11185 vos_mem_free(pBeaconFilterInfo);
11186 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011188
11189 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11190 pBeaconFilterInfo->ucIeCount;
11191 //Fill structure with info contained in the ucRemIeId
11192 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11193 pBeaconFilterInfo->ucRemIeId,
11194 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11195 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11196 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011197
11198 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011199 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011201 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11202
11203 pWdaParams->pWdaContext = pWDA;
11204
Jeff Johnson43971f52012-07-17 12:26:56 -070011205 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011206 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011207 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 {
11209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11210 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011211 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11213 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011214 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011216 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011217}
Jeff Johnson295189b2012-06-20 16:38:30 -070011218/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011219 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 *
11221 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011222void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011223{
11224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011226 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 if(NULL == pWdaParams)
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 VOS_ASSERT(0) ;
11232 return ;
11233 }
11234
11235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11236 vos_mem_free(pWdaParams) ;
11237
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 return ;
11239}
Jeff Johnson295189b2012-06-20 16:38:30 -070011240/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011241 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11242 * Free memory.
11243 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11244 */
11245void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11246{
11247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11248
11249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11250 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11251
11252 if(NULL == pWdaParams)
11253 {
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "%s: pWdaParams received NULL", __func__);
11256 VOS_ASSERT(0);
11257 return;
11258 }
11259
11260 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11261 {
11262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11263 vos_mem_free(pWdaParams);
11264 }
11265
11266 return;
11267}
11268/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011269 * FUNCTION: WDA_SetRSSIThresholdsReq
11270 * Request to WDI to set the RSSI thresholds (sta mode).
11271 */
11272VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11273{
11274 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011275 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 tWDA_CbContext *pWDA = NULL ;
11277 v_PVOID_t pVosContext = NULL;
11278 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11279 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11280 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11281 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011284 if(NULL == wdiRSSIThresholdsInfo)
11285 {
11286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 VOS_ASSERT(0);
11289 return VOS_STATUS_E_NOMEM;
11290 }
11291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11292 if(NULL == pWdaParams)
11293 {
11294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 VOS_ASSERT(0);
11297 vos_mem_free(wdiRSSIThresholdsInfo);
11298 return VOS_STATUS_E_NOMEM;
11299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11302 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11303 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11305 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11306 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11308 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11309 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011310 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11311 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11313 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11314
Jeff Johnson295189b2012-06-20 16:38:30 -070011315 /* Store param pointer as passed in by caller */
11316 /* store Params pass it to WDI */
11317 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11318 pWdaParams->pWdaContext = pWDA;
11319 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011320 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011321 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011322 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011323 {
11324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11325 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011326 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11328 vos_mem_free(pWdaParams) ;
11329 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011330 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011331
11332}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011333/*
Yue Madb90ac12013-04-04 13:39:13 -070011334 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 *
11336 */
Yue Madb90ac12013-04-04 13:39:13 -070011337void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011338{
11339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11340
11341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011342 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 if(NULL == pWdaParams)
11344 {
11345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011346 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011347 VOS_ASSERT(0) ;
11348 return ;
11349 }
11350
11351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11352 vos_mem_free(pWdaParams->wdaMsgParam);
11353 vos_mem_free(pWdaParams) ;
11354
11355 //print a msg, nothing else to do
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011357 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 return ;
11359}
Jeff Johnson295189b2012-06-20 16:38:30 -070011360/*
Yue Madb90ac12013-04-04 13:39:13 -070011361 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011362 * Free memory.
11363 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011364 */
11365void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11366{
11367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11368
11369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11370 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11371
11372 if(NULL == pWdaParams)
11373 {
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11375 "%s: Invalid pWdaParams pointer", __func__);
11376 VOS_ASSERT(0);
11377 return;
11378 }
11379
11380 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11381 {
11382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11383 vos_mem_free(pWdaParams->wdaMsgParam);
11384 vos_mem_free(pWdaParams);
11385 }
11386
11387 return;
11388}
11389/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 * FUNCTION: WDA_ProcessHostOffloadReq
11391 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11392 * to broadcast traffic (sta mode).
11393 */
11394VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11395 tSirHostOffloadReq *pHostOffloadParams)
11396{
11397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011398 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11400 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11401 sizeof(WDI_HostOffloadReqParamsType)) ;
11402 tWDA_ReqParams *pWdaParams ;
11403
11404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011405 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011406
11407 if(NULL == wdiHostOffloadInfo)
11408 {
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411 VOS_ASSERT(0);
11412 return VOS_STATUS_E_NOMEM;
11413 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11415 if(NULL == pWdaParams)
11416 {
11417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 VOS_ASSERT(0);
11420 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011421 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422 return VOS_STATUS_E_NOMEM;
11423 }
11424
11425 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11426 pHostOffloadParams->offloadType;
11427 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11428 pHostOffloadParams->enableOrDisable;
11429
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011430 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11431 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11432
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11434 {
11435 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11436 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11437 pHostOffloadParams->params.hostIpv4Addr,
11438 4);
11439 break;
11440 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11441 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11442 pHostOffloadParams->params.hostIpv6Addr,
11443 16);
11444 break;
11445 case SIR_IPV6_NS_OFFLOAD:
11446 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11447 pHostOffloadParams->params.hostIpv6Addr,
11448 16);
11449
11450#ifdef WLAN_NS_OFFLOAD
11451 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11452 {
11453 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11454 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11455 16);
11456 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11457 }
11458 else
11459 {
11460 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11461 }
11462
11463 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11464 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11465 16);
11466 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11467 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11468 6);
11469
11470 //Only two are supported so let's go through them without a loop
11471 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11472 {
11473 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11474 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11475 16);
11476 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11477 }
11478 else
11479 {
11480 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11481 }
11482
11483 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11484 {
11485 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11486 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11487 16);
11488 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11489 }
11490 else
11491 {
11492 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11493 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011494 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11495 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 break;
11497#endif //WLAN_NS_OFFLOAD
11498 default:
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "No Handling for Offload Type %x in WDA "
11502 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11503 //WDA_VOS_ASSERT(0) ;
11504 }
11505 }
Yue Madb90ac12013-04-04 13:39:13 -070011506 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11507 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011508
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011510 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 /* store Params pass it to WDI */
11512 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11513 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011514
Jeff Johnson295189b2012-06-20 16:38:30 -070011515
Jeff Johnson43971f52012-07-17 12:26:56 -070011516 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011517 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011518
Jeff Johnson43971f52012-07-17 12:26:56 -070011519 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 {
11521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011522 "Failure in host offload REQ WDI API, free all the memory %d",
11523 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011524 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11526 vos_mem_free(pWdaParams->wdaMsgParam);
11527 vos_mem_free(pWdaParams) ;
11528 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011529 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011530
11531}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011532/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011533 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 *
11535 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011536void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011537{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11539
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011541 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011542
11543 if(NULL == pWdaParams)
11544 {
11545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011546 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011547 VOS_ASSERT(0) ;
11548 return ;
11549 }
11550
11551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11552 vos_mem_free(pWdaParams->wdaMsgParam);
11553 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011554
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 //print a msg, nothing else to do
11556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011557 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 return ;
11559}
Jeff Johnson295189b2012-06-20 16:38:30 -070011560/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011561 * FUNCTION: WDA_KeepAliveReqCallback
11562 * Free memory.
11563 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11564 */
11565void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11566{
11567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11568
11569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11570 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11571
11572 if(NULL == pWdaParams)
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11575 "%s: pWdaParams received NULL", __func__);
11576 VOS_ASSERT(0);
11577 return;
11578 }
11579
11580 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11581 {
11582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11583 vos_mem_free(pWdaParams->wdaMsgParam);
11584 vos_mem_free(pWdaParams);
11585 }
11586
11587 return;
11588}
11589/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011590 * FUNCTION: WDA_ProcessKeepAliveReq
11591 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11592 * wakeup due to broadcast traffic (sta mode).
11593 */
11594VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11595 tSirKeepAliveReq *pKeepAliveParams)
11596{
11597 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011598 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11600 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11601 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011602 tWDA_ReqParams *pWdaParams;
11603
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 if(NULL == wdiKeepAliveInfo)
11607 {
11608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011611 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 return VOS_STATUS_E_NOMEM;
11613 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011614
11615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11616 if(NULL == pWdaParams)
11617 {
11618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011619 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011620 VOS_ASSERT(0);
11621 vos_mem_free(wdiKeepAliveInfo);
11622 vos_mem_free(pKeepAliveParams);
11623 return VOS_STATUS_E_NOMEM;
11624 }
11625
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11627 pKeepAliveParams->packetType;
11628 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11629 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011630
11631 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11632 pKeepAliveParams->bssId,
11633 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011634
11635 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11636 {
11637 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11638 pKeepAliveParams->hostIpv4Addr,
11639 SIR_IPV4_ADDR_LEN);
11640 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11641 pKeepAliveParams->destIpv4Addr,
11642 SIR_IPV4_ADDR_LEN);
11643 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11644 pKeepAliveParams->destMacAddr,
11645 SIR_MAC_ADDR_LEN);
11646 }
11647 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11648 {
11649 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11650 SIR_IPV4_ADDR_LEN,
11651 0);
11652 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11653 SIR_IPV4_ADDR_LEN,
11654 0);
11655 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11656 SIR_MAC_ADDR_LEN,
11657 0);
11658 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011659 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11660 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011661
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011663 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011665 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11666 pWdaParams->pWdaContext = pWDA;
11667
Jeff Johnson295189b2012-06-20 16:38:30 -070011668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11669 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11670 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11671 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11672 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11674 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11675 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11676 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11677 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11679 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11680 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11681 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11682 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11683 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11684 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11687 "TimePeriod %d PacketType %d",
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11689 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011690 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011691 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011692
Jeff Johnson43971f52012-07-17 12:26:56 -070011693 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 {
11695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11696 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011697 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11699 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011700 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011702 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011703
11704}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011705/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011706 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 *
11708 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011709void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011710 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11711 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011712{
11713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011716 if(NULL == pWdaParams)
11717 {
11718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011720 VOS_ASSERT(0) ;
11721 return ;
11722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11724 vos_mem_free(pWdaParams->wdaMsgParam);
11725 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 return ;
11727}
Jeff Johnson295189b2012-06-20 16:38:30 -070011728/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011729 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11730 * Free memory.
11731 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11732 */
11733void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11734{
11735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11736
11737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11738 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11739
11740 if(NULL == pWdaParams)
11741 {
11742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11743 "%s: pWdaParams received NULL", __func__);
11744 VOS_ASSERT(0);
11745 return;
11746 }
11747
11748 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11749 {
11750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11751 vos_mem_free(pWdaParams->wdaMsgParam);
11752 vos_mem_free(pWdaParams);
11753 }
11754
11755 return;
11756}
11757
11758/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11760 * Request to WDI to add WOWL Bcast pattern
11761 */
11762VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11763 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11764{
11765 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011766 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11768 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11769 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11770 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 if(NULL == wdiWowlAddBcPtrnInfo)
11774 {
11775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 VOS_ASSERT(0);
11778 return VOS_STATUS_E_NOMEM;
11779 }
11780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11781 if(NULL == pWdaParams)
11782 {
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 VOS_ASSERT(0);
11786 vos_mem_free(wdiWowlAddBcPtrnInfo);
11787 return VOS_STATUS_E_NOMEM;
11788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11790 pWowlAddBcPtrnParams->ucPatternId;
11791 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11792 pWowlAddBcPtrnParams->ucPatternByteOffset;
11793 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11794 pWowlAddBcPtrnParams->ucPatternMaskSize;
11795 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11796 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11798 {
11799 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11800 pWowlAddBcPtrnParams->ucPattern,
11801 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11802 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11803 pWowlAddBcPtrnParams->ucPatternMask,
11804 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11805 }
11806 else
11807 {
11808 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11809 pWowlAddBcPtrnParams->ucPattern,
11810 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11811 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11812 pWowlAddBcPtrnParams->ucPatternMask,
11813 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11814
11815 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11816 pWowlAddBcPtrnParams->ucPatternExt,
11817 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11818 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11819 pWowlAddBcPtrnParams->ucPatternMaskExt,
11820 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11821 }
11822
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011823 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11824 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11825
Yue Ma7f44bbe2013-04-12 11:47:39 -070011826 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11827 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011828 /* Store param pointer as passed in by caller */
11829 /* store Params pass it to WDI */
11830 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11831 pWdaParams->pWdaContext = pWDA;
11832 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011833 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011834 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011835 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011836 {
11837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11838 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011839 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 vos_mem_free(pWdaParams->wdaMsgParam) ;
11841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11842 vos_mem_free(pWdaParams) ;
11843 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011844 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011845
11846}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011847/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011848 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 *
11850 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011851void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011852 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11853 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011854{
11855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011858 if(NULL == pWdaParams)
11859 {
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011861 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 VOS_ASSERT(0) ;
11863 return ;
11864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11866 vos_mem_free(pWdaParams->wdaMsgParam);
11867 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 return ;
11869}
Jeff Johnson295189b2012-06-20 16:38:30 -070011870/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011871 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11872 * Free memory.
11873 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11874 */
11875void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11876{
11877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11878
11879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11880 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11881
11882 if(NULL == pWdaParams)
11883 {
11884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11885 "%s: pWdaParams received NULL", __func__);
11886 VOS_ASSERT(0);
11887 return;
11888 }
11889
11890 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11891 {
11892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11893 vos_mem_free(pWdaParams->wdaMsgParam);
11894 vos_mem_free(pWdaParams);
11895 }
11896
11897 return;
11898}
11899/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11901 * Request to WDI to delete WOWL Bcast pattern
11902 */
11903VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11904 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11905{
11906 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011907 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11909 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11910 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11911 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011913 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 if(NULL == wdiWowlDelBcPtrnInfo)
11915 {
11916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 VOS_ASSERT(0);
11919 return VOS_STATUS_E_NOMEM;
11920 }
11921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11922 if(NULL == pWdaParams)
11923 {
11924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 VOS_ASSERT(0);
11927 vos_mem_free(wdiWowlDelBcPtrnInfo);
11928 return VOS_STATUS_E_NOMEM;
11929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11931 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011932
11933 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11934 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11935
Yue Ma7f44bbe2013-04-12 11:47:39 -070011936 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11937 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 /* Store param pointer as passed in by caller */
11939 /* store Params pass it to WDI */
11940 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11941 pWdaParams->pWdaContext = pWDA;
11942 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011943 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011944 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011945 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 {
11947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11948 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011949 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 vos_mem_free(pWdaParams->wdaMsgParam) ;
11951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11952 vos_mem_free(pWdaParams) ;
11953 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011954 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011955
11956}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011957/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011958 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 *
11960 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011961void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011962{
11963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011964 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011967 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 if(NULL == pWdaParams)
11969 {
11970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011971 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 VOS_ASSERT(0) ;
11973 return ;
11974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011976 if (NULL == pWDA)
11977 {
11978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11979 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011980
11981 if(pWdaParams->wdaWdiApiMsgParam)
11982 {
11983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11984 }
11985 vos_mem_free(pWdaParams);
11986
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011987 VOS_ASSERT(0);
11988 return ;
11989 }
11990
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11992
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011993 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11994
Jeff Johnson295189b2012-06-20 16:38:30 -070011995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11996 vos_mem_free(pWdaParams) ;
11997
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011998 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011999 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012001 return ;
12002}
Jeff Johnson295189b2012-06-20 16:38:30 -070012003/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012004 * FUNCTION: WDA_WowlEnterReqCallback
12005 * Free memory and send WOWL Enter RSP back to PE.
12006 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12007 */
12008void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12009{
12010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012011 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012012 tSirHalWowlEnterParams *pWowlEnterParams;
12013
12014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12015 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12016
12017 if(NULL == pWdaParams)
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12020 "%s: pWdaParams received NULL", __func__);
12021 VOS_ASSERT(0);
12022 return;
12023 }
12024
12025 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012026 if (NULL == pWDA)
12027 {
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12029 "%s:pWDA is NULL", __func__);
12030 VOS_ASSERT(0);
12031 return ;
12032 }
12033
Yue Ma7f44bbe2013-04-12 11:47:39 -070012034 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12035 pWowlEnterParams->status = wdiStatus;
12036
12037 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12038 {
12039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12040 vos_mem_free(pWdaParams);
12041 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12042 }
12043
12044 return;
12045}
12046/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 * FUNCTION: WDA_ProcessWowlEnterReq
12048 * Request to WDI to enter WOWL
12049 */
12050VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12051 tSirHalWowlEnterParams *pWowlEnterParams)
12052{
12053 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012054 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12056 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12057 sizeof(WDI_WowlEnterReqParamsType)) ;
12058 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 if(NULL == wdiWowlEnterInfo)
12062 {
12063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 VOS_ASSERT(0);
12066 return VOS_STATUS_E_NOMEM;
12067 }
12068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12069 if(NULL == pWdaParams)
12070 {
12071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 VOS_ASSERT(0);
12074 vos_mem_free(wdiWowlEnterInfo);
12075 return VOS_STATUS_E_NOMEM;
12076 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012077
12078 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12079
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12081 pWowlEnterParams->magicPtrn,
12082 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012083 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12084 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12086 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12088 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12090 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12092 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12094 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12096 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12098 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012099#ifdef WLAN_WAKEUP_EVENTS
12100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12101 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12102
12103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12104 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12105
12106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12107 pWowlEnterParams->ucWowNetScanOffloadMatch;
12108
12109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12110 pWowlEnterParams->ucWowGTKRekeyError;
12111
12112 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12113 pWowlEnterParams->ucWoWBSSConnLoss;
12114#endif // WLAN_WAKEUP_EVENTS
12115
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012116 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12117 pWowlEnterParams->bssIdx;
12118
Yue Ma7f44bbe2013-04-12 11:47:39 -070012119 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12120 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012121 /* Store param pointer as passed in by caller */
12122 /* store Params pass it to WDI */
12123 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12124 pWdaParams->pWdaContext = pWDA;
12125 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012126 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012127 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012128 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 {
12130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12131 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012132 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012133 vos_mem_free(pWdaParams->wdaMsgParam) ;
12134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12135 vos_mem_free(pWdaParams) ;
12136 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012138
12139}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012140/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012141 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012142 *
12143 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012144void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012145{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012147 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012148 tSirHalWowlExitParams *pWowlExitParams;
12149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012150 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012151 if(NULL == pWdaParams)
12152 {
12153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012154 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012155 VOS_ASSERT(0) ;
12156 return ;
12157 }
12158 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012159 if (NULL == pWDA)
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12162 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012163
12164 if(pWdaParams->wdaWdiApiMsgParam)
12165 {
12166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12167 }
12168 vos_mem_free(pWdaParams);
12169
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012170 VOS_ASSERT(0);
12171 return ;
12172 }
12173
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012174 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12175
12176 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012177 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012178
12179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12180 vos_mem_free(pWdaParams) ;
12181
Jeff Johnson295189b2012-06-20 16:38:30 -070012182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012183 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012184 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012185 return ;
12186}
Jeff Johnson295189b2012-06-20 16:38:30 -070012187/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012188 * FUNCTION: WDA_WowlExitReqCallback
12189 * Free memory and send WOWL Exit RSP back to PE.
12190 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12191 */
12192void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12193{
12194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012195 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012196 tSirHalWowlExitParams *pWowlExitParams;
12197
12198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12199 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12200
12201 if(NULL == pWdaParams)
12202 {
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12204 "%s: pWdaParams received NULL", __func__);
12205 VOS_ASSERT(0);
12206 return;
12207 }
12208
12209 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012210 if (NULL == pWDA)
12211 {
12212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12213 "%s:pWDA is NULL", __func__);
12214 VOS_ASSERT(0);
12215 return ;
12216 }
12217
Yue Ma7f44bbe2013-04-12 11:47:39 -070012218 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12219 pWowlExitParams->status = wdiStatus;
12220
12221 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12222 {
12223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12224 vos_mem_free(pWdaParams);
12225 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12226 }
12227
12228 return;
12229}
12230/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012231 * FUNCTION: WDA_ProcessWowlExitReq
12232 * Request to WDI to add WOWL Bcast pattern
12233 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012234VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12235 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012236{
12237 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012238 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012239 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12240 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12241 sizeof(WDI_WowlExitReqParamsType)) ;
12242 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012244 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012245 if(NULL == wdiWowlExitInfo)
12246 {
12247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012248 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012249 VOS_ASSERT(0);
12250 return VOS_STATUS_E_NOMEM;
12251 }
12252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12253 if(NULL == pWdaParams)
12254 {
12255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012256 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012257 VOS_ASSERT(0);
12258 vos_mem_free(wdiWowlExitInfo);
12259 return VOS_STATUS_E_NOMEM;
12260 }
12261
12262 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12263 pWowlExitParams->bssIdx;
12264
Yue Ma7f44bbe2013-04-12 11:47:39 -070012265 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12266 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012267
12268 /* Store param pointer as passed in by caller */
12269 /* store Params pass it to WDI */
12270 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12271 pWdaParams->pWdaContext = pWDA;
12272 pWdaParams->wdaMsgParam = pWowlExitParams;
12273
12274 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012275 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012276
Jeff Johnson43971f52012-07-17 12:26:56 -070012277 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 {
12279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12280 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012281 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12283 vos_mem_free(pWdaParams->wdaMsgParam);
12284 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012286 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012287}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012288/*
12289 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12290 * Request to WDI to determine whether a given station is capable of
12291 * using HW-based frame translation
12292 */
12293v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12294 tANI_U8 staIdx)
12295{
12296 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12297}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012298
12299/*
12300 * FUNCTION: WDA_IsSelfSTA
12301 * Request to WDI to determine whether a given STAID is self station
12302 * index.
12303 */
12304v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12305{
12306
12307 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12308
Girish Gowli05cf44e2014-06-12 21:53:37 +053012309 if (NULL != pWDA)
12310 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12311 else
12312 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012313}
Jeff Johnson295189b2012-06-20 16:38:30 -070012314/*
12315 * FUNCTION: WDA_NvDownloadReqCallback
12316 * send NV Download RSP back to PE
12317 */
12318void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12319 void* pUserData)
12320{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012321
12322 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012323 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012324
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012326 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012327
12328 if(NULL == pWdaParams)
12329 {
12330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012331 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012332 VOS_ASSERT(0) ;
12333 return ;
12334 }
12335
12336 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012337 if (NULL == pWDA)
12338 {
12339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12340 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012341
12342 if(pWdaParams->wdaWdiApiMsgParam)
12343 {
12344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12345 }
12346 vos_mem_free(pWdaParams);
12347
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012348 VOS_ASSERT(0);
12349 return ;
12350 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012351
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12354 vos_mem_free(pWdaParams);
12355
Jeff Johnson295189b2012-06-20 16:38:30 -070012356 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 return ;
12358}
Jeff Johnson295189b2012-06-20 16:38:30 -070012359/*
12360 * FUNCTION: WDA_ProcessNvDownloadReq
12361 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12362 */
12363VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12364{
12365 /* Initialize the local Variables*/
12366 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12367 v_VOID_t *pNvBuffer=NULL;
12368 v_SIZE_t bufferSize = 0;
12369 WDI_Status status = WDI_STATUS_E_FAILURE;
12370 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012371 tWDA_ReqParams *pWdaParams ;
12372
Jeff Johnson295189b2012-06-20 16:38:30 -070012373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012374 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012375 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012376 {
12377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012378 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012379 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012380 return VOS_STATUS_E_FAILURE;
12381 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012382
Jeff Johnson295189b2012-06-20 16:38:30 -070012383 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012384 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12385
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12387 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 if(NULL == wdiNvDownloadReqParam)
12389 {
12390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 VOS_ASSERT(0);
12393 return VOS_STATUS_E_NOMEM;
12394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012395 /* Copy Params to wdiNvDownloadReqParam*/
12396 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12397 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012398
12399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12400 if(NULL == pWdaParams)
12401 {
12402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012403 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012404 VOS_ASSERT(0);
12405 vos_mem_free(wdiNvDownloadReqParam);
12406 return VOS_STATUS_E_NOMEM;
12407 }
12408
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012410 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12411 pWdaParams->wdaMsgParam = NULL;
12412 pWdaParams->pWdaContext = pWDA;
12413
12414
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012416
Jeff Johnson295189b2012-06-20 16:38:30 -070012417 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012418 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12419
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 if(IS_WDI_STATUS_FAILURE(status))
12421 {
12422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12423 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12425 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012428}
12429/*
12430 * FUNCTION: WDA_FlushAcReqCallback
12431 * send Flush AC RSP back to TL
12432 */
12433void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12434{
12435 vos_msg_t wdaMsg = {0} ;
12436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12437 tFlushACReq *pFlushACReqParams;
12438 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012440 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012441 if(NULL == pWdaParams)
12442 {
12443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012444 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012445 VOS_ASSERT(0) ;
12446 return ;
12447 }
12448
12449 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12450 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12451 if(NULL == pFlushACRspParams)
12452 {
12453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012454 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012456 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012457 return ;
12458 }
12459 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12460 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12461 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12462 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12463 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012464 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 vos_mem_free(pWdaParams->wdaMsgParam) ;
12466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12467 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12469 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12470 // POST message to TL
12471 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12472
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 return ;
12474}
Jeff Johnson295189b2012-06-20 16:38:30 -070012475/*
12476 * FUNCTION: WDA_ProcessFlushAcReq
12477 * Request to WDI to Update the DELBA REQ params.
12478 */
12479VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12480 tFlushACReq *pFlushAcReqParams)
12481{
12482 WDI_Status status = WDI_STATUS_SUCCESS ;
12483 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12484 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12485 sizeof(WDI_FlushAcReqParamsType)) ;
12486 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012487 if(NULL == wdiFlushAcReqParam)
12488 {
12489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012491 VOS_ASSERT(0);
12492 return VOS_STATUS_E_NOMEM;
12493 }
12494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12495 if(NULL == pWdaParams)
12496 {
12497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012499 VOS_ASSERT(0);
12500 vos_mem_free(wdiFlushAcReqParam);
12501 return VOS_STATUS_E_NOMEM;
12502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12506 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12507 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12508 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 /* Store Flush AC pointer, as this will be used for response */
12510 /* store Params pass it to WDI */
12511 pWdaParams->pWdaContext = pWDA;
12512 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12513 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12515 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 if(IS_WDI_STATUS_FAILURE(status))
12517 {
12518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12519 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12520 vos_mem_free(pWdaParams->wdaMsgParam) ;
12521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12522 vos_mem_free(pWdaParams) ;
12523 //TODO: respond to TL with failure
12524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012526}
Jeff Johnson295189b2012-06-20 16:38:30 -070012527/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012528 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012529 *
12530 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012531void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012532{
12533 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012534 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012535 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012536
12537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012539 if(NULL == pWdaParams)
12540 {
12541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012542 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 VOS_ASSERT(0) ;
12544 return ;
12545 }
12546 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012547 if (NULL == pWDA)
12548 {
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12550 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012551 vos_mem_free(pWdaParams->wdaMsgParam) ;
12552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12553 vos_mem_free(pWdaParams) ;
12554
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012555 VOS_ASSERT(0);
12556 return ;
12557 }
12558
Jeff Johnson295189b2012-06-20 16:38:30 -070012559 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12560 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12561 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12562 {
12563 pWDA->wdaAmpSessionOn = VOS_FALSE;
12564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012565 vos_mem_free(pWdaParams->wdaMsgParam) ;
12566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12567 vos_mem_free(pWdaParams) ;
12568 /*
12569 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12570 * param here
12571 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012572 return ;
12573}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012574/*
12575 * FUNCTION: WDA_BtAmpEventReqCallback
12576 * Free memory.
12577 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12578 */
12579void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12580{
12581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012582 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012583 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012584
Yue Ma7f44bbe2013-04-12 11:47:39 -070012585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12586 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12587
12588 if(NULL == pWdaParams)
12589 {
12590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12591 "%s: pWdaParams received NULL", __func__);
12592 VOS_ASSERT(0);
12593 return;
12594 }
12595
12596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012597 if (NULL == pWDA)
12598 {
12599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12600 "%s:pWDA is NULL", __func__);
12601 VOS_ASSERT(0);
12602 return ;
12603 }
12604
Yue Ma7f44bbe2013-04-12 11:47:39 -070012605 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12606
12607 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12608 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12609 {
12610 pWDA->wdaAmpSessionOn = VOS_FALSE;
12611 }
12612
12613 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12614 {
12615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12616 vos_mem_free(pWdaParams->wdaMsgParam);
12617 vos_mem_free(pWdaParams);
12618 }
12619
12620 return;
12621}
Jeff Johnson295189b2012-06-20 16:38:30 -070012622/*
12623 * FUNCTION: WDA_ProcessBtAmpEventReq
12624 * Request to WDI to Update with BT AMP events.
12625 */
12626VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12627 tSmeBtAmpEvent *pBtAmpEventParams)
12628{
12629 WDI_Status status = WDI_STATUS_SUCCESS ;
12630 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12631 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12632 sizeof(WDI_BtAmpEventParamsType)) ;
12633 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012635 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 if(NULL == wdiBtAmpEventParam)
12637 {
12638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 VOS_ASSERT(0);
12641 return VOS_STATUS_E_NOMEM;
12642 }
12643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12644 if(NULL == pWdaParams)
12645 {
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 VOS_ASSERT(0);
12649 vos_mem_free(wdiBtAmpEventParam);
12650 return VOS_STATUS_E_NOMEM;
12651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12653 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012654 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12655 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 /* Store BT AMP event pointer, as this will be used for response */
12657 /* store Params pass it to WDI */
12658 pWdaParams->pWdaContext = pWDA;
12659 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12660 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012661 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012662 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 if(IS_WDI_STATUS_FAILURE(status))
12664 {
12665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12666 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12667 vos_mem_free(pWdaParams->wdaMsgParam) ;
12668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12669 vos_mem_free(pWdaParams) ;
12670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12672 {
12673 pWDA->wdaAmpSessionOn = VOS_TRUE;
12674 }
12675 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012676}
12677
Jeff Johnson295189b2012-06-20 16:38:30 -070012678/*
12679 * FUNCTION: WDA_FTMCommandReqCallback
12680 * Handle FTM CMD response came from HAL
12681 * Route responce to HDD FTM
12682 */
12683void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12684 void *usrData)
12685{
12686 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012687 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12688 {
12689 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012690 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 return;
12692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 /* Release Current FTM Command Request */
12694 vos_mem_free(pWDA->wdaFTMCmdReq);
12695 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 /* Post FTM Responce to HDD FTM */
12697 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 return;
12699}
Jeff Johnson295189b2012-06-20 16:38:30 -070012700/*
12701 * FUNCTION: WDA_ProcessFTMCommand
12702 * Send FTM command to WDI
12703 */
12704VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12705 tPttMsgbuffer *pPTTFtmCmd)
12706{
12707 WDI_Status status = WDI_STATUS_SUCCESS;
12708 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 ftmCMDReq = (WDI_FTMCommandReqType *)
12710 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12711 if(NULL == ftmCMDReq)
12712 {
12713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12714 "WDA FTM Command buffer alloc fail");
12715 return VOS_STATUS_E_NOMEM;
12716 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012717 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12718 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 /* Send command to WDI */
12721 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 return status;
12723}
Jeff Johnsone7245742012-09-05 17:12:55 -070012724#ifdef FEATURE_OEM_DATA_SUPPORT
12725/*
12726 * FUNCTION: WDA_StartOemDataReqCallback
12727 *
12728 */
12729void WDA_StartOemDataReqCallback(
12730 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12731 void* pUserData)
12732{
12733 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012735 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012736 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012737
Jeff Johnsone7245742012-09-05 17:12:55 -070012738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012739 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012740
12741 if(NULL == pWdaParams)
12742 {
12743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012744 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012745 VOS_ASSERT(0) ;
12746 return ;
12747 }
12748 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12749
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012750 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012751 {
12752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012753 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012754 VOS_ASSERT(0);
12755 return ;
12756 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012757
Jeff Johnsone7245742012-09-05 17:12:55 -070012758 /*
12759 * Allocate memory for response params sent to PE
12760 */
12761 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12762
12763 // Check if memory is allocated for OemdataMeasRsp Params.
12764 if(NULL == pOemDataRspParams)
12765 {
12766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12767 "OEM DATA WDA callback alloc fail");
12768 VOS_ASSERT(0) ;
12769 return;
12770 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012771
Jeff Johnsone7245742012-09-05 17:12:55 -070012772 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12774 vos_mem_free(pWdaParams->wdaMsgParam);
12775 vos_mem_free(pWdaParams) ;
12776
Jeff Johnsone7245742012-09-05 17:12:55 -070012777 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012778 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012779 * Also, here success always means that we have atleast one BSSID.
12780 */
12781 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12782
12783 //enable Tx
12784 status = WDA_ResumeDataTx(pWDA);
12785 if(status != VOS_STATUS_SUCCESS)
12786 {
12787 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12788 }
12789 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12790 return ;
12791}
12792/*
12793 * FUNCTION: WDA_ProcessStartOemDataReq
12794 * Send Start Oem Data Req to WDI
12795 */
12796VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12797 tStartOemDataReq *pOemDataReqParams)
12798{
12799 WDI_Status status = WDI_STATUS_SUCCESS;
12800 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012801 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012802
12803 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12804
12805 if(NULL == wdiOemDataReqParams)
12806 {
12807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012809 VOS_ASSERT(0);
12810 return VOS_STATUS_E_NOMEM;
12811 }
12812
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012813 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12814 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12815 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12816 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012817
12818 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12819
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012820 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12821 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012822 {
12823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012825 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012826 vos_mem_free(pOemDataReqParams);
12827 VOS_ASSERT(0);
12828 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012829 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012830
Bernald44a1ae2013-01-09 08:30:39 -080012831 pWdaParams->pWdaContext = (void*)pWDA;
12832 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12833 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012834
12835 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12836 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012837
12838 if(IS_WDI_STATUS_FAILURE(status))
12839 {
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12841 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12843 vos_mem_free(pWdaParams->wdaMsgParam);
12844 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012845 }
12846 return CONVERT_WDI2VOS_STATUS(status) ;
12847}
12848#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012849/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012850 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012851 *
12852 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012853void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012854{
12855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 if(NULL == pWdaParams)
12859 {
12860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012861 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 VOS_ASSERT(0) ;
12863 return ;
12864 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012865
12866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12867 vos_mem_free(pWdaParams->wdaMsgParam);
12868 vos_mem_free(pWdaParams);
12869
12870 return ;
12871}
12872/*
12873 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12874 * Free memory.
12875 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12876 */
12877void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12878{
12879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12880
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12882 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12883
12884 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012885 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12887 "%s: pWdaParams received NULL", __func__);
12888 VOS_ASSERT(0);
12889 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012891
12892 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012893 {
12894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012895 vos_mem_free(pWdaParams->wdaMsgParam);
12896 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012898
12899 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012900}
Jeff Johnson295189b2012-06-20 16:38:30 -070012901#ifdef WLAN_FEATURE_GTK_OFFLOAD
12902/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012903 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012904 *
12905 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012906void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012907 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012908{
12909 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12910
12911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012912 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012913 if(NULL == pWdaParams)
12914 {
12915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12916 "%s: pWdaParams received NULL", __func__);
12917 VOS_ASSERT(0);
12918 return;
12919 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012920
Jeff Johnson295189b2012-06-20 16:38:30 -070012921 vos_mem_free(pWdaParams->wdaMsgParam) ;
12922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12923 vos_mem_free(pWdaParams) ;
12924
12925 //print a msg, nothing else to do
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012927 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012928
12929 return ;
12930}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012931/*
12932 * FUNCTION: WDA_GTKOffloadReqCallback
12933 * Free memory.
12934 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12935 */
12936void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12937{
12938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012939
Yue Ma7f44bbe2013-04-12 11:47:39 -070012940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12941 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12942
12943 if(NULL == pWdaParams)
12944 {
12945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12946 "%s: pWdaParams received NULL", __func__);
12947 VOS_ASSERT(0);
12948 return;
12949 }
12950
12951 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12952 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012953 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12954 sizeof(WDI_GtkOffloadReqMsg));
12955 vos_mem_zero(pWdaParams->wdaMsgParam,
12956 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12958 vos_mem_free(pWdaParams->wdaMsgParam);
12959 vos_mem_free(pWdaParams);
12960 }
12961
12962 return;
12963}
Jeff Johnson295189b2012-06-20 16:38:30 -070012964/*
12965 * FUNCTION: WDA_ProcessGTKOffloadReq
12966 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12967 * to broadcast traffic (sta mode).
12968 */
12969VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12970 tpSirGtkOffloadParams pGtkOffloadParams)
12971{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012972 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12974 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12975 sizeof(WDI_GtkOffloadReqMsg)) ;
12976 tWDA_ReqParams *pWdaParams ;
12977
12978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012980
12981 if(NULL == wdiGtkOffloadReqMsg)
12982 {
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 VOS_ASSERT(0);
12986 return VOS_STATUS_E_NOMEM;
12987 }
12988
12989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12990 if(NULL == pWdaParams)
12991 {
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 VOS_ASSERT(0);
12995 vos_mem_free(wdiGtkOffloadReqMsg);
12996 return VOS_STATUS_E_NOMEM;
12997 }
12998
12999 //
13000 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13001 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013002
13003 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013004 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013005
Jeff Johnson295189b2012-06-20 16:38:30 -070013006 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13007 // Copy KCK
13008 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13009 // Copy KEK
13010 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13011 // Copy KeyReplayCounter
13012 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13013 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13014
Yue Ma7f44bbe2013-04-12 11:47:39 -070013015 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13016 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013017
Jeff Johnson295189b2012-06-20 16:38:30 -070013018
13019 /* Store Params pass it to WDI */
13020 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13021 pWdaParams->pWdaContext = pWDA;
13022 /* Store param pointer as passed in by caller */
13023 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13024
Yue Ma7f44bbe2013-04-12 11:47:39 -070013025 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013026
13027 if(IS_WDI_STATUS_FAILURE(status))
13028 {
13029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13030 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013031 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13032 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13034 vos_mem_free(pWdaParams->wdaMsgParam);
13035 vos_mem_free(pWdaParams);
13036 }
13037
13038 return CONVERT_WDI2VOS_STATUS(status) ;
13039}
13040
13041/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013042 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 *
13044 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013045void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013046 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013047{
13048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13049 tWDA_CbContext *pWDA;
13050 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013051 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013052 vos_msg_t vosMsg;
13053
13054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013055 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013056
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013057 if(NULL == pWdaParams)
13058 {
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13060 "%s: pWdaParams received NULL", __func__);
13061 VOS_ASSERT(0);
13062 return;
13063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013064
Nirav Shah374de6e2014-02-13 16:40:01 +053013065 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13066 if(NULL == pGtkOffloadGetInfoRsp)
13067 {
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13069 "%s: vos_mem_malloc failed ", __func__);
13070 VOS_ASSERT(0);
13071 return;
13072 }
13073
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13075 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13076
13077 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13078 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13079
13080 /* Message Header */
13081 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013082 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013083
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013084 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13085 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13086 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13087 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13088 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013089
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013090 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13091 pwdiGtkOffloadGetInfoRsparams->bssId,
13092 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013093 /* VOS message wrapper */
13094 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13095 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13096 vosMsg.bodyval = 0;
13097
13098 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13099 {
13100 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013101 vos_mem_zero(pGtkOffloadGetInfoRsp,
13102 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13104 }
13105
13106 vos_mem_free(pWdaParams->wdaMsgParam) ;
13107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13108 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013109
13110 return;
13111}
13112/*
13113 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13114 * Free memory and send RSP back to SME.
13115 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13116 */
13117void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13118{
13119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13120 vos_msg_t vosMsg;
13121
13122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13123 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13124
13125 if(NULL == pWdaParams)
13126 {
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13128 "%s: pWdaParams received NULL", __func__);
13129 VOS_ASSERT(0);
13130 return;
13131 }
13132
13133 /* VOS message wrapper */
13134 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13135 vosMsg.bodyptr = NULL;
13136 vosMsg.bodyval = 0;
13137
13138 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13139 {
13140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13141 vos_mem_free(pWdaParams->wdaMsgParam);
13142 vos_mem_free(pWdaParams);
13143 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13144 }
13145
13146 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013147}
13148#endif
13149
13150/*
13151 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13152 * Request to WDI to set Tx Per Tracking configurations
13153 */
13154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13155{
13156 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013157 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013158 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13159 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13160 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13161 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013163 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 if(NULL == pwdiSetTxPerTrackingReqParams)
13165 {
13166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 vos_mem_free(pTxPerTrackingParams);
13169 VOS_ASSERT(0);
13170 return VOS_STATUS_E_NOMEM;
13171 }
13172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13173 if(NULL == pWdaParams)
13174 {
13175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13178 vos_mem_free(pTxPerTrackingParams);
13179 VOS_ASSERT(0);
13180 return VOS_STATUS_E_NOMEM;
13181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13183 pTxPerTrackingParams->ucTxPerTrackingEnable;
13184 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13185 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13186 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13187 pTxPerTrackingParams->ucTxPerTrackingRatio;
13188 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13189 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013190 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13191 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 /* Store param pointer as passed in by caller */
13193 /* store Params pass it to WDI
13194 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13195 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13196 pWdaParams->pWdaContext = pWDA;
13197 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013198 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013199 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013200 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 {
13202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13203 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013204 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013205 vos_mem_free(pWdaParams->wdaMsgParam) ;
13206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13207 vos_mem_free(pWdaParams) ;
13208 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013209 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013210
13211}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013212/*
13213 * FUNCTION: WDA_HALDumpCmdCallback
13214 * Send the VOS complete .
13215 */
13216void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13217 void* pUserData)
13218{
13219 tANI_U8 *buffer = NULL;
13220 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013221 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 if(NULL == pWdaParams)
13223 {
13224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013225 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 VOS_ASSERT(0) ;
13227 return ;
13228 }
13229
13230 pWDA = pWdaParams->pWdaContext;
13231 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013232 if(wdiRspParams->usBufferLen > 0)
13233 {
13234 /*Copy the Resp data to UMAC supplied buffer*/
13235 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13236 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013237
13238 if (!pWdaParams->wdaHALDumpAsync)
13239 {/* Indicate VOSS about the start complete */
13240 vos_WDAComplete_cback(pWDA->pVosContext);
13241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13243 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013244 return ;
13245}
13246
Jeff Johnson295189b2012-06-20 16:38:30 -070013247/*
13248 * FUNCTION: WDA_ProcessHALDumpCmdReq
13249 * Send Dump command to WDI
13250 */
13251VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13252 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013253 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013254{
13255 WDI_Status status = WDI_STATUS_SUCCESS;
13256 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13257 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013258 tWDA_HalDumpReqParams *pWdaParams ;
13259
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 pVosContextType pVosContext = NULL;
13261 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13263 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013264 if(pVosContext)
13265 {
13266 if (pVosContext->isLogpInProgress)
13267 {
13268 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13269 "%s:LOGP in Progress. Ignore!!!", __func__);
13270 return VOS_STATUS_E_BUSY;
13271 }
13272 }
13273 else
13274 {
13275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13276 "%s: VOS Context Null", __func__);
13277 return VOS_STATUS_E_RESOURCES;
13278 }
13279
Siddharth Bhal68115602015-01-18 20:44:55 +053013280 if (NULL == pVosContext->pWDAContext)
13281 {
13282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13283 "%s: WDA Context Null", __func__);
13284 return VOS_STATUS_E_RESOURCES;
13285 }
13286 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013287 if(NULL == pWdaParams)
13288 {
13289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013291 return VOS_STATUS_E_NOMEM;
13292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013293 /* Allocate memory WDI request structure*/
13294 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13295 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13296 if(NULL == wdiHALDumpCmdReqParam)
13297 {
13298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13299 "WDA HAL DUMP Command buffer alloc fail");
13300 vos_mem_free(pWdaParams);
13301 return WDI_STATUS_E_FAILURE;
13302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 /* Extract the arguments */
13305 wdiHalDumpCmdInfo->command = cmd;
13306 wdiHalDumpCmdInfo->argument1 = arg1;
13307 wdiHalDumpCmdInfo->argument2 = arg2;
13308 wdiHalDumpCmdInfo->argument3 = arg3;
13309 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013312 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013313
13314 /* Response message will be passed through the buffer */
13315 pWdaParams->wdaMsgParam = (void *)pBuffer;
13316
13317 /* store Params pass it to WDI */
13318 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013320 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13321 pWdaParams);
13322 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13323 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013325 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13326 WDA_DUMPCMD_WAIT_TIMEOUT );
13327 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013329 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13330 {
13331 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13332 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13333 }
13334 else
13335 {
13336 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13337 "%s: WDA_HALDUMP reporting other error",__func__);
13338 }
13339 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 }
13342 return status;
13343}
Jeff Johnson295189b2012-06-20 16:38:30 -070013344#ifdef WLAN_FEATURE_GTK_OFFLOAD
13345/*
13346 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13347 * Request to WDI to get GTK Offload Information
13348 */
13349VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13350 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13351{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013352 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013353 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13354 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13355 tWDA_ReqParams *pWdaParams ;
13356
13357 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13358 {
13359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013361 VOS_ASSERT(0);
13362 return VOS_STATUS_E_NOMEM;
13363 }
13364
13365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13366 if(NULL == pWdaParams)
13367 {
13368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013370 VOS_ASSERT(0);
13371 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13372 return VOS_STATUS_E_NOMEM;
13373 }
13374
Yue Ma7f44bbe2013-04-12 11:47:39 -070013375 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13376 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013377
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 /* Store Params pass it to WDI */
13379 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13380 pWdaParams->pWdaContext = pWDA;
13381 /* Store param pointer as passed in by caller */
13382 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13383
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013384 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013385 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013386
Yue Ma7f44bbe2013-04-12 11:47:39 -070013387 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013388
13389 if(IS_WDI_STATUS_FAILURE(status))
13390 {
13391 /* failure returned by WDI API */
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13393 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13395 vos_mem_free(pWdaParams) ;
13396 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13397 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13398 }
13399
13400 return CONVERT_WDI2VOS_STATUS(status) ;
13401}
13402#endif // WLAN_FEATURE_GTK_OFFLOAD
13403
13404/*
Yue Mab9c86f42013-08-14 15:59:08 -070013405 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13406 *
13407 */
13408VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13409 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13410{
13411 WDI_Status wdiStatus;
13412 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13413
13414 addPeriodicTxPtrnParams =
13415 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13416
13417 if (NULL == addPeriodicTxPtrnParams)
13418 {
13419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13420 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13421 __func__);
13422
13423 return VOS_STATUS_E_NOMEM;
13424 }
13425
13426 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13427 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13428
13429 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13430 addPeriodicTxPtrnParams->pUserData = pWDA;
13431
13432 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13433
13434 if (WDI_STATUS_PENDING == wdiStatus)
13435 {
13436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13437 "Pending received for %s:%d", __func__, __LINE__ );
13438 }
13439 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13440 {
13441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13442 "Failure in %s:%d", __func__, __LINE__ );
13443 }
13444
13445 vos_mem_free(addPeriodicTxPtrnParams);
13446
13447 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13448}
13449
13450/*
13451 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13452 *
13453 */
13454VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13455 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13456{
13457 WDI_Status wdiStatus;
13458 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13459
13460 delPeriodicTxPtrnParams =
13461 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13462
13463 if (NULL == delPeriodicTxPtrnParams)
13464 {
13465 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13466 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13467 __func__);
13468
13469 return VOS_STATUS_E_NOMEM;
13470 }
13471
13472 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13473 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13474
13475 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13476 delPeriodicTxPtrnParams->pUserData = pWDA;
13477
13478 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13479
13480 if (WDI_STATUS_PENDING == wdiStatus)
13481 {
13482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13483 "Pending received for %s:%d", __func__, __LINE__ );
13484 }
13485 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13486 {
13487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13488 "Failure in %s:%d", __func__, __LINE__ );
13489 }
13490
13491 vos_mem_free(delPeriodicTxPtrnParams);
13492
13493 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13494}
13495
Rajeev79dbe4c2013-10-05 11:03:42 +053013496#ifdef FEATURE_WLAN_BATCH_SCAN
13497/*
13498 * FUNCTION: WDA_ProcessStopBatchScanInd
13499 *
13500 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13501 *
13502 * PARAM:
13503 * pWDA: pointer to WDA context
13504 * pReq: pointer to stop batch scan request
13505 */
13506VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13507 tSirStopBatchScanInd *pReq)
13508{
13509 WDI_Status wdiStatus;
13510 WDI_StopBatchScanIndType wdiReq;
13511
13512 wdiReq.param = pReq->param;
13513
13514 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13515
13516 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13517 {
13518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13519 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13520 }
13521
13522 vos_mem_free(pReq);
13523
13524 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13525}
13526/*==========================================================================
13527 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13528
13529 DESCRIPTION
13530 API to pull batch scan result from FW
13531
13532 PARAMETERS
13533 pWDA: Pointer to WDA context
13534 pGetBatchScanReq: Pointer to get batch scan result indication
13535
13536 RETURN VALUE
13537 NONE
13538
13539===========================================================================*/
13540VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13541 tSirTriggerBatchScanResultInd *pReq)
13542{
13543 WDI_Status wdiStatus;
13544 WDI_TriggerBatchScanResultIndType wdiReq;
13545
13546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13547 "------> %s " ,__func__);
13548
13549 wdiReq.param = pReq->param;
13550
13551 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13552
13553 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13554 {
13555 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13556 "Trigger batch scan result ind failed %s:%d",
13557 __func__, wdiStatus);
13558 }
13559
13560 vos_mem_free(pReq);
13561
13562 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13563}
13564
13565/*==========================================================================
13566 FUNCTION WDA_SetBatchScanRespCallback
13567
13568 DESCRIPTION
13569 API to process set batch scan response from FW
13570
13571 PARAMETERS
13572 pRsp: Pointer to set batch scan response
13573 pUserData: Pointer to user data
13574
13575 RETURN VALUE
13576 NONE
13577
13578===========================================================================*/
13579void WDA_SetBatchScanRespCallback
13580(
13581 WDI_SetBatchScanRspType *pRsp,
13582 void* pUserData
13583)
13584{
13585 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13586 tpAniSirGlobal pMac;
13587 void *pCallbackContext;
13588 tWDA_CbContext *pWDA = NULL ;
13589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13590
13591
13592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13593 "<------ %s " ,__func__);
13594 if (NULL == pWdaParams)
13595 {
13596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13597 "%s: pWdaParams received NULL", __func__);
13598 VOS_ASSERT(0) ;
13599 return ;
13600 }
13601
13602 /*extract WDA context*/
13603 pWDA = pWdaParams->pWdaContext;
13604 if (NULL == pWDA)
13605 {
13606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13607 "%s:pWDA is NULL can't invole HDD callback",
13608 __func__);
13609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13610 vos_mem_free(pWdaParams->wdaMsgParam);
13611 vos_mem_free(pWdaParams);
13612 VOS_ASSERT(0);
13613 return;
13614 }
13615
13616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13617 vos_mem_free(pWdaParams->wdaMsgParam);
13618 vos_mem_free(pWdaParams);
13619
13620 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13621 if (NULL == pMac)
13622 {
13623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13624 "%s:pMac is NULL", __func__);
13625 VOS_ASSERT(0);
13626 return;
13627 }
13628
13629 pHddSetBatchScanRsp =
13630 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13631 if (NULL == pHddSetBatchScanRsp)
13632 {
13633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13634 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13635 VOS_ASSERT(0);
13636 return;
13637 }
13638
13639 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13640
13641 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13642 /*call hdd callback with set batch scan response data*/
13643 if(pMac->pmc.setBatchScanReqCallback)
13644 {
13645 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13646 }
13647 else
13648 {
13649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13650 "%s:HDD callback is null", __func__);
13651 VOS_ASSERT(0);
13652 }
13653
13654 vos_mem_free(pHddSetBatchScanRsp);
13655 return ;
13656}
13657
13658/*==========================================================================
13659 FUNCTION WDA_ProcessSetBatchScanReq
13660
13661 DESCRIPTION
13662 API to send set batch scan request to WDI
13663
13664 PARAMETERS
13665 pWDA: Pointer to WDA context
13666 pSetBatchScanReq: Pointer to set batch scan req
13667
13668 RETURN VALUE
13669 NONE
13670
13671===========================================================================*/
13672VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13673 tSirSetBatchScanReq *pSetBatchScanReq)
13674{
13675 WDI_Status status;
13676 tWDA_ReqParams *pWdaParams ;
13677 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13678
13679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13680 "------> %s " ,__func__);
13681
13682 pWdiSetBatchScanReq =
13683 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13684 if (NULL == pWdiSetBatchScanReq)
13685 {
13686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13687 "%s: VOS MEM Alloc Failure", __func__);
13688 vos_mem_free(pSetBatchScanReq);
13689 VOS_ASSERT(0);
13690 return VOS_STATUS_E_NOMEM;
13691 }
13692
13693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13694 if (NULL == pWdaParams)
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13697 "%s: VOS MEM Alloc Failure", __func__);
13698 VOS_ASSERT(0);
13699 vos_mem_free(pSetBatchScanReq);
13700 vos_mem_free(pWdiSetBatchScanReq);
13701 return VOS_STATUS_E_NOMEM;
13702 }
13703
13704 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13705 pWdiSetBatchScanReq->numberOfScansToBatch =
13706 pSetBatchScanReq->numberOfScansToBatch;
13707 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13708 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13709 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13710
13711 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13712 pWdaParams->pWdaContext = pWDA;
13713 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13714
13715 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13716 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13717 if (IS_WDI_STATUS_FAILURE(status))
13718 {
13719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13720 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13722 vos_mem_free(pWdaParams->wdaMsgParam);
13723 vos_mem_free(pWdaParams);
13724 }
13725 return CONVERT_WDI2VOS_STATUS(status);
13726}
13727
13728#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013729/*
13730 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13731 *
13732 * DESCRIPTION: This function sends start/update OBSS scan
13733 * inidcation message to WDI
13734 *
13735 * PARAM:
13736 * pWDA: pointer to WDA context
13737 * pReq: pointer to start OBSS scan request
13738 */
13739VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13740 tSirHT40OBSSScanInd *pReq)
13741{
13742 WDI_Status status;
13743 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13744 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013745
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13747 "------> %s " ,__func__);
13748 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13749 wdiOBSSScanParams.pUserData = pWDA;
13750
13751 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13752 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13753 pWdiOBSSScanInd->scanType = pReq->scanType;
13754 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13755 pReq->OBSSScanActiveDwellTime;
13756 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13757 pReq->OBSSScanPassiveDwellTime;
13758 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13759 pReq->BSSChannelWidthTriggerScanInterval;
13760 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13761 pReq->BSSWidthChannelTransitionDelayFactor;
13762 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13763 pReq->OBSSScanActiveTotalPerChannel;
13764 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13765 pReq->OBSSScanPassiveTotalPerChannel;
13766 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13767 pReq->OBSSScanActivityThreshold;
13768 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13769 vos_mem_copy(pWdiOBSSScanInd->channels,
13770 pReq->channels,
13771 pReq->channelCount);
13772 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13773 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13774 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13775 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13776 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13777
13778 vos_mem_copy(pWdiOBSSScanInd->ieField,
13779 pReq->ieField,
13780 pReq->ieFieldLen);
13781
13782 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13783 if (WDI_STATUS_PENDING == status)
13784 {
13785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13786 "Pending received for %s:%d ",__func__,__LINE__ );
13787 }
13788 else if (WDI_STATUS_SUCCESS_SYNC != status)
13789 {
13790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13791 "Failure in %s:%d ",__func__,__LINE__ );
13792 }
13793 return CONVERT_WDI2VOS_STATUS(status) ;
13794}
13795/*
13796 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13797 *
13798 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13799 *
13800 * PARAM:
13801 * pWDA: pointer to WDA context
13802 * pReq: pointer to stop batch scan request
13803 */
13804VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13805 tANI_U8 *bssIdx)
13806{
13807 WDI_Status status;
13808
13809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13810 "------> %s " ,__func__);
13811
13812 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13813 if (WDI_STATUS_PENDING == status)
13814 {
13815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13816 "Pending received for %s:%d ",__func__,__LINE__ );
13817 }
13818 else if (WDI_STATUS_SUCCESS_SYNC != status)
13819 {
13820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13821 "Failure in %s:%d ",__func__,__LINE__ );
13822 }
13823 return CONVERT_WDI2VOS_STATUS(status) ;
13824}
Yue Mab9c86f42013-08-14 15:59:08 -070013825/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013826 * FUNCTION: WDA_ProcessRateUpdateInd
13827 *
13828 */
13829VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13830 tSirRateUpdateInd *pRateUpdateParams)
13831{
13832 WDI_Status wdiStatus;
13833 WDI_RateUpdateIndParams rateUpdateParams;
13834
13835 vos_mem_copy(rateUpdateParams.bssid,
13836 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13837
13838 rateUpdateParams.ucastDataRateTxFlag =
13839 pRateUpdateParams->ucastDataRateTxFlag;
13840 rateUpdateParams.reliableMcastDataRateTxFlag =
13841 pRateUpdateParams->reliableMcastDataRateTxFlag;
13842 rateUpdateParams.mcastDataRate24GHzTxFlag =
13843 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13844 rateUpdateParams.mcastDataRate5GHzTxFlag =
13845 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13846
13847 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13848 rateUpdateParams.reliableMcastDataRate =
13849 pRateUpdateParams->reliableMcastDataRate;
13850 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13851 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13852
13853 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13854 rateUpdateParams.pUserData = pWDA;
13855
13856 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13857
13858 if (WDI_STATUS_PENDING == wdiStatus)
13859 {
13860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13861 "Pending received for %s:%d", __func__, __LINE__ );
13862 }
13863 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13864 {
13865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13866 "Failure in %s:%d", __func__, __LINE__ );
13867 }
13868
13869 vos_mem_free(pRateUpdateParams);
13870
13871 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13872}
13873
13874/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 * -------------------------------------------------------------------------
13876 * DATA interface with WDI for Mgmt Frames
13877 * -------------------------------------------------------------------------
13878 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013879/*
13880 * FUNCTION: WDA_TxComplete
13881 * Callback function for the WDA_TxPacket
13882 */
13883VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13884 VOS_STATUS status )
13885{
13886
13887 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13888 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Anjaneedevi Kapparapuf4883a72015-11-12 18:18:35 +053013889 tANI_U64 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013890
Mihir Shete63341222015-03-24 15:39:18 +053013891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13892
Jeff Johnson295189b2012-06-20 16:38:30 -070013893 if(NULL == wdaContext)
13894 {
13895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13896 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013897 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013898 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013899 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013900 return VOS_STATUS_E_FAILURE;
13901 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013902
13903 /*Check if frame was timed out or not*/
13904 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13905 (v_PVOID_t)&uUserData);
13906
13907 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13908 {
13909 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13911 "%s: MGMT Frame Tx timed out",
13912 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013913 vos_pkt_return_packet(pData);
13914 return VOS_STATUS_SUCCESS;
13915 }
13916
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13918 if( NULL!=wdaContext->pTxCbFunc)
13919 {
13920 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013921 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013922 {
13923 wdaContext->pTxCbFunc(pMac, pData);
13924 }
13925 else
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013928 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013929 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 //Return from here since we reaching here because the packet already timeout
13931 return status;
13932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 }
13934
13935 /*
13936 * Trigger the event to bring the HAL TL Tx complete function to come
13937 * out of wait
13938 * Let the coe above to complete the packet first. When this event is set,
13939 * the thread waiting for the event may run and set Vospacket_freed causing the original
13940 * packet not being freed.
13941 */
13942 status = vos_event_set(&wdaContext->txFrameEvent);
13943 if(!VOS_IS_STATUS_SUCCESS(status))
13944 {
13945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013946 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 return status;
13949}
Jeff Johnson295189b2012-06-20 16:38:30 -070013950/*
13951 * FUNCTION: WDA_TxPacket
13952 * Forward TX management frame to WDI
13953 */
13954VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13955 void *pFrmBuf,
13956 tANI_U16 frmLen,
13957 eFrameType frmType,
13958 eFrameTxDir txDir,
13959 tANI_U8 tid,
13960 pWDATxRxCompFunc pCompFunc,
13961 void *pData,
13962 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013963 tANI_U32 txFlag,
13964 tANI_U32 txBdToken
13965 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013966{
13967 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13968 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13969 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13970 tANI_U8 eventIdx = 0;
13971 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13972 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013973 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053013974 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013975
Jeff Johnson295189b2012-06-20 16:38:30 -070013976 if((NULL == pWDA)||(NULL == pFrmBuf))
13977 {
13978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013979 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013980 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 VOS_ASSERT(0);
13982 return VOS_STATUS_E_FAILURE;
13983 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013984
Jeff Johnson295189b2012-06-20 16:38:30 -070013985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013986 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13987 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013988 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13989 if(NULL == pMac)
13990 {
13991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013992 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 VOS_ASSERT(0);
13994 return VOS_STATUS_E_FAILURE;
13995 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013996
Jeff Johnson295189b2012-06-20 16:38:30 -070013997 /* store the call back function in WDA context */
13998 pWDA->pTxCbFunc = pCompFunc;
13999 /* store the call back for the function of ackTxComplete */
14000 if( pAckTxComp )
14001 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014002 if( NULL != pWDA->pAckTxCbFunc )
14003 {
14004 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014006 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014007 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014008 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014009
Jeff Johnsone7245742012-09-05 17:12:55 -070014010 if( VOS_STATUS_SUCCESS !=
14011 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14012 {
14013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14014 "Tx Complete timeout Timer Stop Failed ");
14015 }
14016 else
14017 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014019 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014020 }
14021 }
14022
14023 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14024 pWDA->pAckTxCbFunc = pAckTxComp;
14025 if( VOS_STATUS_SUCCESS !=
14026 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14027 {
14028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14029 "Tx Complete Timer Start Failed ");
14030 pWDA->pAckTxCbFunc = NULL;
14031 return eHAL_STATUS_FAILURE;
14032 }
14033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014034 /* Reset the event to be not signalled */
14035 status = vos_event_reset(&pWDA->txFrameEvent);
14036 if(!VOS_IS_STATUS_SUCCESS(status))
14037 {
14038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014039 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14041 if( pAckTxComp )
14042 {
14043 pWDA->pAckTxCbFunc = NULL;
14044 if( VOS_STATUS_SUCCESS !=
14045 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14046 {
14047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14048 "Tx Complete timeout Timer Stop Failed ");
14049 }
14050 }
14051 return VOS_STATUS_E_FAILURE;
14052 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014053
14054 /* If Peer Sta mask is set don't overwrite to self sta */
14055 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014056 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014057 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014058 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014059 else
14060 {
Ganesh K08bce952012-12-13 15:04:41 -080014061 /* Get system role, use the self station if in unknown role or STA role */
14062 systemRole = wdaGetGlobalSystemRole(pMac);
14063 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14064 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014065#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014066 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014067#endif
Ganesh K08bce952012-12-13 15:04:41 -080014068 ))
14069 {
14070 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14071 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014072 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014073
Jeff Johnsone7245742012-09-05 17:12:55 -070014074 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14075 disassoc frame reaches the HW, HAL has already deleted the peer station */
14076 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014077 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014078 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014079 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014081 /*Send Probe request frames on self sta idx*/
14082 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 /* Since we donot want probe responses to be retried, send probe responses
14085 through the NO_ACK queues */
14086 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14087 {
14088 //probe response is sent out using self station and no retries options.
14089 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14090 }
14091 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14092 {
14093 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14094 }
14095 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014096#ifdef FEATURE_WLAN_TDLS
14097 /* TDLS Management frames are sent using Peer Sta mask */
14098 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14099 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14100 {
14101 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14102
14103 }
14104#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014105 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014106
14107 /*Set frame tag to 0
14108 We will use the WDA user data in order to tag a frame as expired*/
14109 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14110 (v_PVOID_t)0);
14111
14112
14113 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014114 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14115 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014116 {
14117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014118 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014119 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014120 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 -070014121 if( pAckTxComp )
14122 {
14123 pWDA->pAckTxCbFunc = NULL;
14124 if( VOS_STATUS_SUCCESS !=
14125 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14126 {
14127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14128 "Tx Complete timeout Timer Stop Failed ");
14129 }
14130 }
14131 return VOS_STATUS_E_FAILURE;
14132 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014133 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014134 /*
14135 * Wait for the event to be set by the TL, to get the response of TX
14136 * complete, this event should be set by the Callback function called by TL
14137 */
14138 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14139 &eventIdx);
14140 if(!VOS_IS_STATUS_SUCCESS(status))
14141 {
14142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14143 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014144 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014145
14146 /*Tag Frame as timed out for later deletion*/
14147 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14148 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14150 after the packet gets completed(packet freed once)*/
14151
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014152 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014153 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014154
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 /* check whether the packet was freed already,so need not free again when
14156 * TL calls the WDA_Txcomplete routine
14157 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014158 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14159 /*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 -070014160 {
14161 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014162 } */
Abhishek Singh849366d2015-11-26 16:53:47 +053014163
14164 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14165
Abhishek Singh837adf22015-10-01 17:37:37 +053014166 if (vos_isFatalEventEnabled())
14167 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14168 WLAN_LOG_INDICATOR_HOST_DRIVER,
14169 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14170 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014171
Jeff Johnson295189b2012-06-20 16:38:30 -070014172 if( pAckTxComp )
14173 {
14174 pWDA->pAckTxCbFunc = NULL;
14175 if( VOS_STATUS_SUCCESS !=
14176 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14177 {
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14179 "Tx Complete timeout Timer Stop Failed ");
14180 }
14181 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014182 pWDA->mgmtTxfailureCnt++;
14183
14184 /* SSR if timeout continously for
14185 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14186 */
14187 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14188 pWDA->mgmtTxfailureCnt)
14189 {
14190 vos_wlanRestart();
14191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014192 status = VOS_STATUS_E_FAILURE;
14193 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014194
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014195#ifdef WLAN_DUMP_MGMTFRAMES
14196 if (VOS_IS_STATUS_SUCCESS(status))
14197 {
14198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14199 "%s() TX packet : SubType %d", __func__,pFc->subType);
14200 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14201 pData, frmLen);
14202 }
14203#endif
14204
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014205 if (VOS_IS_STATUS_SUCCESS(status))
14206 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014207 pWDA->mgmtTxfailureCnt = 0;
14208 if ((vos_timer_get_system_time() - time_snapshot) >=
14209 WDA_TX_TIME_THRESHOLD)
14210 {
14211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14212 "Tx Complete took %lu ms",
14213 vos_timer_get_system_time() - time_snapshot);
14214 }
14215
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014216 if (pMac->fEnableDebugLog & 0x1)
14217 {
14218 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14219 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14220 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14221 {
14222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14223 pFc->type, pFc->subType);
14224 }
14225 }
14226 }
14227
14228
Jeff Johnson295189b2012-06-20 16:38:30 -070014229 return status;
14230}
Jeff Johnson295189b2012-06-20 16:38:30 -070014231/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014232 * FUNCTION: WDA_ProcessDHCPStartInd
14233 * Forward DHCP Start to WDI
14234 */
14235static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14236 tAniDHCPInd *dhcpStartInd)
14237{
14238 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014239 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014240
c_hpothu0b0cab72014-02-13 21:52:40 +053014241 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14242 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014243 sizeof(tSirMacAddr));
14244
c_hpothu0b0cab72014-02-13 21:52:40 +053014245 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014246
c_hpothu0b0cab72014-02-13 21:52:40 +053014247 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014248 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14250 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014251 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014252 else if (WDI_STATUS_SUCCESS_SYNC != status)
14253 {
14254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14255 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14256 }
14257
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014258 vos_mem_free(dhcpStartInd);
14259 return CONVERT_WDI2VOS_STATUS(status) ;
14260}
14261
14262 /*
14263 * FUNCTION: WDA_ProcessDHCPStopInd
14264 * Forward DHCP Stop to WDI
14265 */
14266 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14267 tAniDHCPInd *dhcpStopInd)
14268 {
14269 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014270 WDI_DHCPInd wdiDHCPInd;
14271
14272 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14273 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14274
14275 status = WDI_dhcpStopInd(&wdiDHCPInd);
14276
14277 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014278 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14280 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014281 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014282 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014283 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014286 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014287
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014288 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014289
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014290 return CONVERT_WDI2VOS_STATUS(status) ;
14291 }
14292
14293/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014294 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14295 *
14296 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14297 *
14298 * PARAM:
14299 * pWDA: pointer to WDA context
14300 * pReq: pointer to stop batch scan request
14301 */
14302VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14303 tpSpoofMacAddrReqParams pReq)
14304{
14305 WDI_Status wdiStatus;
14306 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14307 tWDA_ReqParams *pWdaParams;
14308
14309 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14310 sizeof(WDI_SpoofMacAddrInfoType));
14311 if(NULL == WDI_SpoofMacAddrInfoParams) {
14312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14313 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14314 VOS_ASSERT(0);
14315 return VOS_STATUS_E_NOMEM;
14316 }
14317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14318 if(NULL == pWdaParams) {
14319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14320 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014321 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014322 VOS_ASSERT(0);
14323 return VOS_STATUS_E_NOMEM;
14324 }
14325
14326 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14327 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14328
14329 pWdaParams->pWdaContext = pWDA;
14330 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014331 pWdaParams->wdaMsgParam = (void *)pReq;
14332
14333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14334 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14335
Siddharth Bhal171788a2014-09-29 21:02:40 +053014336 /* store Params pass it to WDI */
14337 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14338
14339 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014340 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14341 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014342
14343 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14344 {
14345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14346 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14348 vos_mem_free(pWdaParams->wdaMsgParam);
14349 vos_mem_free(pWdaParams);
14350 }
14351
14352 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14353}
14354
c_manjeecfd1efb2015-09-25 19:32:34 +053014355
14356/*
14357 * FUNCTION: WDA_FwrMemDumpRespCallback
14358 * recieves Mgmt Logging init response from FW
14359 */
14360 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14361 void* pUserData)
14362{
14363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14364 tAniFwrDumpReq *pFwrMemDumpReq;
14365 tAniFwrDumpRsp *pFwrMemDumpRsp;
14366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14367 "<------ %s " ,__func__);
14368
14369 if(NULL == pWdaParams)
14370 {
14371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14372 "%s: pWdaParams received NULL", __func__);
14373 VOS_ASSERT(0);
14374 return ;
14375 }
14376
14377 if(NULL == pWdaParams->wdaMsgParam)
14378 {
14379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14380 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14381 VOS_ASSERT(0);
14382 vos_mem_free(pWdaParams);
14383 return ;
14384 }
14385
14386 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14387 if(pFwrMemDumpRsp == NULL)
14388 {
14389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14390 "%s: pFwrMemDumpRsp is NULL", __func__);
14391 VOS_ASSERT(0);
14392 vos_mem_free(pWdaParams);
14393 return ;
14394 }
14395
14396 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14397 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14398
14399 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14400 {
14401 pFwrMemDumpReq->fwMemDumpReqCallback(
14402 pFwrMemDumpReq->fwMemDumpReqContext,
14403 pFwrMemDumpRsp);
14404 }
14405 else
14406 {
14407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14408 "%s: FwrMemDump callback is NULL", __func__);
14409 }
14410
14411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14412 vos_mem_free(pWdaParams->wdaMsgParam);
14413 vos_mem_free(pWdaParams);
14414 vos_mem_free(pFwrMemDumpRsp);
14415
14416 return ;
14417}
14418
14419VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14420 tAniFwrDumpReq* pFwrMemDumpReq)
14421{
14422 VOS_STATUS status = VOS_STATUS_SUCCESS;
14423 WDI_Status wstatus;
14424 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14425 tWDA_ReqParams *pWdaParams ;
14426
14427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14428 "------> %s " ,__func__);
14429 /* Sanity Check*/
14430 if(NULL == pFwrMemDumpReq)
14431 {
14432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14433 "%s: pFwrMemDumpReq received NULL", __func__);
14434 VOS_ASSERT(0) ;
14435 return VOS_STATUS_E_FAULT;
14436 }
14437
14438 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14439 if(NULL == pWdiFwrMemDumpReq)
14440 {
14441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14442 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14443 VOS_ASSERT(0);
14444 return VOS_STATUS_E_NOMEM;
14445 }
14446
14447 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14448 if(NULL == pWdaParams)
14449 {
14450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14451 "%s: pWdaParams Alloc Failure", __func__);
14452 VOS_ASSERT(0);
14453 vos_mem_free(pWdiFwrMemDumpReq);
14454 return VOS_STATUS_E_NOMEM;
14455 }
14456
14457 /* Store Params pass it to WDI */
14458 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14459 pWdaParams->pWdaContext = pWDA;
14460 /* Store param pointer as passed in by caller */
14461 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14462
14463 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14464 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14465 pWdaParams);
14466
14467 if(IS_WDI_STATUS_FAILURE(wstatus))
14468 {
14469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14470 FL("Fwr Mem Dump Req failed, free all the memory"));
14471 status = CONVERT_WDI2VOS_STATUS(wstatus);
14472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14473 vos_mem_free(pWdaParams->wdaMsgParam);
14474 vos_mem_free(pWdaParams);
14475 pWdaParams->wdaWdiApiMsgParam = NULL;
14476 pWdaParams->wdaMsgParam = NULL;
14477 }
14478
14479 return status;
14480
14481}
14482
14483
14484
Siddharth Bhal171788a2014-09-29 21:02:40 +053014485/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014486 * FUNCTION: WDA_McProcessMsg
14487 * Trigger DAL-AL to start CFG download
14488 */
14489VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14490{
14491 VOS_STATUS status = VOS_STATUS_SUCCESS;
14492 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014493 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014494 {
14495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014496 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014497 VOS_ASSERT(0);
14498 return VOS_STATUS_E_FAILURE;
14499 }
14500
14501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014502 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070014503
14504 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
14505 if(NULL == pWDA )
14506 {
14507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014508 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070014510 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014511 return VOS_STATUS_E_FAILURE;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 /* Process all the WDA messages.. */
14514 switch( pMsg->type )
14515 {
14516 case WNI_CFG_DNLD_REQ:
14517 {
14518 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070014519 /* call WDA complete event if config download success */
14520 if( VOS_IS_STATUS_SUCCESS(status) )
14521 {
14522 vos_WDAComplete_cback(pVosContext);
14523 }
14524 else
14525 {
14526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14527 "WDA Config Download failure" );
14528 }
14529 break ;
14530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 /*
14532 * Init SCAN request from PE, convert it into DAL format
14533 * and send it to DAL
14534 */
14535 case WDA_INIT_SCAN_REQ:
14536 {
14537 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
14538 break ;
14539 }
14540 /* start SCAN request from PE */
14541 case WDA_START_SCAN_REQ:
14542 {
14543 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
14544 break ;
14545 }
14546 /* end SCAN request from PE */
14547 case WDA_END_SCAN_REQ:
14548 {
14549 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
14550 break ;
14551 }
14552 /* end SCAN request from PE */
14553 case WDA_FINISH_SCAN_REQ:
14554 {
14555 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
14556 break ;
14557 }
14558 /* join request from PE */
14559 case WDA_CHNL_SWITCH_REQ:
14560 {
14561 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
14562 {
14563 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
14564 }
14565 else
14566 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080014567 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
14568 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
14569 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
14570 {
14571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14572 "call ProcessChannelSwitchReq_V1" );
14573 WDA_ProcessChannelSwitchReq_V1(pWDA,
14574 (tSwitchChannelParams*)pMsg->bodyptr) ;
14575 }
14576 else
14577 {
14578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14579 "call ProcessChannelSwitchReq" );
14580 WDA_ProcessChannelSwitchReq(pWDA,
14581 (tSwitchChannelParams*)pMsg->bodyptr) ;
14582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 }
14584 break ;
14585 }
14586 /* ADD BSS request from PE */
14587 case WDA_ADD_BSS_REQ:
14588 {
14589 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
14590 break ;
14591 }
14592 case WDA_ADD_STA_REQ:
14593 {
14594 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
14595 break ;
14596 }
14597 case WDA_DELETE_BSS_REQ:
14598 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
14600 break ;
14601 }
14602 case WDA_DELETE_STA_REQ:
14603 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014604 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
14605 break ;
14606 }
14607 case WDA_CONFIG_PARAM_UPDATE_REQ:
14608 {
14609 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
14610 break ;
14611 }
14612 case WDA_SET_BSSKEY_REQ:
14613 {
14614 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
14615 break ;
14616 }
14617 case WDA_SET_STAKEY_REQ:
14618 {
14619 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14620 break ;
14621 }
14622 case WDA_SET_STA_BCASTKEY_REQ:
14623 {
14624 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14625 break ;
14626 }
14627 case WDA_REMOVE_BSSKEY_REQ:
14628 {
14629 WDA_ProcessRemoveBssKeyReq(pWDA,
14630 (tRemoveBssKeyParams *)pMsg->bodyptr);
14631 break ;
14632 }
14633 case WDA_REMOVE_STAKEY_REQ:
14634 {
14635 WDA_ProcessRemoveStaKeyReq(pWDA,
14636 (tRemoveStaKeyParams *)pMsg->bodyptr);
14637 break ;
14638 }
14639 case WDA_REMOVE_STA_BCASTKEY_REQ:
14640 {
14641 /* TODO: currently UMAC is not sending this request, Add the code for
14642 handling this request when UMAC supports */
14643 break;
14644 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014645#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 case WDA_TSM_STATS_REQ:
14647 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070014648 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014649 break;
14650 }
14651#endif
14652 case WDA_UPDATE_EDCA_PROFILE_IND:
14653 {
14654 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
14655 break;
14656 }
14657 case WDA_ADD_TS_REQ:
14658 {
14659 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
14660 break;
14661 }
14662 case WDA_DEL_TS_REQ:
14663 {
14664 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
14665 break;
14666 }
14667 case WDA_ADDBA_REQ:
14668 {
14669 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
14670 break;
14671 }
14672 case WDA_DELBA_IND:
14673 {
14674 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
14675 break;
14676 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080014677 case WDA_UPDATE_CHAN_LIST_REQ:
14678 {
14679 WDA_ProcessUpdateChannelList(pWDA,
14680 (tSirUpdateChanList *)pMsg->bodyptr);
14681 break;
14682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014683 case WDA_SET_LINK_STATE:
14684 {
14685 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
14686 break;
14687 }
14688 case WDA_GET_STATISTICS_REQ:
14689 {
14690 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
14691 break;
14692 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014693#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080014694 case WDA_GET_ROAM_RSSI_REQ:
14695 {
14696 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
14697 break;
14698 }
14699#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 case WDA_PWR_SAVE_CFG:
14701 {
14702 if(pWDA->wdaState == WDA_READY_STATE)
14703 {
14704 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
14705 }
14706 else
14707 {
14708 if(NULL != pMsg->bodyptr)
14709 {
14710 vos_mem_free(pMsg->bodyptr);
14711 }
14712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14713 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
14714 }
14715 break;
14716 }
14717 case WDA_ENTER_IMPS_REQ:
14718 {
14719 if(pWDA->wdaState == WDA_READY_STATE)
14720 {
14721 WDA_ProcessEnterImpsReq(pWDA);
14722 }
14723 else
14724 {
14725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14726 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14727 }
14728 break;
14729 }
14730 case WDA_EXIT_IMPS_REQ:
14731 {
14732 if(pWDA->wdaState == WDA_READY_STATE)
14733 {
14734 WDA_ProcessExitImpsReq(pWDA);
14735 }
14736 else
14737 {
14738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14739 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14740 }
14741 break;
14742 }
14743 case WDA_ENTER_BMPS_REQ:
14744 {
14745 if(pWDA->wdaState == WDA_READY_STATE)
14746 {
14747 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
14748 }
14749 else
14750 {
14751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14752 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14753 }
14754 break;
14755 }
14756 case WDA_EXIT_BMPS_REQ:
14757 {
14758 if(pWDA->wdaState == WDA_READY_STATE)
14759 {
14760 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
14761 }
14762 else
14763 {
14764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14765 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14766 }
14767 break;
14768 }
14769 case WDA_ENTER_UAPSD_REQ:
14770 {
14771 if(pWDA->wdaState == WDA_READY_STATE)
14772 {
14773 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
14774 }
14775 else
14776 {
14777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14778 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14779 }
14780 break;
14781 }
14782 case WDA_EXIT_UAPSD_REQ:
14783 {
14784 if(pWDA->wdaState == WDA_READY_STATE)
14785 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014786 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014787 }
14788 else
14789 {
14790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14791 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14792 }
14793 break;
14794 }
14795 case WDA_UPDATE_UAPSD_IND:
14796 {
14797 if(pWDA->wdaState == WDA_READY_STATE)
14798 {
14799 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14800 }
14801 else
14802 {
14803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14804 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14805 }
14806 break;
14807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014808 case WDA_REGISTER_PE_CALLBACK :
14809 {
14810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14811 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14812 /*TODO: store the PE callback */
14813 /* Do Nothing? MSG Body should be freed at here */
14814 if(NULL != pMsg->bodyptr)
14815 {
14816 vos_mem_free(pMsg->bodyptr);
14817 }
14818 break;
14819 }
14820 case WDA_SYS_READY_IND :
14821 {
14822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14823 "Handling msg type WDA_SYS_READY_IND " );
14824 pWDA->wdaState = WDA_READY_STATE;
14825 if(NULL != pMsg->bodyptr)
14826 {
14827 vos_mem_free(pMsg->bodyptr);
14828 }
14829 break;
14830 }
14831 case WDA_BEACON_FILTER_IND :
14832 {
14833 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14834 break;
14835 }
14836 case WDA_BTC_SET_CFG:
14837 {
14838 /*TODO: handle this while dealing with BTC */
14839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14840 "Handling msg type WDA_BTC_SET_CFG " );
14841 /* Do Nothing? MSG Body should be freed at here */
14842 if(NULL != pMsg->bodyptr)
14843 {
14844 vos_mem_free(pMsg->bodyptr);
14845 }
14846 break;
14847 }
14848 case WDA_SIGNAL_BT_EVENT:
14849 {
14850 /*TODO: handle this while dealing with BTC */
14851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14852 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14853 /* Do Nothing? MSG Body should be freed at here */
14854 if(NULL != pMsg->bodyptr)
14855 {
14856 vos_mem_free(pMsg->bodyptr);
14857 }
14858 break;
14859 }
14860 case WDA_CFG_RXP_FILTER_REQ:
14861 {
14862 WDA_ProcessConfigureRxpFilterReq(pWDA,
14863 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14864 break;
14865 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014866 case WDA_MGMT_LOGGING_INIT_REQ:
14867 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014868 WDA_ProcessFWLoggingInitReq(pWDA,
14869 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014870 break;
14871 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014872 case WDA_GET_FRAME_LOG_REQ:
14873 {
14874 WDA_ProcessGetFrameLogReq(pWDA,
14875 (tAniGetFrameLogReq *)pMsg->bodyptr);
14876 break;
14877 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053014878 case WDA_START_RSSI_MONITOR_REQ:
14879 {
14880 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14881 break;
14882 }
14883 case WDA_STOP_RSSI_MONITOR_REQ:
14884 {
14885 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14886 break;
14887 }
Karthick Sa35b0692015-08-21 15:57:05 +053014888 case WDA_SEND_LOG_DONE_IND:
14889 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014890 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014891 break;
14892 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014893 case WDA_FATAL_EVENT_LOGS_REQ:
14894 {
14895 WDA_ProcessFatalEventLogsReq(pWDA,
14896 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14897 break;
14898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 case WDA_SET_HOST_OFFLOAD:
14900 {
14901 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14902 break;
14903 }
14904 case WDA_SET_KEEP_ALIVE:
14905 {
14906 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14907 break;
14908 }
14909#ifdef WLAN_NS_OFFLOAD
14910 case WDA_SET_NS_OFFLOAD:
14911 {
14912 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14913 break;
14914 }
14915#endif //WLAN_NS_OFFLOAD
14916 case WDA_ADD_STA_SELF_REQ:
14917 {
14918 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14919 break;
14920 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014921 case WDA_DEL_STA_SELF_REQ:
14922 {
14923 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14924 break;
14925 }
14926 case WDA_WOWL_ADD_BCAST_PTRN:
14927 {
14928 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14929 break;
14930 }
14931 case WDA_WOWL_DEL_BCAST_PTRN:
14932 {
14933 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14934 break;
14935 }
14936 case WDA_WOWL_ENTER_REQ:
14937 {
14938 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14939 break;
14940 }
14941 case WDA_WOWL_EXIT_REQ:
14942 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014943 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014944 break;
14945 }
14946 case WDA_TL_FLUSH_AC_REQ:
14947 {
14948 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14949 break;
14950 }
14951 case WDA_SIGNAL_BTAMP_EVENT:
14952 {
14953 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14954 break;
14955 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014956 case WDA_FW_STATS_GET_REQ:
14957 {
14958 WDA_ProcessFWStatsGetReq(pWDA,
14959 (tSirFWStatsGetReq *)pMsg->bodyptr);
14960 break;
14961 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014962#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14963 case WDA_LINK_LAYER_STATS_SET_REQ:
14964 {
14965 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14966 break;
14967 }
14968 case WDA_LINK_LAYER_STATS_GET_REQ:
14969 {
14970 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14971 break;
14972 }
14973 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14974 {
14975 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14976 break;
14977 }
14978#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014979#ifdef WLAN_FEATURE_EXTSCAN
14980 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14981 {
14982 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14983 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14984 break;
14985 }
14986 case WDA_EXTSCAN_START_REQ:
14987 {
14988 WDA_ProcessEXTScanStartReq(pWDA,
14989 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14990 break;
14991 }
14992 case WDA_EXTSCAN_STOP_REQ:
14993 {
14994 WDA_ProcessEXTScanStopReq(pWDA,
14995 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14996 break;
14997 }
14998 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14999 {
15000 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15001 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15002 break;
15003 }
15004 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15005 {
15006 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15007 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15008 break;
15009 }
15010 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15011 {
15012 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15013 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15014 break;
15015 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015016 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15017 {
15018 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15019 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15020 break;
15021 }
15022 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15023 {
15024 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15025 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15026 break;
15027 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015028 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15029 {
15030 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15031 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15032 break;
15033 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015034#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015035#ifdef WDA_UT
15036 case WDA_WDI_EVENT_MSG:
15037 {
15038 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15039 break ;
15040 }
15041#endif
15042 case WDA_UPDATE_BEACON_IND:
15043 {
15044 WDA_ProcessUpdateBeaconParams(pWDA,
15045 (tUpdateBeaconParams *)pMsg->bodyptr);
15046 break;
15047 }
15048 case WDA_SEND_BEACON_REQ:
15049 {
15050 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15051 break;
15052 }
15053 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15054 {
15055 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15056 (tSendProbeRespParams *)pMsg->bodyptr);
15057 break;
15058 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015059#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015060 case WDA_SET_MAX_TX_POWER_REQ:
15061 {
15062 WDA_ProcessSetMaxTxPowerReq(pWDA,
15063 (tMaxTxPowerParams *)pMsg->bodyptr);
15064 break;
15065 }
15066#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015067 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15068 {
15069 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15070 pMsg->bodyptr);
15071 break;
15072 }
schang86c22c42013-03-13 18:41:24 -070015073 case WDA_SET_TX_POWER_REQ:
15074 {
15075 WDA_ProcessSetTxPowerReq(pWDA,
15076 (tSirSetTxPowerReq *)pMsg->bodyptr);
15077 break;
15078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 case WDA_SET_P2P_GO_NOA_REQ:
15080 {
15081 WDA_ProcessSetP2PGONOAReq(pWDA,
15082 (tP2pPsParams *)pMsg->bodyptr);
15083 break;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 /* timer related messages */
15086 case WDA_TIMER_BA_ACTIVITY_REQ:
15087 {
15088 WDA_BaCheckActivity(pWDA) ;
15089 break ;
15090 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015091
15092 /* timer related messages */
15093 case WDA_TIMER_TRAFFIC_STATS_IND:
15094 {
15095 WDA_TimerTrafficStatsInd(pWDA);
15096 break;
15097 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015098#ifdef WLAN_FEATURE_VOWIFI_11R
15099 case WDA_AGGR_QOS_REQ:
15100 {
15101 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15102 break;
15103 }
15104#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 case WDA_FTM_CMD_REQ:
15106 {
15107 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15108 break ;
15109 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015110#ifdef FEATURE_OEM_DATA_SUPPORT
15111 case WDA_START_OEM_DATA_REQ:
15112 {
15113 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15114 break;
15115 }
15116#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015117 /* Tx Complete Time out Indication */
15118 case WDA_TX_COMPLETE_TIMEOUT_IND:
15119 {
15120 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15121 break;
15122 }
15123 case WDA_WLAN_SUSPEND_IND:
15124 {
15125 WDA_ProcessWlanSuspendInd(pWDA,
15126 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15127 break;
15128 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015129 case WDA_WLAN_RESUME_REQ:
15130 {
15131 WDA_ProcessWlanResumeReq(pWDA,
15132 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15133 break;
15134 }
15135
15136 case WDA_UPDATE_CF_IND:
15137 {
15138 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15139 pMsg->bodyptr = NULL;
15140 break;
15141 }
15142#ifdef FEATURE_WLAN_SCAN_PNO
15143 case WDA_SET_PNO_REQ:
15144 {
15145 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15146 break;
15147 }
15148 case WDA_UPDATE_SCAN_PARAMS_REQ:
15149 {
15150 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15151 break;
15152 }
15153 case WDA_SET_RSSI_FILTER_REQ:
15154 {
15155 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15156 break;
15157 }
15158#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015159#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015160 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015161 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015162 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015163 break;
15164 }
15165#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015166 case WDA_SET_TX_PER_TRACKING_REQ:
15167 {
15168 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15169 break;
15170 }
15171
15172#ifdef WLAN_FEATURE_PACKET_FILTERING
15173 case WDA_8023_MULTICAST_LIST_REQ:
15174 {
15175 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15176 break;
15177 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015178 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15179 {
15180 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15181 break;
15182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15184 {
15185 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15186 break;
15187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015188 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15189 {
15190 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15191 break;
15192 }
15193#endif // WLAN_FEATURE_PACKET_FILTERING
15194
15195
15196 case WDA_TRANSMISSION_CONTROL_IND:
15197 {
15198 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15199 break;
15200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015201 case WDA_SET_POWER_PARAMS_REQ:
15202 {
15203 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15204 break;
15205 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015206 case WDA_FW_MEM_DUMP_REQ:
15207 {
15208 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15209 break;
15210 }
15211
Jeff Johnson295189b2012-06-20 16:38:30 -070015212#ifdef WLAN_FEATURE_GTK_OFFLOAD
15213 case WDA_GTK_OFFLOAD_REQ:
15214 {
15215 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15216 break;
15217 }
15218
15219 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15220 {
15221 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15222 break;
15223 }
15224#endif //WLAN_FEATURE_GTK_OFFLOAD
15225
15226 case WDA_SET_TM_LEVEL_REQ:
15227 {
15228 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15229 break;
15230 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015231
Mohit Khanna4a70d262012-09-11 16:30:12 -070015232 case WDA_UPDATE_OP_MODE:
15233 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015234 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15235 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15236 {
15237 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15238 }
15239 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015240 {
15241 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15242 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15243 else
15244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015245 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015246 }
15247 else
15248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015249 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015250 break;
15251 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015252#ifdef WLAN_FEATURE_11W
15253 case WDA_EXCLUDE_UNENCRYPTED_IND:
15254 {
15255 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15256 break;
15257 }
15258#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015259#ifdef FEATURE_WLAN_TDLS
15260 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15261 {
15262 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15263 break;
15264 }
15265#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015266 case WDA_DHCP_START_IND:
15267 {
15268 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15269 break;
15270 }
15271 case WDA_DHCP_STOP_IND:
15272 {
15273 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15274 break;
15275 }
Leo Chang9056f462013-08-01 19:21:11 -070015276#ifdef FEATURE_WLAN_LPHB
15277 case WDA_LPHB_CONF_REQ:
15278 {
15279 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15280 break;
15281 }
15282#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015283 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15284 {
15285 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15286 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15287 break;
15288 }
15289 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15290 {
15291 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15292 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15293 break;
15294 }
15295
Rajeev79dbe4c2013-10-05 11:03:42 +053015296#ifdef FEATURE_WLAN_BATCH_SCAN
15297 case WDA_SET_BATCH_SCAN_REQ:
15298 {
15299 WDA_ProcessSetBatchScanReq(pWDA,
15300 (tSirSetBatchScanReq *)pMsg->bodyptr);
15301 break;
15302 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070015303 case WDA_RATE_UPDATE_IND:
15304 {
15305 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15306 break;
15307 }
Rajeev79dbe4c2013-10-05 11:03:42 +053015308 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15309 {
15310 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15311 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15312 break;
15313 }
15314 case WDA_STOP_BATCH_SCAN_IND:
15315 {
15316 WDA_ProcessStopBatchScanInd(pWDA,
15317 (tSirStopBatchScanInd *)pMsg->bodyptr);
15318 break;
15319 }
c_hpothu92367912014-05-01 15:18:17 +053015320 case WDA_GET_BCN_MISS_RATE_REQ:
15321 WDA_ProcessGetBcnMissRateReq(pWDA,
15322 (tSirBcnMissRateReq *)pMsg->bodyptr);
15323 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015324#endif
15325
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015326 case WDA_HT40_OBSS_SCAN_IND:
15327 {
15328 WDA_ProcessHT40OBSSScanInd(pWDA,
15329 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15330 break;
15331 }
15332 case WDA_HT40_OBSS_STOP_SCAN_IND:
15333 {
15334 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15335 (tANI_U8*)pMsg->bodyptr);
15336 break;
15337 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015338// tdlsoffchan
15339#ifdef FEATURE_WLAN_TDLS
15340 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15341 {
15342 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15343 break;
15344 }
15345#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015346 case WDA_SPOOF_MAC_ADDR_REQ:
15347 {
15348 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15349 break;
15350 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015351 case WDA_ENCRYPT_MSG_REQ:
15352 {
15353 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15354 break;
15355 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015356
15357 case WDA_NAN_REQUEST:
15358 {
15359 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15360 break;
15361 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015362 case WDA_SET_RTS_CTS_HTVHT:
15363 {
15364 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15365 break;
15366 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015367
15368 case WDA_MON_START_REQ:
15369 {
15370 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15371 break;
15372 }
15373 case WDA_MON_STOP_REQ:
15374 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015375 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015376 break;
15377 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015378 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15379 {
15380 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15381 break;
15382 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015383 case WDA_WIFI_CONFIG_REQ:
15384 {
15385 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15386 break;
15387 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015388#ifdef FEATURE_OEM_DATA_SUPPORT
15389 case WDA_START_OEM_DATA_REQ_IND_NEW:
15390 {
15391 WDA_ProcessStartOemDataReqIndNew(pWDA,
15392 (tOemDataReqNewConfig *)pMsg->bodyptr);
15393 break;
15394 }
15395#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053015396 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
15397 {
15398 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
15399 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
15400 break;
15401 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053015402 case WDA_MODIFY_ROAM_PARAMS_IND:
15403 {
15404 WDA_ProcessBcnMissPenaltyCount(pWDA,
15405 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
15406 break;
15407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015408 default:
15409 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015411 "No Handling for msg type %x in WDA "
15412 ,pMsg->type);
15413 /* Do Nothing? MSG Body should be freed at here */
15414 if(NULL != pMsg->bodyptr)
15415 {
15416 vos_mem_free(pMsg->bodyptr);
15417 }
15418 //WDA_VOS_ASSERT(0) ;
15419 }
15420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015421 return status ;
15422}
15423
Jeff Johnson295189b2012-06-20 16:38:30 -070015424/*
15425 * FUNCTION: WDA_LowLevelIndCallback
15426 * IND API callback from WDI, send Ind to PE
15427 */
15428void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15429 void* pUserData )
15430{
15431 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15432#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15433 tSirRSSINotification rssiNotification;
15434#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015435 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015436 {
15437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015438 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015439 VOS_ASSERT(0);
15440 return ;
15441 }
15442
15443 switch(wdiLowLevelInd->wdiIndicationType)
15444 {
15445 case WDI_RSSI_NOTIFICATION_IND:
15446 {
15447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15448 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015449#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15450 rssiNotification.bReserved =
15451 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15452 rssiNotification.bRssiThres1NegCross =
15453 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15454 rssiNotification.bRssiThres1PosCross =
15455 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15456 rssiNotification.bRssiThres2NegCross =
15457 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15458 rssiNotification.bRssiThres2PosCross =
15459 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15460 rssiNotification.bRssiThres3NegCross =
15461 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15462 rssiNotification.bRssiThres3PosCross =
15463 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015464 rssiNotification.avgRssi = (v_S7_t)
15465 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015466 WLANTL_BMPSRSSIRegionChangedNotification(
15467 pWDA->pVosContext,
15468 &rssiNotification);
15469#endif
15470 break ;
15471 }
15472 case WDI_MISSED_BEACON_IND:
15473 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015474 tpSirSmeMissedBeaconInd pMissBeacInd =
15475 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15477 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015478 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015479 if(NULL == pMissBeacInd)
15480 {
15481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15482 "%s: VOS MEM Alloc Failure", __func__);
15483 break;
15484 }
15485 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
15486 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
15487 pMissBeacInd->bssIdx =
15488 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
15489 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015490 break ;
15491 }
15492 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
15493 {
15494 /* TODO: Decode Ind and send Ind to PE */
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15496 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
15497 break ;
15498 }
15499
15500 case WDI_MIC_FAILURE_IND:
15501 {
15502 tpSirSmeMicFailureInd pMicInd =
15503 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
15504
15505 if(NULL == pMicInd)
15506 {
15507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015509 break;
15510 }
15511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15512 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015513 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
15514 pMicInd->length = sizeof(tSirSmeMicFailureInd);
15515 vos_mem_copy(pMicInd->bssId,
15516 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
15517 sizeof(tSirMacAddr));
15518 vos_mem_copy(pMicInd->info.srcMacAddr,
15519 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
15520 sizeof(tSirMacAddr));
15521 vos_mem_copy(pMicInd->info.taMacAddr,
15522 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
15523 sizeof(tSirMacAddr));
15524 vos_mem_copy(pMicInd->info.dstMacAddr,
15525 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
15526 sizeof(tSirMacAddr));
15527 vos_mem_copy(pMicInd->info.rxMacAddr,
15528 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
15529 sizeof(tSirMacAddr));
15530 pMicInd->info.multicast =
15531 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
15532 pMicInd->info.keyId=
15533 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
15534 pMicInd->info.IV1=
15535 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
15536 vos_mem_copy(pMicInd->info.TSC,
15537 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
15539 (void *)pMicInd , 0) ;
15540 break ;
15541 }
15542 case WDI_FATAL_ERROR_IND:
15543 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070015544 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 /* TODO: Decode Ind and send Ind to PE */
15546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15547 "Received WDI_FATAL_ERROR_IND from WDI ");
15548 break ;
15549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015550 case WDI_DEL_STA_IND:
15551 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015552 tpDeleteStaContext pDelSTACtx =
15553 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
15554
15555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15556 "Received WDI_DEL_STA_IND from WDI ");
15557 if(NULL == pDelSTACtx)
15558 {
15559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 break;
15562 }
15563 vos_mem_copy(pDelSTACtx->addr2,
15564 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
15565 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015566 vos_mem_copy(pDelSTACtx->bssId,
15567 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
15568 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015569 pDelSTACtx->assocId =
15570 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
15571 pDelSTACtx->reasonCode =
15572 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
15573 pDelSTACtx->staId =
15574 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
15576 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015577 break ;
15578 }
15579 case WDI_COEX_IND:
15580 {
15581 tANI_U32 index;
15582 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053015583 tSirSmeCoexInd *pSmeCoexInd;
15584
15585 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
15586 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
15587 {
15588 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
15589 {
15590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15591 FL("Coex state: 0x%x coex feature: 0x%x"),
15592 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
15593 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
15594
15595 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
15596 {
15597 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
15598 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
15599 }
15600 }
15601 break;
15602 }
15603
15604 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 if(NULL == pSmeCoexInd)
15606 {
15607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015608 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015609 break;
15610 }
15611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15612 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 /* Message Header */
15614 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
15615 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 /* Info from WDI Indication */
15617 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
15618 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
15619 {
15620 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
15621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015622 /* VOS message wrapper */
15623 vosMsg.type = eWNI_SME_COEX_IND;
15624 vosMsg.bodyptr = (void *)pSmeCoexInd;
15625 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015626 /* Send message to SME */
15627 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15628 {
15629 /* free the mem and return */
15630 vos_mem_free((v_VOID_t *)pSmeCoexInd);
15631 }
15632 else
15633 {
15634 /* DEBUG */
15635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15636 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
15637 pSmeCoexInd->coexIndType,
15638 pSmeCoexInd->coexIndData[0],
15639 pSmeCoexInd->coexIndData[1],
15640 pSmeCoexInd->coexIndData[2],
15641 pSmeCoexInd->coexIndData[3]);
15642 }
15643 break;
15644 }
15645 case WDI_TX_COMPLETE_IND:
15646 {
15647 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
15648 /* Calling TxCompleteAck Indication from wda context*/
15649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15650 "Complete Indication received from HAL");
15651 if( pWDA->pAckTxCbFunc )
15652 {
15653 if( VOS_STATUS_SUCCESS !=
15654 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15655 {
15656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15657 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015658 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053015659 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015660 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
15661 else
15662 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 pWDA->pAckTxCbFunc = NULL;
15664 }
15665 else
15666 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053015667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015668 "Tx Complete Indication is received after timeout ");
15669 }
15670 break;
15671 }
Viral Modid86bde22012-12-10 13:09:21 -080015672 case WDI_P2P_NOA_START_IND :
15673 {
15674 tSirP2PNoaStart *pP2pNoaStart =
15675 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
15676
15677 if (NULL == pP2pNoaStart)
15678 {
15679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15680 "Memory allocation failure, "
15681 "WDI_P2P_NOA_START_IND not forwarded");
15682 break;
15683 }
15684 pP2pNoaStart->status =
15685 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
15686 pP2pNoaStart->bssIdx =
15687 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
15688 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
15689 (void *)pP2pNoaStart , 0) ;
15690 break;
15691 }
15692
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015693#ifdef FEATURE_WLAN_TDLS
15694 case WDI_TDLS_IND :
15695 {
15696 tSirTdlsInd *pTdlsInd =
15697 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
15698
15699 if (NULL == pTdlsInd)
15700 {
15701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15702 "Memory allocation failure, "
15703 "WDI_TDLS_IND not forwarded");
15704 break;
15705 }
15706 pTdlsInd->status =
15707 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
15708 pTdlsInd->assocId =
15709 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
15710 pTdlsInd->staIdx =
15711 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
15712 pTdlsInd->reasonCode =
15713 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
15714 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
15715 (void *)pTdlsInd , 0) ;
15716 break;
15717 }
15718#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015719 case WDI_P2P_NOA_ATTR_IND :
15720 {
15721 tSirP2PNoaAttr *pP2pNoaAttr =
15722 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15724 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015725 if (NULL == pP2pNoaAttr)
15726 {
15727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15728 "Memory allocation failure, "
15729 "WDI_P2P_NOA_ATTR_IND not forwarded");
15730 break;
15731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 pP2pNoaAttr->index =
15733 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
15734 pP2pNoaAttr->oppPsFlag =
15735 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
15736 pP2pNoaAttr->ctWin =
15737 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
15738
15739 pP2pNoaAttr->uNoa1IntervalCnt =
15740 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
15741 pP2pNoaAttr->uNoa1Duration =
15742 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
15743 pP2pNoaAttr->uNoa1Interval =
15744 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
15745 pP2pNoaAttr->uNoa1StartTime =
15746 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015747 pP2pNoaAttr->uNoa2IntervalCnt =
15748 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
15749 pP2pNoaAttr->uNoa2Duration =
15750 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
15751 pP2pNoaAttr->uNoa2Interval =
15752 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
15753 pP2pNoaAttr->uNoa2StartTime =
15754 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015755 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
15756 (void *)pP2pNoaAttr , 0) ;
15757 break;
15758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015759#ifdef FEATURE_WLAN_SCAN_PNO
15760 case WDI_PREF_NETWORK_FOUND_IND:
15761 {
15762 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015763 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
15764 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15765 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
15766 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
15767
Jeff Johnson295189b2012-06-20 16:38:30 -070015768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15769 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015770 if (NULL == pPrefNetworkFoundInd)
15771 {
15772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15773 "Memory allocation failure, "
15774 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053015775 if (NULL !=
15776 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15777 {
15778 wpalMemoryFree(
15779 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
15780 );
15781 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015783 break;
15784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 /* Message Header */
15786 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015787 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070015788
15789 /* Info from WDI Indication */
15790 pPrefNetworkFoundInd->ssId.length =
15791 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070015793 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
15794 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
15795 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070015796 if (NULL !=
15797 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15798 {
15799 pPrefNetworkFoundInd->frameLength =
15800 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15801 vos_mem_copy( pPrefNetworkFoundInd->data,
15802 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
15803 pPrefNetworkFoundInd->frameLength);
15804 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
15805 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15806 }
15807 else
15808 {
15809 pPrefNetworkFoundInd->frameLength = 0;
15810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015811 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070015812 /* VOS message wrapper */
15813 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
15814 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
15815 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015816 /* Send message to SME */
15817 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15818 {
15819 /* free the mem and return */
15820 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
15821 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 break;
15823 }
15824#endif // FEATURE_WLAN_SCAN_PNO
15825
15826#ifdef WLAN_WAKEUP_EVENTS
15827 case WDI_WAKE_REASON_IND:
15828 {
15829 vos_msg_t vosMsg;
15830 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15831 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15832 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15833
15834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015835 "[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 -070015836 wdiLowLevelInd->wdiIndicationType,
15837 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15838 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15839 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15840
15841 if (NULL == pWakeReasonInd)
15842 {
15843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15844 "Memory allocation failure, "
15845 "WDI_WAKE_REASON_IND not forwarded");
15846 break;
15847 }
15848
15849 vos_mem_zero(pWakeReasonInd, allocSize);
15850
15851 /* Message Header */
15852 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15853 pWakeReasonInd->mesgLen = allocSize;
15854
15855 /* Info from WDI Indication */
15856 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15857 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15858 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15859 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15860 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15861 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15862 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15863 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15864
15865 /* VOS message wrapper */
15866 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15867 vosMsg.bodyptr = (void *) pWakeReasonInd;
15868 vosMsg.bodyval = 0;
15869
15870 /* Send message to SME */
15871 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15872 {
15873 /* free the mem and return */
15874 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15875 }
15876
15877 break;
15878 }
15879#endif // WLAN_WAKEUP_EVENTS
15880
15881 case WDI_TX_PER_HIT_IND:
15882 {
15883 vos_msg_t vosMsg;
15884 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15885 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15886 /* VOS message wrapper */
15887 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15888 vosMsg.bodyptr = NULL;
15889 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015890 /* Send message to SME */
15891 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15892 {
15893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15894 }
15895 break;
15896 }
15897
Leo Chang9056f462013-08-01 19:21:11 -070015898#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015899 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015900 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015901 vos_msg_t vosMsg;
15902 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015903
Leo Changd9df8aa2013-09-26 13:32:26 -070015904 lphbInd =
15905 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15906 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015907 {
15908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15909 "%s: LPHB IND buffer alloc Fail", __func__);
15910 return ;
15911 }
15912
Leo Changd9df8aa2013-09-26 13:32:26 -070015913 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015914 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015915 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015916 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015917 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015918 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15919
15920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015921 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015922 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15923
Leo Changd9df8aa2013-09-26 13:32:26 -070015924 vosMsg.type = eWNI_SME_LPHB_IND;
15925 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015926 vosMsg.bodyval = 0;
15927 /* Send message to SME */
15928 if (VOS_STATUS_SUCCESS !=
15929 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15930 {
15931 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15932 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015933 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015934 }
15935 break;
15936 }
15937#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015938 case WDI_PERIODIC_TX_PTRN_FW_IND:
15939 {
15940 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15941 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15942 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15943 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15944 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15945 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15946 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15947
15948 break;
15949 }
Leo Chang9056f462013-08-01 19:21:11 -070015950
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015951 case WDI_IBSS_PEER_INACTIVITY_IND:
15952 {
15953 tSirIbssPeerInactivityInd *pIbssInd =
15954 (tSirIbssPeerInactivityInd *)
15955 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15956
15957 if (NULL == pIbssInd)
15958 {
15959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15960 "Memory allocation failure, "
15961 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15962 break;
15963 }
15964
15965 pIbssInd->bssIdx =
15966 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15967 pIbssInd->staIdx =
15968 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15969 vos_mem_copy(pIbssInd->peerAddr,
15970 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15971 sizeof(tSirMacAddr));
15972 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15973 break;
15974 }
15975
Rajeev79dbe4c2013-10-05 11:03:42 +053015976#ifdef FEATURE_WLAN_BATCH_SCAN
15977 case WDI_BATCH_SCAN_RESULT_IND:
15978 {
15979 void *pBatchScanResult;
15980 void *pCallbackContext;
15981 tpAniSirGlobal pMac;
15982
15983 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15984 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15985
15986 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015987 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015988 {
15989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15990 "%s:pWDA is NULL", __func__);
15991 VOS_ASSERT(0);
15992 return;
15993 }
15994
15995 pBatchScanResult =
15996 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15997 if (NULL == pBatchScanResult)
15998 {
15999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16000 "%s:Batch scan result from FW is null can't invoke HDD callback",
16001 __func__);
16002 VOS_ASSERT(0);
16003 return;
16004 }
16005
16006 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16007 if (NULL == pMac)
16008 {
16009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16010 "%s:pMac is NULL", __func__);
16011 VOS_ASSERT(0);
16012 return;
16013 }
16014
16015 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16016 /*call hdd callback with set batch scan response data*/
16017 if(pMac->pmc.batchScanResultCallback)
16018 {
16019 pMac->pmc.batchScanResultCallback(pCallbackContext,
16020 pBatchScanResult);
16021 }
16022 else
16023 {
16024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16025 "%s:HDD callback is null", __func__);
16026 VOS_ASSERT(0);
16027 }
16028 break;
16029 }
16030#endif
16031
Leo Chang0b0e45a2013-12-15 15:18:55 -080016032#ifdef FEATURE_WLAN_CH_AVOID
16033 case WDI_CH_AVOID_IND:
16034 {
16035 vos_msg_t vosMsg;
16036 tSirChAvoidIndType *chAvoidInd;
16037
16038 chAvoidInd =
16039 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16040 if (NULL == chAvoidInd)
16041 {
16042 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16043 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16044 return ;
16045 }
16046
16047 chAvoidInd->avoidRangeCount =
16048 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16049 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16050 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16051 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16052
16053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16054 "%s : WDA CH avoid notification", __func__);
16055
16056 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16057 vosMsg.bodyptr = chAvoidInd;
16058 vosMsg.bodyval = 0;
16059 /* Send message to SME */
16060 if (VOS_STATUS_SUCCESS !=
16061 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16062 {
16063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16064 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16065 vos_mem_free(chAvoidInd);
16066 }
16067 break;
16068 }
16069#endif /* FEATURE_WLAN_CH_AVOID */
16070
Sunil Duttbd736ed2014-05-26 21:19:41 +053016071#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16072 case WDI_LL_STATS_RESULTS_IND:
16073 {
16074 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016075 tpAniSirGlobal pMac;
16076
16077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16078 "Received WDI_LL_STATS_RESULTS_IND from FW");
16079
16080 /*sanity check*/
16081 if (NULL == pWDA)
16082 {
16083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16084 "%s:pWDA is NULL", __func__);
16085 VOS_ASSERT(0);
16086 return;
16087 }
16088
16089 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016090 (void *)wdiLowLevelInd->
16091 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016092 if (NULL == pLinkLayerStatsInd)
16093 {
16094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16095 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16096 __func__);
16097 VOS_ASSERT(0);
16098 return;
16099 }
16100
16101 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16102 if (NULL == pMac)
16103 {
16104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16105 "%s:pMac is NULL", __func__);
16106 VOS_ASSERT(0);
16107 return;
16108 }
16109
Dino Mycled3d50022014-07-07 12:58:25 +053016110 /* call hdd callback with Link Layer Statistics.
16111 * vdev_id/ifacId in link_stats_results will be
16112 * used to retrieve the correct HDD context
16113 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016114 if (pMac->sme.pLinkLayerStatsIndCallback)
16115 {
Dino Mycled3d50022014-07-07 12:58:25 +053016116 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016117 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016118 pLinkLayerStatsInd,
16119 wdiLowLevelInd->
16120 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016121 }
16122 else
16123 {
16124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16125 "%s:HDD callback is null", __func__);
16126 }
16127 break;
16128 }
16129#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16130
Dino Mycle41bdc942014-06-10 11:30:24 +053016131#ifdef WLAN_FEATURE_EXTSCAN
16132 case WDI_EXTSCAN_PROGRESS_IND:
16133 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16134 case WDI_EXTSCAN_SCAN_RESULT_IND:
16135 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016136 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016137 {
16138 void *pEXTScanData;
16139 void *pCallbackContext;
16140 tpAniSirGlobal pMac;
16141 tANI_U16 indType;
16142
16143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16144 "Received WDI_EXTSCAN Indications from FW");
16145 /*sanity check*/
16146 if (NULL == pWDA)
16147 {
16148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16149 "%s:pWDA is NULL", __func__);
16150 VOS_ASSERT(0);
16151 return;
16152 }
16153 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16154 {
16155 indType = WDA_EXTSCAN_PROGRESS_IND;
16156
16157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16158 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16159 }
16160 if (wdiLowLevelInd->wdiIndicationType ==
16161 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16162 {
16163 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16164
16165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16166 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16167 }
16168 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16169 {
16170 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16171
16172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16173 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16174 }
16175 if (wdiLowLevelInd->wdiIndicationType ==
16176 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16177 {
16178 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16179
16180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16181 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16182 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016183 if (wdiLowLevelInd->wdiIndicationType ==
16184 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16185 {
16186 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16187
16188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16189 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16190 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016191
16192 pEXTScanData =
16193 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16194 if (NULL == pEXTScanData)
16195 {
16196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16197 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16198 __func__);
16199 VOS_ASSERT(0);
16200 return;
16201 }
16202
16203 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16204 if (NULL == pMac)
16205 {
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16207 "%s:pMac is NULL", __func__);
16208 VOS_ASSERT(0);
16209 return;
16210 }
16211
16212 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16213
16214 if(pMac->sme.pEXTScanIndCb)
16215 {
16216 pMac->sme.pEXTScanIndCb(pCallbackContext,
16217 indType,
16218 pEXTScanData);
16219 }
16220 else
16221 {
16222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16223 "%s:HDD callback is null", __func__);
16224 }
16225 break;
16226 }
16227#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016228 case WDI_DEL_BA_IND:
16229 {
16230 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016231 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016232
16233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16234 "Received WDI_DEL_BA_IND from WDI ");
16235 if(NULL == pDelBAInd)
16236 {
16237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16238 "%s: VOS MEM Alloc Failure", __func__);
16239 break;
16240 }
16241 vos_mem_copy(pDelBAInd->peerMacAddr,
16242 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16243 sizeof(tSirMacAddr));
16244 vos_mem_copy(pDelBAInd->bssId,
16245 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16246 sizeof(tSirMacAddr));
16247 pDelBAInd->staIdx =
16248 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16249 pDelBAInd->baTID =
16250 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16251 pDelBAInd->baDirection =
16252 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16253 pDelBAInd->reasonCode =
16254 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16255
16256 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16257 (void *)pDelBAInd , 0) ;
16258 break;
16259 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016260 case WDI_NAN_EVENT_IND:
16261 {
16262 vos_msg_t vosMsg;
16263 tpSirNanEvent pSirNanEvent = NULL;
16264
16265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16266 "Received WDI_NAN_EVENT");
16267
16268 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16269 - sizeof( pSirNanEvent->event_data)
16270 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16271
16272 if (NULL == pSirNanEvent)
16273 {
16274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16275 "%s: VOS MEM Alloc Failure", __func__);
16276 VOS_ASSERT(0) ;
16277 break;
16278 }
16279
16280 pSirNanEvent->event_data_len =
16281 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16282
16283 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16284 {
16285 vos_mem_copy( pSirNanEvent->event_data,
16286 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16287 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16288 }
16289
16290 /* VOS message wrapper */
16291 vosMsg.type = eWNI_SME_NAN_EVENT;
16292 vosMsg.bodyptr = pSirNanEvent;
16293 vosMsg.bodyval = 0;
16294
16295 /* Send message to SME */
16296 if (VOS_STATUS_SUCCESS
16297 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16298 {
16299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16300 "post eWNI_SME_NAN_EVENT to SME Failed");
16301 vos_mem_free(pSirNanEvent);
16302 }
16303 break;
16304 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016305 case WDI_LOST_LINK_PARAMS_IND:
16306 {
16307 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16308 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016309
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016310 if (NULL == pLostLinkParamInd)
16311 {
16312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16313 "%s: VOS MEM Alloc Failure", __func__);
16314 break;
16315 }
16316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16317 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16318
16319 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16320 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16321 pLostLinkParamInd->info.bssIdx =
16322 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16323 pLostLinkParamInd->info.rssi =
16324 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16325 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16326 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16327 sizeof(tSirMacAddr));
16328 pLostLinkParamInd->info.linkFlCnt =
16329 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16330 pLostLinkParamInd->info.linkFlTx =
16331 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16332 pLostLinkParamInd->info.lastDataRate =
16333 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16334 pLostLinkParamInd->info.rsvd1 =
16335 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16336 pLostLinkParamInd->info.rsvd2 =
16337 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16338 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16339 (void *)pLostLinkParamInd , 0) ;
16340 break;
16341 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016342 case WDI_RSSI_BREACHED_IND:
16343 {
16344 WDI_RssiBreachedIndType *pRssiBreachedInd;
16345 tpAniSirGlobal pMac;
16346
16347 pRssiBreachedInd =
16348 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16350 "Received WDI_RSSI_BREACHED_IND from FW");
16351
16352 vos_mem_copy(pRssiBreachedInd,
16353 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16354 sizeof(WDI_RssiBreachedIndType));
16355
16356 /*sanity check*/
16357 if (NULL == pWDA)
16358 {
16359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16360 "%s:pWDA is NULL", __func__);
16361 vos_mem_free(pRssiBreachedInd);
16362 VOS_ASSERT(0);
16363 return;
16364 }
16365
16366 if (NULL == pRssiBreachedInd)
16367 {
16368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16369 "%s:Breach indication from FW is null can't invoke HDD callback",
16370 __func__);
16371 VOS_ASSERT(0);
16372 return;
16373 }
16374
16375 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16376 if (NULL == pMac)
16377 {
16378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16379 "%s:pMac is NULL", __func__);
16380 VOS_ASSERT(0);
16381 vos_mem_free(pRssiBreachedInd);
16382 return;
16383 }
16384
16385 if (pMac->sme.rssiThresholdBreachedCb)
16386 {
16387 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16388 }
16389 else
16390 {
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16392 "%s:HDD callback is null", __func__);
16393 }
16394 vos_mem_free(pRssiBreachedInd);
16395 break;
16396 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016397#ifdef FEATURE_OEM_DATA_SUPPORT
16398 case WDI_START_OEM_DATA_RSP_IND_NEW:
16399 {
16400 void *pCallbackContext;
16401 tpAniSirGlobal pMac;
16402 tANI_U16 indType;
16403 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016404 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016405
16406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16407 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
16408
16409 /*sanity check*/
16410 if (NULL == pWDA)
16411 {
16412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16413 "%s:pWDA is NULL", __func__);
16414 VOS_ASSERT(0);
16415 return;
16416 }
16417
16418 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
16419 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016420 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
16421 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016422 if (NULL == pOemRspNewIndData)
16423 {
16424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16425 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
16426 __func__);
16427 VOS_ASSERT(0);
16428 return;
16429 }
16430
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016431 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
16432 OemRspNewLen;
16433
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016434 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16435 if (NULL == pMac)
16436 {
16437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16438 "%s:pMac is NULL", __func__);
16439 VOS_ASSERT(0);
16440 return;
16441 }
16442
16443 pCallbackContext = pMac->sme.pOemDataCallbackContext;
16444
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16446 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
16447
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016448 if(pMac->sme.pOemDataIndCb)
16449 {
16450 pMac->sme.pOemDataIndCb(pCallbackContext,
16451 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016452 pOemRspNewIndData,
16453 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016454 }
16455 else
16456 {
16457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16458 "%s:HDD callback is null", __func__);
16459 }
16460 break;
16461 }
16462#endif /* FEATURE_OEM_DATA_SUPPORT */
16463
Jeff Johnson295189b2012-06-20 16:38:30 -070016464 default:
16465 {
16466 /* TODO error */
16467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16468 "Received UNKNOWN Indication from WDI ");
16469 }
16470 }
16471 return ;
16472}
16473
Jeff Johnson295189b2012-06-20 16:38:30 -070016474/*
16475 * BA related processing in WDA.
16476 */
Jeff Johnson295189b2012-06-20 16:38:30 -070016477void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
16478 void* pUserData)
16479{
16480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16481 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 if(NULL == pWdaParams)
16483 {
16484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016485 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016486 VOS_ASSERT(0) ;
16487 return ;
16488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016489 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 vos_mem_free(pWdaParams->wdaMsgParam) ;
16491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16492 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016494 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016495 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
16496 {
16497 tANI_U8 i = 0 ;
16498 tBaActivityInd *baActivityInd = NULL ;
16499 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
16500 tANI_U8 allocSize = sizeof(tBaActivityInd)
16501 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
16502 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
16503 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016504 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016505 if(NULL == baActivityInd)
16506 {
16507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016509 VOS_ASSERT(0) ;
16510 return;
16511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016512 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
16513 sizeof(tSirMacAddr)) ;
16514 baActivityInd->baCandidateCnt = baCandidateCount ;
16515
16516 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
16517 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
16518
16519 for(i = 0 ; i < baCandidateCount ; i++)
16520 {
16521 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016522 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
16523 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016524 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
16525 {
16526 baCandidate->baInfo[tid].fBaEnable =
16527 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
16528 baCandidate->baInfo[tid].startingSeqNum =
16529 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
16530 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016531 wdiBaCandidate++ ;
16532 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016533 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016534 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
16535 }
16536 else
16537 {
16538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16539 "BA Trigger RSP with Failure received ");
16540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016541 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016542}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016543
16544
16545/*
16546 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
16547 * during MCC
16548 */
16549void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
16550{
16551 wpt_uint32 enabled;
16552 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
16553 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
16554 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
16555
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016556 if (NULL == pMac )
16557 {
16558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16559 "%s: Invoked with invalid MAC context ", __func__ );
16560 VOS_ASSERT(0);
16561 return;
16562 }
16563
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016564 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16565 != eSIR_SUCCESS)
16566 {
16567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16568 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16569 return;
16570 }
16571
16572 if(!enabled)
16573 {
16574 return;
16575 }
16576
16577 if(NULL == pWDA)
16578 {
16579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16580 "%s:WDA context is NULL", __func__);
16581 VOS_ASSERT(0);
16582 return;
16583 }
16584
16585 if(activate)
16586 {
16587 if( VOS_STATUS_SUCCESS !=
16588 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16589 {
16590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16591 "Traffic Stats Timer Start Failed ");
16592 return;
16593 }
16594 WDI_DS_ActivateTrafficStats();
16595 }
16596 else
16597 {
16598 WDI_DS_DeactivateTrafficStats();
16599 WDI_DS_ClearTrafficStats();
16600
16601 if( VOS_STATUS_SUCCESS !=
16602 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16603 {
16604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16605 "Traffic Stats Timer Stop Failed ");
16606 return;
16607 }
16608 }
16609}
16610
16611/*
16612 * Traffic Stats Timer handler
16613 */
16614void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
16615{
16616 WDI_Status wdiStatus;
16617 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
16618 WDI_TrafficStatsIndType trafficStatsIndParams;
16619 wpt_uint32 length, enabled;
16620 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16621
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016622 if (NULL == pMac )
16623 {
16624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16625 "%s: Invoked with invalid MAC context ", __func__ );
16626 VOS_ASSERT(0);
16627 return;
16628 }
16629
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016630 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16631 != eSIR_SUCCESS)
16632 {
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16634 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16635 return;
16636 }
16637
16638 if(!enabled)
16639 {
16640 WDI_DS_DeactivateTrafficStats();
16641 return;
16642 }
16643
16644 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
16645
16646 if(pWdiTrafficStats != NULL)
16647 {
16648 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
16649 trafficStatsIndParams.length = length;
16650 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080016651 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016652 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
16653 trafficStatsIndParams.pUserData = pWDA;
16654
16655 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
16656
16657 if(WDI_STATUS_PENDING == wdiStatus)
16658 {
16659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16660 "Pending received for %s:%d ",__func__,__LINE__ );
16661 }
16662 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
16663 {
16664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16665 "Failure in %s:%d ",__func__,__LINE__ );
16666 }
16667
16668 WDI_DS_ClearTrafficStats();
16669 }
16670 else
16671 {
16672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16673 "pWdiTrafficStats is Null");
16674 }
16675
16676 if( VOS_STATUS_SUCCESS !=
16677 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16678 {
16679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16680 "Traffic Stats Timer Start Failed ");
16681 return;
16682 }
16683}
16684
Jeff Johnson295189b2012-06-20 16:38:30 -070016685/*
16686 * BA Activity check timer handler
16687 */
16688void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
16689{
16690 tANI_U8 curSta = 0 ;
16691 tANI_U8 tid = 0 ;
16692 tANI_U8 size = 0 ;
16693 tANI_U8 baCandidateCount = 0 ;
16694 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016695 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016697 tpAniSirGlobal pMac;
16698
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016699 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016700 {
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016702 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016703 VOS_ASSERT(0);
16704 return ;
16705 }
16706 if(WDA_MAX_STA < pWDA->wdaMaxSta)
16707 {
16708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16709 "Inconsistent STA entries in WDA");
16710 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016711 }
16712 if(NULL == pWDA->pVosContext)
16713 {
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16715 "%s: pVosContext is NULL",__func__);
16716 VOS_ASSERT(0);
16717 return ;
16718 }
16719 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053016720 if(NULL == pMac)
16721 {
16722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16723 "%s: pMac is NULL",__func__);
16724 VOS_ASSERT(0);
16725 return ;
16726 }
16727
Abhishek Singh0644e482014-10-06 18:38:23 +053016728 if (wlan_cfgGetInt(pMac,
16729 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
16730 eSIR_SUCCESS)
16731 {
16732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16733 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
16734 val = 0;
16735 }
16736
Jeff Johnson295189b2012-06-20 16:38:30 -070016737 /* walk through all STA entries and find out TX packet count */
16738 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
16739 {
Abhishek Singh0644e482014-10-06 18:38:23 +053016740 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016741#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016742 // We can only do BA on "hard" STAs.
16743 if (!(IS_HWSTA_IDX(curSta)))
16744 {
16745 continue;
16746 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016747#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016748 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
16749 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016750 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016751 tANI_U32 txPktCount = 0 ;
16752 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016753 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016754 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
16755 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070016756 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
16757 curSta, tid, &txPktCount)))
16758 {
16759#if 0
16760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16761 "************* %d:%d, %d ",curSta, txPktCount,
16762 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
16763#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053016764 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
16765 (currentOperChan <= SIR_11B_CHANNEL_END)))
16766 {
16767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16768 "%s: BTC disabled aggregation - dont start "
16769 "TX ADDBA req",__func__);
16770 }
16771 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016772 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053016773 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
16774 pWDA->wdaGlobalSystemRole) && txPktCount )
16775 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
16776 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070016777 {
16778 /* get prepare for sending message to HAL */
16779 //baCandidate[baCandidateCount].staIdx = curSta ;
16780 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
16781 newBaCandidate = WDA_ENABLE_BA ;
16782 }
16783 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
16784 }
16785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016786 /* fill the entry for all the sta with given TID's */
16787 if(WDA_ENABLE_BA == newBaCandidate)
16788 {
16789 /* move to next BA candidate */
16790 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
16791 size += sizeof(WDI_TriggerBAReqCandidateType) ;
16792 baCandidateCount++ ;
16793 newBaCandidate = WDA_DISABLE_BA ;
16794 }
16795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016796 /* prepare and send message to hal */
16797 if( 0 < baCandidateCount)
16798 {
16799 WDI_Status status = WDI_STATUS_SUCCESS ;
16800 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
16801 tWDA_ReqParams *pWdaParams =
16802 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016803 if(NULL == pWdaParams)
16804 {
16805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016807 VOS_ASSERT(0) ;
16808 return;
16809 }
16810 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
16811 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
16812 if(NULL == wdiTriggerBaReq)
16813 {
16814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016816 VOS_ASSERT(0) ;
16817 vos_mem_free(pWdaParams);
16818 return;
16819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 do
16821 {
16822 WDI_TriggerBAReqinfoType *triggerBaInfo =
16823 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
16824 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
16825 /* TEMP_FIX: Need to see if WDI need check for assoc session for
16826 * for each request */
16827 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
16828 triggerBaInfo->ucBASessionID = 0;
16829 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
16830 } while(0) ;
16831 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
16832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016834 pWdaParams->pWdaContext = pWDA;
16835 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
16836 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053016837 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070016838 WDA_TriggerBaReqCallback, pWdaParams) ;
16839 if(IS_WDI_STATUS_FAILURE(status))
16840 {
16841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16842 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
16843 vos_mem_free(pWdaParams->wdaMsgParam) ;
16844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16845 vos_mem_free(pWdaParams) ;
16846 }
16847 }
16848 else
16849 {
16850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16851 "There is no TID for initiating BA");
16852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016853 if( VOS_STATUS_SUCCESS !=
16854 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16855 {
16856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16857 "BA Activity Timer Stop Failed ");
16858 return ;
16859 }
16860 if( VOS_STATUS_SUCCESS !=
16861 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16862 {
16863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16864 "BA Activity Timer Start Failed ");
16865 return;
16866 }
16867 return ;
16868}
Jeff Johnson295189b2012-06-20 16:38:30 -070016869/*
16870 * WDA common routine to create timer used by WDA.
16871 */
16872static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
16873{
Jeff Johnson295189b2012-06-20 16:38:30 -070016874 VOS_STATUS status = VOS_STATUS_SUCCESS ;
16875 tANI_U32 val = 0 ;
16876 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16877
16878 if(NULL == pMac)
16879 {
16880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016881 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016882 VOS_ASSERT(0);
16883 return VOS_STATUS_E_FAILURE;
16884 }
16885 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
16886 != eSIR_SUCCESS)
16887 {
16888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16889 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
16890 return VOS_STATUS_E_FAILURE;
16891 }
16892 val = SYS_MS_TO_TICKS(val) ;
16893
16894 /* BA activity check timer */
16895 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
16896 "BA Activity Check timer", WDA_TimerHandler,
16897 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
16898 if(status != TX_SUCCESS)
16899 {
16900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16901 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016902 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016904 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016905 /* Tx Complete Timeout timer */
16906 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
16907 "Tx Complete Check timer", WDA_TimerHandler,
16908 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016909 if(status != TX_SUCCESS)
16910 {
16911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16912 "Unable to create Tx Complete Timeout timer");
16913 /* Destroy timer of BA activity check timer */
16914 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16915 if(status != TX_SUCCESS)
16916 {
16917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16918 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016919 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016920 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016921 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016922 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016923
16924 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
16925
16926 /* Traffic Stats timer */
16927 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
16928 "Traffic Stats timer", WDA_TimerHandler,
16929 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
16930 if(status != TX_SUCCESS)
16931 {
16932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16933 "Unable to create traffic stats timer");
16934 /* Destroy timer of BA activity check timer */
16935 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16936 if(status != TX_SUCCESS)
16937 {
16938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16939 "Unable to Destroy BA activity timer");
16940 }
16941 /* Destroy timer of tx complete timer */
16942 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16943 if(status != TX_SUCCESS)
16944 {
16945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16946 "Unable to Tx complete timer");
16947 }
16948 return VOS_STATUS_E_FAILURE ;
16949 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016950 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016951}
Jeff Johnson295189b2012-06-20 16:38:30 -070016952/*
16953 * WDA common routine to destroy timer used by WDA.
16954 */
16955static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16956{
16957 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016958 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16959 if(status != TX_SUCCESS)
16960 {
16961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16962 "Unable to Destroy Tx Complete Timeout timer");
16963 return eSIR_FAILURE ;
16964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016965 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16966 if(status != TX_SUCCESS)
16967 {
16968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16969 "Unable to Destroy BA activity timer");
16970 return eSIR_FAILURE ;
16971 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016972 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16973 if(status != TX_SUCCESS)
16974 {
16975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16976 "Unable to Destroy traffic stats timer");
16977 return eSIR_FAILURE ;
16978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 return eSIR_SUCCESS ;
16980}
Jeff Johnson295189b2012-06-20 16:38:30 -070016981/*
16982 * WDA timer handler.
16983 */
16984void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16985{
16986 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16987 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016988 /*
16989 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16990 */
16991 wdaMsg.type = timerInfo ;
16992 wdaMsg.bodyptr = NULL;
16993 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 /* post the message.. */
16995 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16996 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16997 {
16998 vosStatus = VOS_STATUS_E_BADMSG;
16999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017000}
Jeff Johnson295189b2012-06-20 16:38:30 -070017001/*
17002 * WDA Tx Complete timeout Indication.
17003 */
17004void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17005{
17006 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017007 tpSirTxBdStatus txBdStatus = {0};
17008
Jeff Johnson295189b2012-06-20 16:38:30 -070017009 if( pWDA->pAckTxCbFunc )
17010 {
17011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017012 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017013 /*Indicate failure*/
17014 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017015 pWDA->pAckTxCbFunc = NULL;
17016 }
17017 else
17018 {
17019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017020 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017021 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017022}
Jeff Johnson295189b2012-06-20 16:38:30 -070017023/*
17024 * WDA Set REG Domain to VOS NV
17025 */
Abhishek Singha306a442013-11-07 18:39:01 +053017026eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17027 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017028{
Abhishek Singha306a442013-11-07 18:39:01 +053017029 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017030 {
17031 return eHAL_STATUS_INVALID_PARAMETER;
17032 }
17033 return eHAL_STATUS_SUCCESS;
17034}
Jeff Johnson295189b2012-06-20 16:38:30 -070017035
Jeff Johnson295189b2012-06-20 16:38:30 -070017036#ifdef FEATURE_WLAN_SCAN_PNO
17037/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017038 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017039 *
17040 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017041void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017042{
17043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017044 tSirPNOScanReq *pPNOScanReqParams;
17045
Jeff Johnson295189b2012-06-20 16:38:30 -070017046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017047 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017048 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017049 {
17050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017052 VOS_ASSERT(0) ;
17053 return ;
17054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017055
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017056 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17057 if(pPNOScanReqParams->statusCallback)
17058 {
17059 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17060 (status == WDI_STATUS_SUCCESS) ?
17061 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17062 }
17063
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017064 if (pPNOScanReqParams->enable == 1)
17065 {
17066 if (pPNOScanReqParams->aNetworks)
17067 vos_mem_free(pPNOScanReqParams->aNetworks);
17068 if (pPNOScanReqParams->p24GProbeTemplate)
17069 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17070 if (pPNOScanReqParams->p5GProbeTemplate)
17071 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17072 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17074 vos_mem_free(pWdaParams->wdaMsgParam);
17075 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017076
17077 return ;
17078}
Jeff Johnson295189b2012-06-20 16:38:30 -070017079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017080 * FUNCTION: WDA_PNOScanReqCallback
17081 * Free memory.
17082 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17083 */
17084void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017085{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017087 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017088
17089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17090 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17091
17092 if(NULL == pWdaParams)
17093 {
17094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17095 "%s: pWdaParams received NULL", __func__);
17096 VOS_ASSERT(0);
17097 return;
17098 }
17099
17100 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17101 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017102 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17103 if(pPNOScanReqParams->statusCallback)
17104 {
17105 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17106 VOS_STATUS_E_FAILURE);
17107 }
17108
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017109 if (pPNOScanReqParams->enable == 1)
17110 {
17111 if (pPNOScanReqParams->aNetworks)
17112 vos_mem_free(pPNOScanReqParams->aNetworks);
17113 if (pPNOScanReqParams->p24GProbeTemplate)
17114 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17115 if (pPNOScanReqParams->p5GProbeTemplate)
17116 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17117 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17119 vos_mem_free(pWdaParams->wdaMsgParam);
17120 vos_mem_free(pWdaParams);
17121 }
17122
17123 return;
17124}
17125/*
17126 * FUNCTION: WDA_UpdateScanParamsRespCallback
17127 *
17128 */
17129void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17130{
17131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017133 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017134 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017135 {
17136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017137 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017138 VOS_ASSERT(0) ;
17139 return ;
17140 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017141
17142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17143 vos_mem_free(pWdaParams->wdaMsgParam);
17144 vos_mem_free(pWdaParams);
17145
Jeff Johnson295189b2012-06-20 16:38:30 -070017146 return ;
17147}
Jeff Johnson295189b2012-06-20 16:38:30 -070017148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017149 * FUNCTION: WDA_UpdateScanParamsReqCallback
17150 * Free memory.
17151 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17152 */
17153void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17154{
17155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17156
17157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17158 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17159
17160 if(NULL == pWdaParams)
17161 {
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17163 "%s: pWdaParams received NULL", __func__);
17164 VOS_ASSERT(0);
17165 return;
17166 }
17167
17168 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17169 {
17170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17171 vos_mem_free(pWdaParams->wdaMsgParam);
17172 vos_mem_free(pWdaParams);
17173 }
17174
17175 return;
17176}
17177/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017178 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17179 * Request to WDI to set Preferred Network List.Offload
17180 */
17181VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17182 tSirPNOScanReq *pPNOScanReqParams)
17183{
Jeff Johnson43971f52012-07-17 12:26:56 -070017184 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017185 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17186 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17187 tWDA_ReqParams *pWdaParams ;
17188 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017191 if(NULL == pwdiPNOScanReqInfo)
17192 {
17193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017195 VOS_ASSERT(0);
17196 return VOS_STATUS_E_NOMEM;
17197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17199 if(NULL == pWdaParams)
17200 {
17201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017203 VOS_ASSERT(0);
17204 vos_mem_free(pwdiPNOScanReqInfo);
17205 return VOS_STATUS_E_NOMEM;
17206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017207 //
17208 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17209 //
17210 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17211 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017212 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17213 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17214 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017215 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17216 {
17217 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17218 &pPNOScanReqParams->aNetworks[i],
17219 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017221 /*Scan timer intervals*/
17222 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17223 &pPNOScanReqParams->scanTimers,
17224 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017225 /*Probe template for 2.4GHz band*/
17226 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17227 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17228 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017229 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17230 pPNOScanReqParams->p24GProbeTemplate,
17231 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017232 /*Probe template for 5GHz band*/
17233 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17234 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17235 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017236 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17237 pPNOScanReqParams->p5GProbeTemplate,
17238 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017239 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17240 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017241
Jeff Johnson295189b2012-06-20 16:38:30 -070017242 /* Store Params pass it to WDI */
17243 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17244 pWdaParams->pWdaContext = pWDA;
17245 /* Store param pointer as passed in by caller */
17246 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017247 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017248 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017249 if(IS_WDI_STATUS_FAILURE(status))
17250 {
17251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17252 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017253 if(pPNOScanReqParams->statusCallback)
17254 {
17255 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17256 VOS_STATUS_E_FAILURE);
17257 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017258 if (pPNOScanReqParams->enable == 1)
17259 {
17260 if (pPNOScanReqParams->aNetworks)
17261 vos_mem_free(pPNOScanReqParams->aNetworks);
17262 if (pPNOScanReqParams->p24GProbeTemplate)
17263 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17264 if (pPNOScanReqParams->p5GProbeTemplate)
17265 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17266 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17268 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017269
Jeff Johnson295189b2012-06-20 16:38:30 -070017270 pWdaParams->wdaWdiApiMsgParam = NULL;
17271 pWdaParams->wdaMsgParam = NULL;
17272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017273 return CONVERT_WDI2VOS_STATUS(status) ;
17274}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017275
17276#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17277
17278void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17279{
17280 /*Convert the CSR Auth types to WDI Auth types */
17281 switch (csrAuthType)
17282 {
17283 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17284 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17285 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017286#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017287 case eCSR_AUTH_TYPE_CCKM_WPA:
17288 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17289 break;
17290#endif
17291 case eCSR_AUTH_TYPE_WPA:
17292 *AuthType = eWDA_AUTH_TYPE_WPA;
17293 break;
17294 case eCSR_AUTH_TYPE_WPA_PSK:
17295 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17296 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017297#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017298 case eCSR_AUTH_TYPE_CCKM_RSN:
17299 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17300 break;
17301#endif
17302 case eCSR_AUTH_TYPE_RSN:
17303 *AuthType = eWDA_AUTH_TYPE_RSN;
17304 break;
17305 case eCSR_AUTH_TYPE_RSN_PSK:
17306 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17307 break;
17308#if defined WLAN_FEATURE_VOWIFI_11R
17309 case eCSR_AUTH_TYPE_FT_RSN:
17310 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17311 break;
17312 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17313 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17314 break;
17315#endif
17316#ifdef FEATURE_WLAN_WAPI
17317 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17318 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17319 break;
17320 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17321 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17322 break;
17323#endif /* FEATURE_WLAN_WAPI */
17324 case eCSR_AUTH_TYPE_SHARED_KEY:
17325 case eCSR_AUTH_TYPE_AUTOSWITCH:
17326 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17327 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017328#ifdef WLAN_FEATURE_11W
17329 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17330 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017331 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017332 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17333 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17334 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017335#endif
17336 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017338 "%s: Unknown Auth Type", __func__);
17339 break;
17340 }
17341}
17342void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17343{
17344 switch (csrEncrType)
17345 {
17346 case eCSR_ENCRYPT_TYPE_NONE:
17347 *EncrType = WDI_ED_NONE;
17348 break;
17349 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17350 case eCSR_ENCRYPT_TYPE_WEP40:
17351 *EncrType = WDI_ED_WEP40;
17352 break;
17353 case eCSR_ENCRYPT_TYPE_WEP104:
17354 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17355 *EncrType = WDI_ED_WEP104;
17356 break;
17357 case eCSR_ENCRYPT_TYPE_TKIP:
17358 *EncrType = WDI_ED_TKIP;
17359 break;
17360 case eCSR_ENCRYPT_TYPE_AES:
17361 *EncrType = WDI_ED_CCMP;
17362 break;
17363#ifdef WLAN_FEATURE_11W
17364 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17365 *EncrType = WDI_ED_AES_128_CMAC;
17366 break;
17367#endif
17368#ifdef FEATURE_WLAN_WAPI
17369 case eCSR_ENCRYPT_TYPE_WPI:
17370 *EncrType = WDI_ED_WPI;
17371 break;
17372#endif
17373 case eCSR_ENCRYPT_TYPE_ANY:
17374 *EncrType = WDI_ED_ANY;
17375 break;
17376
17377 default:
17378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17379 "%s: Unknown Encryption Type", __func__);
17380 break;
17381 }
17382}
17383
17384/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017385 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017386 * Request to WDI to set Roam Offload Scan
17387 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017388VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017389 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17390{
17391 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017392 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17393 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017394 tWDA_ReqParams *pWdaParams ;
17395 v_U8_t csrAuthType;
17396 WDI_RoamNetworkType *pwdiRoamNetworkType;
17397 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17399 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017400 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017401 {
17402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17403 "%s: VOS MEM Alloc Failure", __func__);
17404 VOS_ASSERT(0);
17405 return VOS_STATUS_E_NOMEM;
17406 }
17407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17408 if (NULL == pWdaParams)
17409 {
17410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17411 "%s: VOS MEM Alloc Failure", __func__);
17412 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017413 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017414 return VOS_STATUS_E_NOMEM;
17415 }
17416
17417 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017418 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017419 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017420 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
17421 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017422 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
17423 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
17424 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
17425 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
17426 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
17427 sizeof(pwdiRoamNetworkType->currAPbssid));
17428 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
17429 csrAuthType);
17430 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
17431 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
17432 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
17433 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
17434 pwdiRoamOffloadScanInfo->LookupThreshold =
17435 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080017436 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
17437 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017438 pwdiRoamOffloadScanInfo->RoamRssiDiff =
17439 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080017440 pwdiRoamOffloadScanInfo->MAWCEnabled =
17441 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017442 pwdiRoamOffloadScanInfo->Command =
17443 pRoamOffloadScanReqParams->Command ;
17444 pwdiRoamOffloadScanInfo->StartScanReason =
17445 pRoamOffloadScanReqParams->StartScanReason ;
17446 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
17447 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
17448 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
17449 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
17450 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
17451 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
17452 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
17453 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
17454 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
17455 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017456 pwdiRoamOffloadScanInfo->IsESEEnabled =
17457 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017458 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
17459 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
17460 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
17461 pwdiRoamNetworkType->ssId.ucLength =
17462 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
17463 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
17464 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
17465 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
17466 pwdiRoamNetworkType->ChannelCount =
17467 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
17468 pwdiRoamOffloadScanInfo->ChannelCacheType =
17469 pRoamOffloadScanReqParams->ChannelCacheType;
17470 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
17471 pRoamOffloadScanReqParams->ValidChannelList,
17472 pRoamOffloadScanReqParams->ValidChannelCount);
17473 pwdiRoamOffloadScanInfo->ValidChannelCount =
17474 pRoamOffloadScanReqParams->ValidChannelCount;
17475 pwdiRoamOffloadScanInfo->us24GProbeSize =
17476 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17477 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17478 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
17479 pRoamOffloadScanReqParams->p24GProbeTemplate,
17480 pwdiRoamOffloadScanInfo->us24GProbeSize);
17481 pwdiRoamOffloadScanInfo->us5GProbeSize =
17482 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17483 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17484 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
17485 pRoamOffloadScanReqParams->p5GProbeTemplate,
17486 pwdiRoamOffloadScanInfo->us5GProbeSize);
17487 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
17488 pRoamOffloadScanReqParams->MDID.mdiePresent;
17489 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
17490 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017491 pwdiRoamOffloadScanInfo->nProbes =
17492 pRoamOffloadScanReqParams->nProbes;
17493 pwdiRoamOffloadScanInfo->HomeAwayTime =
17494 pRoamOffloadScanReqParams->HomeAwayTime;
17495 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017496 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017497 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017498 pWdaParams->pWdaContext = pWDA;
17499 /* Store param pointer as passed in by caller */
17500 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017501 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017502 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
17503 if(IS_WDI_STATUS_FAILURE(status))
17504 {
17505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17506 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
17507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17508 vos_mem_free(pWdaParams->wdaMsgParam);
17509 pWdaParams->wdaWdiApiMsgParam = NULL;
17510 pWdaParams->wdaMsgParam = NULL;
17511 }
17512 return CONVERT_WDI2VOS_STATUS(status) ;
17513}
17514#endif
17515
Jeff Johnson295189b2012-06-20 16:38:30 -070017516/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017517 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017518 *
17519 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017520void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017521{
17522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17523
17524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017525 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017526
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017527 if(NULL == pWdaParams)
17528 {
17529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017530 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017531 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017532 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017533 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017534
Jeff Johnson295189b2012-06-20 16:38:30 -070017535 vos_mem_free(pWdaParams->wdaMsgParam) ;
17536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17537 vos_mem_free(pWdaParams) ;
17538
17539 return ;
17540}
17541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017542 * FUNCTION: WDA_RssiFilterReqCallback
17543 * Free memory.
17544 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
17545 */
17546void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17547{
17548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17549
17550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17551 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17552
17553 if(NULL == pWdaParams)
17554 {
17555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17556 "%s: pWdaParams received NULL", __func__);
17557 VOS_ASSERT(0);
17558 return;
17559 }
17560
17561 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17562 {
17563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17564 vos_mem_free(pWdaParams->wdaMsgParam);
17565 vos_mem_free(pWdaParams);
17566 }
17567
17568 return;
17569}
17570/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053017571 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070017572 * Request to WDI to set Preferred Network List.Offload
17573 */
17574VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
17575 tSirSetRSSIFilterReq* pRssiFilterParams)
17576{
Jeff Johnson43971f52012-07-17 12:26:56 -070017577 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017578 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
17579 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
17580 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017582 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017583 if(NULL == pwdiSetRssiFilterReqInfo)
17584 {
17585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017587 VOS_ASSERT(0);
17588 return VOS_STATUS_E_NOMEM;
17589 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17591 if(NULL == pWdaParams)
17592 {
17593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017595 VOS_ASSERT(0);
17596 vos_mem_free(pwdiSetRssiFilterReqInfo);
17597 return VOS_STATUS_E_NOMEM;
17598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017599 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017600 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
17601 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017602
Jeff Johnson295189b2012-06-20 16:38:30 -070017603 /* Store Params pass it to WDI */
17604 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
17605 pWdaParams->pWdaContext = pWDA;
17606 /* Store param pointer as passed in by caller */
17607 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017608 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017609 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017610 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017611 if(IS_WDI_STATUS_FAILURE(status))
17612 {
17613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17614 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
17615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17616 vos_mem_free(pWdaParams->wdaMsgParam);
17617 pWdaParams->wdaWdiApiMsgParam = NULL;
17618 pWdaParams->wdaMsgParam = NULL;
17619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017620 return CONVERT_WDI2VOS_STATUS(status) ;
17621}
17622
Jeff Johnson295189b2012-06-20 16:38:30 -070017623/*
17624 * FUNCTION: WDA_ProcessUpdateScanParams
17625 * Request to WDI to update Scan Parameters
17626 */
17627VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
17628 tSirUpdateScanParams *pUpdateScanParams)
17629{
Jeff Johnson43971f52012-07-17 12:26:56 -070017630 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017631 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
17632 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
17633 sizeof(WDI_UpdateScanParamsInfoType)) ;
17634 tWDA_ReqParams *pWdaParams ;
17635 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017637 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017638 if(NULL == wdiUpdateScanParamsInfoType)
17639 {
17640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017642 VOS_ASSERT(0);
17643 return VOS_STATUS_E_NOMEM;
17644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17646 if ( NULL == pWdaParams )
17647 {
17648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017650 VOS_ASSERT(0);
17651 vos_mem_free(wdiUpdateScanParamsInfoType);
17652 return VOS_STATUS_E_NOMEM;
17653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017654 //
17655 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
17656 //
Jeff Johnson295189b2012-06-20 16:38:30 -070017657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17658 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
17659 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
17660 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080017661 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070017662 pUpdateScanParams->b11dEnabled,
17663 pUpdateScanParams->b11dResolved,
17664 pUpdateScanParams->ucChannelCount,
17665 pUpdateScanParams->usPassiveMinChTime,
17666 pUpdateScanParams->usPassiveMaxChTime,
17667 pUpdateScanParams->usActiveMinChTime,
17668 pUpdateScanParams->usActiveMaxChTime,
17669 sizeof(tSirUpdateScanParams),
17670 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
17671
Jeff Johnson295189b2012-06-20 16:38:30 -070017672 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
17673 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070017674 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
17675 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070017676 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
17677 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070017678 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
17679 pUpdateScanParams->usActiveMaxChTime;
17680 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
17681 pUpdateScanParams->usActiveMinChTime;
17682 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
17683 pUpdateScanParams->usPassiveMaxChTime;
17684 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
17685 pUpdateScanParams->usPassiveMinChTime;
17686
Jeff Johnson295189b2012-06-20 16:38:30 -070017687 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053017688 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
17689 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070017690
Jeff Johnson295189b2012-06-20 16:38:30 -070017691 for ( i = 0; i <
17692 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
17693 i++)
17694 {
17695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17696 "Update Scan Parameters channel: %d",
17697 pUpdateScanParams->aChannels[i]);
17698
17699 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
17700 pUpdateScanParams->aChannels[i];
17701 }
17702
Yue Ma7f44bbe2013-04-12 11:47:39 -070017703 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
17704 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017705
Jeff Johnson295189b2012-06-20 16:38:30 -070017706 /* Store Params pass it to WDI */
17707 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
17708 pWdaParams->pWdaContext = pWDA;
17709 /* Store param pointer as passed in by caller */
17710 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070017711
Jeff Johnson295189b2012-06-20 16:38:30 -070017712
17713
17714 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017715 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017716 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017717 if(IS_WDI_STATUS_FAILURE(status))
17718 {
17719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17720 "Failure in Update Scan Params EQ WDI API, free all the memory " );
17721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17722 vos_mem_free(pWdaParams->wdaMsgParam);
17723 vos_mem_free(pWdaParams);
17724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017725 return CONVERT_WDI2VOS_STATUS(status) ;
17726}
17727#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017728
17729#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17730/*
17731 * FUNCTION: WDA_RoamOffloadScanReqCallback
17732 *
17733 */
17734void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
17735{
17736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017737 vos_msg_t vosMsg;
17738 wpt_uint8 reason = 0;
17739
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070017740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017741 "<------ %s " ,__func__);
17742 if (NULL == pWdaParams)
17743 {
17744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17745 "%s: pWdaParams received NULL", __func__);
17746 VOS_ASSERT(0) ;
17747 return ;
17748 }
17749 if ( pWdaParams != NULL )
17750 {
17751 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
17752 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017753 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17755 }
17756 if ( pWdaParams->wdaMsgParam != NULL)
17757 {
17758 vos_mem_free(pWdaParams->wdaMsgParam);
17759 }
17760
17761 vos_mem_free(pWdaParams) ;
17762 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017763 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
17764 vosMsg.bodyptr = NULL;
17765 if (WDI_STATUS_SUCCESS != status)
17766 {
17767 reason = 0;
17768 }
17769 vosMsg.bodyval = reason;
17770 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17771 {
17772 /* free the mem and return */
17773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070017774 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017775 }
17776
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017777 return ;
17778}
17779#endif
17780
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017781/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017782 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017783 *
17784 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017785void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017786{
17787 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17788
17789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17790 "<------ %s " ,__func__);
17791
17792 if(NULL == pWdaParams)
17793 {
17794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17795 "%s: pWdaParams received NULL", __func__);
17796 VOS_ASSERT(0);
17797 return;
17798 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017799
17800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17801 vos_mem_free(pWdaParams->wdaMsgParam);
17802 vos_mem_free(pWdaParams);
17803
17804 return;
17805}
17806/*
17807 * FUNCTION: WDA_SetPowerParamsReqCallback
17808 * Free memory.
17809 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
17810 */
17811void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17812{
17813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17814
17815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17816 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17817
17818 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017819 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070017820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17821 "%s: pWdaParams received NULL", __func__);
17822 VOS_ASSERT(0);
17823 return;
17824 }
17825
17826 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17827 {
17828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17829 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017830 vos_mem_free(pWdaParams);
17831 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017832
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017833 return;
17834}
17835
Jeff Johnson295189b2012-06-20 16:38:30 -070017836#ifdef WLAN_FEATURE_PACKET_FILTERING
17837/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017838 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017839 *
17840 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017841void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017842 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
17843 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017844{
17845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017848 if(NULL == pWdaParams)
17849 {
17850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017851 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017852 VOS_ASSERT(0) ;
17853 return ;
17854 }
17855
17856 vos_mem_free(pWdaParams->wdaMsgParam) ;
17857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17858 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017859 //print a msg, nothing else to do
17860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017861 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017862 return ;
17863}
Jeff Johnson295189b2012-06-20 16:38:30 -070017864/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017865 * FUNCTION: WDA_8023MulticastListReqCallback
17866 * Free memory.
17867 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
17868 */
17869void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
17870{
17871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17872
17873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17874 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17875
17876 if(NULL == pWdaParams)
17877 {
17878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17879 "%s: pWdaParams received NULL", __func__);
17880 VOS_ASSERT(0);
17881 return;
17882 }
17883
17884 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17885 {
17886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17887 vos_mem_free(pWdaParams->wdaMsgParam);
17888 vos_mem_free(pWdaParams);
17889 }
17890
17891 return;
17892}
17893/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017894 * FUNCTION: WDA_Process8023MulticastListReq
17895 * Request to WDI to add 8023 Multicast List
17896 */
17897VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
17898 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
17899{
Jeff Johnson43971f52012-07-17 12:26:56 -070017900 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017901 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
17902 tWDA_ReqParams *pWdaParams ;
17903 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017906 pwdiFltPktSetMcListReqParamsType =
17907 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
17908 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
17909 ) ;
17910 if(NULL == pwdiFltPktSetMcListReqParamsType)
17911 {
17912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017914 return VOS_STATUS_E_NOMEM;
17915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17917 if(NULL == pWdaParams)
17918 {
17919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017921 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
17922 return VOS_STATUS_E_NOMEM;
17923 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017924
Jeff Johnson295189b2012-06-20 16:38:30 -070017925 //
17926 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
17927 //
17928 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070017929 pRcvFltMcAddrList->ulMulticastAddrCnt;
17930
17931 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
17932 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
17933 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
17934 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
17935
Jeff Johnson295189b2012-06-20 16:38:30 -070017936 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
17937 {
17938 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
17939 &(pRcvFltMcAddrList->multicastAddr[i]),
17940 sizeof(tSirMacAddr));
17941 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017942 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
17943 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017944
Jeff Johnson295189b2012-06-20 16:38:30 -070017945 /* Store Params pass it to WDI */
17946 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
17947 pWdaParams->pWdaContext = pWDA;
17948 /* Store param pointer as passed in by caller */
17949 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017950 status = WDI_8023MulticastListReq(
17951 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017952 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017953 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017954 if(IS_WDI_STATUS_FAILURE(status))
17955 {
17956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17957 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17959 vos_mem_free(pWdaParams->wdaMsgParam);
17960 vos_mem_free(pWdaParams);
17961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017962 return CONVERT_WDI2VOS_STATUS(status) ;
17963}
Jeff Johnson295189b2012-06-20 16:38:30 -070017964/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017965 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017966 *
17967 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017968void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017969 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17970 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017971{
17972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017974 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017975 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017976 if(NULL == pWdaParams)
17977 {
17978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017979 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017980 VOS_ASSERT(0) ;
17981 return ;
17982 }
17983
17984 vos_mem_free(pWdaParams->wdaMsgParam) ;
17985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17986 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017987 //print a msg, nothing else to do
17988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017989 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017990 return ;
17991}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017992
17993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017994 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17995 * Free memory.
17996 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017997 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017998void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017999 void* pUserData)
18000{
18001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18002
18003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18004 "<------ %s, wdiStatus: %d",
18005 __func__, wdiStatus);
18006
18007 if (NULL == pWdaParams)
18008 {
18009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18010 "%s: Invalid pWdaParams pointer", __func__);
18011 VOS_ASSERT(0);
18012 return;
18013 }
18014
18015 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18016 {
18017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18018 vos_mem_free(pWdaParams->wdaMsgParam);
18019 vos_mem_free(pWdaParams);
18020 }
18021
18022 return;
18023}
18024
Jeff Johnson295189b2012-06-20 16:38:30 -070018025/*
18026 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18027 * Request to WDI to set Receive Filters
18028 */
18029VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18030 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18031{
Jeff Johnson43971f52012-07-17 12:26:56 -070018032 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018033 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18034 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18035 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18036 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18037 tWDA_ReqParams *pWdaParams ;
18038 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018041 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18042 {
18043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018045 VOS_ASSERT(0);
18046 return VOS_STATUS_E_NOMEM;
18047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18049 if(NULL == pWdaParams)
18050 {
18051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018053 VOS_ASSERT(0);
18054 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18055 return VOS_STATUS_E_NOMEM;
18056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018057 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18058 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18059 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18060 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018061 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18062 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18063
18064 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18065 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018066
18067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18068 "FID %d FT %d NParams %d CT %d",
18069 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18070 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18071 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18072 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018073 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18074 {
18075 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18076 &pRcvPktFilterCfg->paramsData[i],
18077 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018079 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018080 pwdiSetRcvPktFilterReqParamsType->
18081 wdiPktFilterCfg.paramsData[i].protocolLayer,
18082 pwdiSetRcvPktFilterReqParamsType->
18083 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018085 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018086 pwdiSetRcvPktFilterReqParamsType->
18087 wdiPktFilterCfg.paramsData[i].dataOffset,
18088 pwdiSetRcvPktFilterReqParamsType->
18089 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018091 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018092 pwdiSetRcvPktFilterReqParamsType->
18093 wdiPktFilterCfg.paramsData[i].compareData[0],
18094 pwdiSetRcvPktFilterReqParamsType->
18095 wdiPktFilterCfg.paramsData[i].compareData[1],
18096 pwdiSetRcvPktFilterReqParamsType->
18097 wdiPktFilterCfg.paramsData[i].compareData[2],
18098 pwdiSetRcvPktFilterReqParamsType->
18099 wdiPktFilterCfg.paramsData[i].compareData[3],
18100 pwdiSetRcvPktFilterReqParamsType->
18101 wdiPktFilterCfg.paramsData[i].compareData[4],
18102 pwdiSetRcvPktFilterReqParamsType->
18103 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018105 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018106 pwdiSetRcvPktFilterReqParamsType->
18107 wdiPktFilterCfg.paramsData[i].dataMask[0],
18108 pwdiSetRcvPktFilterReqParamsType->
18109 wdiPktFilterCfg.paramsData[i].dataMask[1],
18110 pwdiSetRcvPktFilterReqParamsType->
18111 wdiPktFilterCfg.paramsData[i].dataMask[2],
18112 pwdiSetRcvPktFilterReqParamsType->
18113 wdiPktFilterCfg.paramsData[i].dataMask[3],
18114 pwdiSetRcvPktFilterReqParamsType->
18115 wdiPktFilterCfg.paramsData[i].dataMask[4],
18116 pwdiSetRcvPktFilterReqParamsType->
18117 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018118 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018119 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018120 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018121 /* Store Params pass it to WDI */
18122 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18123 pWdaParams->pWdaContext = pWDA;
18124 /* Store param pointer as passed in by caller */
18125 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018126 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018127 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018128 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018129 if(IS_WDI_STATUS_FAILURE(status))
18130 {
18131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18132 "Failure in SetFilter(),free all the memory,status %d ",status);
18133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18134 vos_mem_free(pWdaParams->wdaMsgParam);
18135 vos_mem_free(pWdaParams);
18136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018137 return CONVERT_WDI2VOS_STATUS(status) ;
18138}
Jeff Johnson295189b2012-06-20 16:38:30 -070018139/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018140 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018141 *
18142 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018143void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018144 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18145 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018146{
18147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18148 tWDA_CbContext *pWDA;
18149 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18150 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18151 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18152 tANI_U8 i;
18153 vos_msg_t vosMsg;
18154
18155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018156 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018157 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18158
Jeff Johnsone7245742012-09-05 17:12:55 -070018159 if(NULL == pRcvFltPktMatchCntRsp)
18160 {
18161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018162 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018163 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018164 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018165 return ;
18166 }
18167
Jeff Johnson295189b2012-06-20 16:38:30 -070018168 if(NULL == pWdaParams)
18169 {
18170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018171 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018172 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018173 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018174 return ;
18175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18177 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018178 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18179 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18180
18181 /* Message Header */
18182 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18183 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18184
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018185 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018186
18187 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18188 {
18189 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18190 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018192 /* VOS message wrapper */
18193 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18194 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18195 vosMsg.bodyval = 0;
18196 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18197 {
18198 /* free the mem and return */
18199 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18200 }
18201
18202 vos_mem_free(pWdaParams->wdaMsgParam) ;
18203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18204 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018205
18206 return;
18207}
18208/*
18209 * FUNCTION: WDA_FilterMatchCountReqCallback
18210 * Free memory and send RSP back to SME.
18211 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18212 */
18213void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18214{
18215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18216 vos_msg_t vosMsg;
18217
18218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18219 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18220
18221 if(NULL == pWdaParams)
18222 {
18223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18224 "%s: pWdaParams received NULL", __func__);
18225 VOS_ASSERT(0);
18226 return;
18227 }
18228
18229 /* VOS message wrapper */
18230 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18231 vosMsg.bodyptr = NULL;
18232 vosMsg.bodyval = 0;
18233
18234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18235 {
18236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18237 vos_mem_free(pWdaParams->wdaMsgParam);
18238 vos_mem_free(pWdaParams);
18239 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18240 }
18241
18242 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018243}
Jeff Johnson295189b2012-06-20 16:38:30 -070018244/*
18245 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18246 * Request to WDI to get PC Filter Match Count
18247 */
18248VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18249{
Jeff Johnson43971f52012-07-17 12:26:56 -070018250 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018251 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18252 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18253 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018255 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018256 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18257 {
18258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018260 VOS_ASSERT(0);
18261 return VOS_STATUS_E_NOMEM;
18262 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18264 if(NULL == pWdaParams)
18265 {
18266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018268 VOS_ASSERT(0);
18269 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18270 return VOS_STATUS_E_NOMEM;
18271 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018272
Yue Ma7f44bbe2013-04-12 11:47:39 -070018273 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18274 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018275
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018276 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18277 pRcvFltPktMatchRsp->bssId,
18278 sizeof(wpt_macAddr));
18279
Jeff Johnson295189b2012-06-20 16:38:30 -070018280 /* Store Params pass it to WDI */
18281 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18282 pWdaParams->pWdaContext = pWDA;
18283 /* Store param pointer as passed in by caller */
18284 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018285 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018286 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018287 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018288 if(IS_WDI_STATUS_FAILURE(status))
18289 {
18290 /* failure returned by WDI API */
18291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18292 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18294 vos_mem_free(pWdaParams) ;
18295 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18296 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018298 return CONVERT_WDI2VOS_STATUS(status) ;
18299}
Jeff Johnson295189b2012-06-20 16:38:30 -070018300/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018301 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018302 *
18303 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018304void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018305 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18306 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018307{
18308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018310 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018311/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18312 if(NULL == pWdaParams)
18313 {
18314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018315 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018316 VOS_ASSERT(0) ;
18317 return ;
18318 }
18319
18320 vos_mem_free(pWdaParams->wdaMsgParam) ;
18321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18322 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018323 //print a msg, nothing else to do
18324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018325 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018326 return ;
18327}
Jeff Johnson295189b2012-06-20 16:38:30 -070018328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018329 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18330 * Free memory.
18331 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18332 */
18333void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18334{
18335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18336
18337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18338 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18339
18340 if(NULL == pWdaParams)
18341 {
18342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18343 "%s: Invalid pWdaParams pointer", __func__);
18344 VOS_ASSERT(0);
18345 return;
18346 }
18347
18348 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18349 {
18350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18351 vos_mem_free(pWdaParams->wdaMsgParam);
18352 vos_mem_free(pWdaParams);
18353 }
18354
18355 return;
18356}
18357/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018358 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18359 * Request to WDI to clear Receive Filters
18360 */
18361VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18362 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18363{
Jeff Johnson43971f52012-07-17 12:26:56 -070018364 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018365 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18366 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18367 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018369 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018370 if(NULL == pwdiRcvFltPktClearReqParamsType)
18371 {
18372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018374 VOS_ASSERT(0);
18375 return VOS_STATUS_E_NOMEM;
18376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18378 if(NULL == pWdaParams)
18379 {
18380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018382 VOS_ASSERT(0);
18383 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18384 return VOS_STATUS_E_NOMEM;
18385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018386 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18387 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018388 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18389 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18390 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18391 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018392
Yue Ma7f44bbe2013-04-12 11:47:39 -070018393 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018394 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018395 /* Store Params pass it to WDI */
18396 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18397 pWdaParams->pWdaContext = pWDA;
18398 /* Store param pointer as passed in by caller */
18399 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018400 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018401 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018402 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018403 if(IS_WDI_STATUS_FAILURE(status))
18404 {
18405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18406 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018408 vos_mem_free(pWdaParams->wdaMsgParam);
18409 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018411 return CONVERT_WDI2VOS_STATUS(status) ;
18412}
18413#endif // WLAN_FEATURE_PACKET_FILTERING
18414
Jeff Johnson295189b2012-06-20 16:38:30 -070018415/*
18416 * FUNCTION: WDA_ProcessSetPowerParamsReq
18417 * Request to WDI to set power params
18418 */
18419VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
18420 tSirSetPowerParamsReq *pPowerParams)
18421{
Jeff Johnson43971f52012-07-17 12:26:56 -070018422 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018423 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
18424 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018425 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018428 if(NULL == pwdiSetPowerParamsReqInfo)
18429 {
18430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018432 VOS_ASSERT(0);
18433 return VOS_STATUS_E_NOMEM;
18434 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18436 if(NULL == pWdaParams)
18437 {
18438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018440 VOS_ASSERT(0);
18441 vos_mem_free(pwdiSetPowerParamsReqInfo);
18442 return VOS_STATUS_E_NOMEM;
18443 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018444
Jeff Johnson295189b2012-06-20 16:38:30 -070018445
18446 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
18447 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070018448 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
18449 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070018450 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
18451 pPowerParams->uListenInterval;
18452 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
18453 pPowerParams->uBcastMcastFilter;
18454 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
18455 pPowerParams->uEnableBET;
18456 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
18457 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070018458 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
18459 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018460 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
18461 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018462
Jeff Johnson295189b2012-06-20 16:38:30 -070018463 /* Store Params pass it to WDI */
18464 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
18465 pWdaParams->pWdaContext = pWDA;
18466 /* Store param pointer as passed in by caller */
18467 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018468 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018469 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018470 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018471 if(IS_WDI_STATUS_FAILURE(status))
18472 {
18473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18474 "Failure in Set power params REQ WDI API, free all the memory " );
18475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18476 vos_mem_free(pWdaParams->wdaMsgParam);
18477 pWdaParams->wdaWdiApiMsgParam = NULL;
18478 pWdaParams->wdaMsgParam = NULL;
18479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018480 return CONVERT_WDI2VOS_STATUS(status) ;
18481}
18482
18483/*
18484 * FUNCTION: WDA_SetTmLevelRspCallback
18485 * Set TM Level response
18486 */
18487void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
18488{
18489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18490
18491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018492 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018493
18494 if(NULL == pWdaParams)
18495 {
18496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018497 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018498 VOS_ASSERT(0) ;
18499 return ;
18500 }
18501
18502 /* Dose not need to send notification to upper layer
18503 * Just free allocated resources */
18504 if( pWdaParams != NULL )
18505 {
18506 if( pWdaParams->wdaWdiApiMsgParam != NULL )
18507 {
18508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18509 }
18510 vos_mem_free(pWdaParams->wdaMsgParam) ;
18511 vos_mem_free(pWdaParams) ;
18512 }
18513}
18514
18515/*
18516 * FUNCTION: WDA_ProcessSetTmLevelReq
18517 * Set TM Level request
18518 */
18519VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
18520 tAniSetTmLevelReq *setTmLevelReq)
18521{
18522 WDI_Status status = WDI_STATUS_SUCCESS ;
18523 tWDA_ReqParams *pWdaParams ;
18524 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
18525 (WDI_SetTmLevelReqType *)vos_mem_malloc(
18526 sizeof(WDI_SetTmLevelReqType)) ;
18527 if(NULL == wdiSetTmLevelReq)
18528 {
18529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018531 VOS_ASSERT(0);
18532 return VOS_STATUS_E_NOMEM;
18533 }
18534
18535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18536 if(NULL == pWdaParams)
18537 {
18538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018540 VOS_ASSERT(0);
18541 vos_mem_free(wdiSetTmLevelReq);
18542 return VOS_STATUS_E_NOMEM;
18543 }
18544
18545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018546 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018547
18548 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
18549 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
18550
18551 pWdaParams->pWdaContext = pWDA;
18552 pWdaParams->wdaMsgParam = setTmLevelReq;
18553 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
18554
18555 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
18556 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
18557
18558 if(IS_WDI_STATUS_FAILURE(status))
18559 {
18560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080018561 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070018562 vos_mem_free(pWdaParams->wdaMsgParam) ;
18563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18564 vos_mem_free(pWdaParams) ;
18565 }
18566
18567 return CONVERT_WDI2VOS_STATUS(status) ;
18568}
18569
18570VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
18571 tpTxControlParams pTxCtrlParam)
18572{
18573 VOS_STATUS wdaStatus;
18574
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018577 if( pTxCtrlParam == NULL )
18578 {
18579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018580 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018581 return VOS_STATUS_E_FAILURE;
18582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018583 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
18584 {
18585 wdaStatus = WDA_SuspendDataTx(pWDA);
18586 }
18587 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
18588 {
18589 wdaStatus = WDA_ResumeDataTx(pWDA);
18590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018591 return wdaStatus;
18592}
18593
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018594void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053018595{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018596 WDI_Status status;
18597 status = WDI_FWLoggingDXEdoneInd(logType);
18598
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053018599 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018600 {
18601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18602 FL("Failure status %d"), status);
18603 }
Mihir Shete5affadc2015-05-29 20:54:57 +053018604}
18605
Jeff Johnson295189b2012-06-20 16:38:30 -070018606 /* FUNCTION WDA_featureCapsExchange
18607 * WDA API to invoke capability exchange between host and FW.
18608 */
18609void WDA_featureCapsExchange(v_PVOID_t pVosContext)
18610{
18611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018612 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018613 WDI_featureCapsExchangeReq( NULL, pVosContext);
18614}
18615
Yathish9f22e662012-12-10 14:21:35 -080018616/* FUNCTION WDA_disableCapablityFeature
18617 * WDA API to diable Active mode offload in host.
18618 */
18619void WDA_disableCapablityFeature(tANI_U8 feature_index)
18620{
18621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18622 "%s:enter", __func__ );
18623 WDI_disableCapablityFeature(feature_index);
18624}
18625
Jeff Johnson295189b2012-06-20 16:38:30 -070018626 /* FUNCTION WDA_getHostWlanFeatCaps
18627 * Wrapper for WDI API, that will return if the feature (enum value).passed
18628 * to this API is supported or not in Host
18629 * return value
18630 * 0 - implies feature is NOT Supported
18631 * any non zero value - implies feature is SUPPORTED
18632 */
18633tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
18634{
18635 return WDI_getHostWlanFeatCaps(featEnumValue);
18636}
18637
18638 /* FUNCTION WDA_getFwWlanFeatCaps
18639 * Wrapper for WDI API, that will return if the feature (enum value).passed
18640 * to this API is supported or not in FW
18641 * return value
18642 * 0 - implies feature is NOT Supported
18643 * any non zero value - implies feature is SUPPORTED
18644 */
18645tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
18646{
18647 return WDI_getFwWlanFeatCaps(featEnumValue);
18648}
18649
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053018650
Jeff Johnson295189b2012-06-20 16:38:30 -070018651/*
18652 * FUNCTION: WDA_shutdown
18653 * Shutdown WDA/WDI without handshaking with Riva.
18654 * Synchronous function.
18655 */
18656VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
18657{
18658 WDI_Status wdiStatus;
18659 //tANI_U8 eventIdx = 0;
18660 VOS_STATUS status = VOS_STATUS_SUCCESS;
18661 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070018662 if (NULL == pWDA)
18663 {
18664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018665 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018666 VOS_ASSERT(0);
18667 return VOS_STATUS_E_FAILURE;
18668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018669 /* FTM mode stay START_STATE */
18670 if( (WDA_READY_STATE != pWDA->wdaState) &&
18671 (WDA_INIT_STATE != pWDA->wdaState) &&
18672 (WDA_START_STATE != pWDA->wdaState) )
18673 {
18674 VOS_ASSERT(0);
18675 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018676
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018677 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070018678 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018679 if(VOS_TRUE == pWDA->wdaTimersCreated)
18680 {
18681 wdaDestroyTimers(pWDA);
18682 pWDA->wdaTimersCreated = VOS_FALSE;
18683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018684 }
Leo Chang9d76f622013-08-23 16:34:52 -070018685 else
18686 {
18687 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018688 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018689
Jeff Johnson295189b2012-06-20 16:38:30 -070018690 /* call WDI shutdown */
18691 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070018692 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
18693 {
18694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18695 "error in WDA Stop" );
18696 status = VOS_STATUS_E_FAILURE;
18697 }
18698 /* WDI stop is synchrnous, shutdown is complete when it returns */
18699 pWDA->wdaState = WDA_STOP_STATE;
18700
Jeff Johnson295189b2012-06-20 16:38:30 -070018701 /* shutdown should perform the stop & close actions. */
18702 /* Destroy the event */
18703 status = vos_event_destroy(&pWDA->txFrameEvent);
18704 if(!VOS_IS_STATUS_SUCCESS(status))
18705 {
18706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018707 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018708 status = VOS_STATUS_E_FAILURE;
18709 }
18710 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
18711 if(!VOS_IS_STATUS_SUCCESS(status))
18712 {
18713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018714 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018715 status = VOS_STATUS_E_FAILURE;
18716 }
18717 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
18718 if(!VOS_IS_STATUS_SUCCESS(status))
18719 {
18720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018721 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018722 status = VOS_STATUS_E_FAILURE;
18723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018724 /* free WDA context */
18725 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
18726 if ( !VOS_IS_STATUS_SUCCESS(status) )
18727 {
18728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18729 "error in WDA close " );
18730 status = VOS_STATUS_E_FAILURE;
18731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018732 return status;
18733}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018734
Jeff Johnsone7245742012-09-05 17:12:55 -070018735/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018736 * FUNCTION: WDA_setNeedShutdown
18737 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070018738 */
18739
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018740void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070018741{
18742 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018743 if(pWDA == NULL)
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 "Could not get the WDA Context pointer" );
18747 return;
18748 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018749 pWDA->needShutdown = TRUE;
18750}
18751/*
18752 * FUNCTION: WDA_needShutdown
18753 * WDA needs a shutdown
18754 */
18755
18756v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
18757{
18758 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018759 if(pWDA == NULL)
18760 {
18761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18762 "Could not get the WDA Context pointer" );
18763 return 0;
18764 }
18765 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070018766}
18767
Mohit Khanna4a70d262012-09-11 16:30:12 -070018768#ifdef WLAN_FEATURE_11AC
18769/*
18770 * FUNCTION: WDA_SetBeaconFilterReqCallback
18771 *
18772 */
18773void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
18774{
18775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018777 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018778 if(NULL == pWdaParams)
18779 {
18780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018781 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018782 VOS_ASSERT(0) ;
18783 return ;
18784 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018785
Mohit Khanna4a70d262012-09-11 16:30:12 -070018786 vos_mem_free(pWdaParams->wdaMsgParam) ;
18787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18788 vos_mem_free(pWdaParams) ;
18789 /*
18790 * No respone required for SetBeaconFilter req so just free the request
18791 * param here
18792 */
18793
18794 return ;
18795}
18796
18797VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
18798 tUpdateVHTOpMode *pData)
18799{
18800 WDI_Status status = WDI_STATUS_SUCCESS ;
18801 tWDA_ReqParams *pWdaParams ;
18802 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
18803 sizeof(WDI_UpdateVHTOpMode)) ;
18804 if(NULL == wdiTemp)
18805 {
18806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018807 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018808 VOS_ASSERT(0);
18809 return VOS_STATUS_E_NOMEM;
18810 }
18811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18812 if(NULL == pWdaParams)
18813 {
18814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018815 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018816 VOS_ASSERT(0);
18817 vos_mem_free(wdiTemp);
18818 return VOS_STATUS_E_NOMEM;
18819 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053018820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18821 "------> %s Opmode = %d and staid = %d" ,
18822 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018823 wdiTemp->opMode = pData->opMode;
18824 wdiTemp->staId = pData->staId;
18825
18826 pWdaParams->pWdaContext = pWDA;
18827 /* Store Req pointer, as this will be used for response */
18828 pWdaParams->wdaMsgParam = (void *)pData;
18829 /* store Params pass it to WDI */
18830 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
18831
18832 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
18833
18834 if(IS_WDI_STATUS_FAILURE(status))
18835 {
18836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18837 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
18838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18839 vos_mem_free(pWdaParams->wdaMsgParam);
18840 vos_mem_free(pWdaParams);
18841 }
18842 return CONVERT_WDI2VOS_STATUS(status) ;
18843}
18844#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018845
18846/*==========================================================================
18847 FUNCTION WDA_TransportChannelDebug
18848
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070018849 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018850 Display Transport Channel debugging information
18851 User may request to display DXE channel snapshot
18852 Or if host driver detects any abnormal stcuk may display
18853
18854 PARAMETERS
schang6295e542013-03-12 15:31:23 -070018855 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080018856 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053018857 debugFlags : Enable stall detect features
18858 defined by WPAL_DeviceDebugFlags
18859 These features may effect
18860 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018861
18862 RETURN VALUE
18863 NONE
18864
18865===========================================================================*/
18866void WDA_TransportChannelDebug
18867(
schang6295e542013-03-12 15:31:23 -070018868 tpAniSirGlobal pMac,
18869 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053018870 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018871)
18872{
Mihir Shete40a55652014-03-02 14:14:47 +053018873 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018874 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018875}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018876
18877/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053018878 FUNCTION WDA_TransportKickDxe
18879
18880 DESCRIPTION
18881 Request Kick Dxe when first hdd TX time out
18882 happens
18883
18884 PARAMETERS
18885 NONE
18886
18887 RETURN VALUE
18888 NONE
18889
18890===========================================================================*/
18891void WDA_TransportKickDxe()
18892{
18893 WDI_TransportKickDxe();
18894 return;
18895}
18896
18897
18898/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018899 FUNCTION WDA_SetEnableSSR
18900
18901 DESCRIPTION
18902 API to enable/disable SSR on WDI timeout
18903
18904 PARAMETERS
18905 enableSSR : enable/disable SSR
18906
18907 RETURN VALUE
18908 NONE
18909
18910===========================================================================*/
18911void WDA_SetEnableSSR(v_BOOL_t enableSSR)
18912{
18913 WDI_SetEnableSSR(enableSSR);
18914}
Leo Chang9056f462013-08-01 19:21:11 -070018915
Agrawal Ashish0552be02016-03-02 18:03:43 +053018916/**
18917 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
18918 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
18919 *
18920 * Return: void
18921 */
18922void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
18923{
18924 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
18925}
18926
Leo Chang9056f462013-08-01 19:21:11 -070018927#ifdef FEATURE_WLAN_LPHB
18928/*
18929 * FUNCTION: WDA_LPHBconfRspCallback
18930 *
18931 */
18932void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
18933{
18934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18935
18936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18937 "<------ %s " ,__func__);
18938 if (NULL == pWdaParams)
18939 {
18940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18941 "%s: pWdaParams received NULL", __func__);
18942 VOS_ASSERT(0) ;
18943 return ;
18944 }
18945
18946 /* Do not need to send notification to upper layer
18947 * Just free allocated resources */
18948 if (pWdaParams != NULL)
18949 {
18950 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18951 {
18952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18953 }
18954 vos_mem_free(pWdaParams->wdaMsgParam) ;
18955 vos_mem_free(pWdaParams) ;
18956 }
18957
18958 return;
18959}
18960
18961/*
18962 * FUNCTION: WDA_ProcessLPHBConfReq
18963 *
18964 */
18965VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
18966 tSirLPHBReq *pData)
18967{
18968 WDI_Status wdiStatus;
18969 tWDA_ReqParams *pWdaParams ;
18970
18971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18972 "------> %s " , __func__);
18973
18974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18975 if (NULL == pWdaParams)
18976 {
18977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18978 "%s: VOS MEM Alloc Failure", __func__);
18979 VOS_ASSERT(0);
18980 vos_mem_free(pData);
18981 return VOS_STATUS_E_NOMEM;
18982 }
18983
18984 pWdaParams->pWdaContext = pWDA;
18985 pWdaParams->wdaMsgParam = (void *)pData;
18986 pWdaParams->wdaWdiApiMsgParam = NULL;
18987
18988 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18989 if (WDI_STATUS_PENDING == wdiStatus)
18990 {
18991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18992 "Pending received for %s:%d ", __func__, __LINE__);
18993 }
18994 else if (WDI_STATUS_SUCCESS != wdiStatus)
18995 {
18996 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18997 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18998 vos_mem_free(pWdaParams->wdaMsgParam);
18999 vos_mem_free(pWdaParams);
19000 }
19001
19002 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19003}
19004#endif /* FEATURE_WLAN_LPHB */
19005
c_hpothu92367912014-05-01 15:18:17 +053019006void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19007 void* pUserData)
19008{
19009 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19010
19011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19012 "<------ %s " ,__func__);
19013 if (NULL == pBcnMissRateInfo)
19014 {
19015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19016 "%s: pWdaParams received NULL", __func__);
19017 VOS_ASSERT(0) ;
19018 return ;
19019 }
19020 if (pBcnMissRateInfo->callback)
19021 {
19022 pBcnMissRateInfo->callback(status, bcnMissRate,
19023 pBcnMissRateInfo->data);
19024 }
19025 vos_mem_free(pUserData);
19026
19027 return;
19028}
19029
19030v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19031 tSirBcnMissRateReq *pData)
19032{
19033 WDI_Status wdiStatus;
19034 tSirBcnMissRateInfo *pBcnMissRateInfo;
19035
19036 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19037 "------> %s " , __func__);
19038
19039 pBcnMissRateInfo =
19040 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19041 if (NULL == pBcnMissRateInfo)
19042 {
19043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19044 "%s: VOS MEM Alloc Failure", __func__);
19045 VOS_ASSERT(0);
19046 vos_mem_free(pData);
19047 return;
19048 }
19049
19050 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19051 pBcnMissRateInfo->data = pData->data;
19052
19053 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19054 WDA_GetBcnMissRateCallback,
19055 pData->bssid);
19056 if (WDI_STATUS_PENDING == wdiStatus)
19057 {
19058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19059 "Pending received for %s:%d ", __func__, __LINE__);
19060 }
19061 else if (WDI_STATUS_SUCCESS != wdiStatus)
19062 {
19063 if (pBcnMissRateInfo->callback)
19064 {
19065 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19066 -1, pBcnMissRateInfo->data);
19067 }
19068 }
19069 vos_mem_free(pData);
19070}
Dino Mycle41bdc942014-06-10 11:30:24 +053019071
19072#ifdef WLAN_FEATURE_EXTSCAN
19073
19074/*==========================================================================
19075 FUNCTION WDA_EXTScanStartRspCallback
19076
19077 DESCRIPTION
19078 API to send EXTScan Start Response to HDD
19079
19080 PARAMETERS
19081 pEventData: Response from FW
19082 pUserData:
19083===========================================================================*/
19084void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19085{
19086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19087 tWDA_CbContext *pWDA = NULL;
19088 void *pCallbackContext;
19089 tpAniSirGlobal pMac;
19090
19091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19092 "%s:", __func__);
19093 if (NULL == pWdaParams)
19094 {
19095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19096 "%s: pWdaParams received NULL", __func__);
19097 VOS_ASSERT(0);
19098 return;
19099 }
19100
19101 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19102
19103 if (NULL == pWDA)
19104 {
19105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19106 "%s: pWDA received NULL", __func__);
19107 VOS_ASSERT(0);
19108 goto error;
19109 }
19110
19111 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19112 if (NULL == pMac)
19113 {
19114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19115 "%s:pMac is NULL", __func__);
19116 VOS_ASSERT(0);
19117 goto error;
19118 }
19119
19120 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19121
19122 if (pMac->sme.pEXTScanIndCb)
19123 {
19124 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19125 pEventData);
19126 }
19127 else
19128 {
19129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19130 "%s:HDD callback is null", __func__);
19131 VOS_ASSERT(0);
19132 }
19133
19134error:
19135
19136 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19137 {
19138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19139 }
19140 if (pWdaParams->wdaMsgParam != NULL)
19141 {
19142 vos_mem_free(pWdaParams->wdaMsgParam);
19143 }
19144 vos_mem_free(pWdaParams) ;
19145
19146 return;
19147}
19148
19149/*==========================================================================
19150 FUNCTION WDA_EXTScanStopRspCallback
19151
19152 DESCRIPTION
19153 API to send EXTScan Stop Response to HDD
19154
19155 PARAMETERS
19156 pEventData: Response from FW
19157 pUserData:
19158===========================================================================*/
19159void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19160{
19161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19162 tWDA_CbContext *pWDA = NULL;
19163 void *pCallbackContext;
19164 tpAniSirGlobal pMac;
19165
19166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19167 "%s:", __func__);
19168 if (NULL == pWdaParams)
19169 {
19170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19171 "%s: pWdaParams received NULL", __func__);
19172 VOS_ASSERT(0);
19173 return;
19174 }
19175
19176 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19177
19178 if (NULL == pWDA)
19179 {
19180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19181 "%s: pWDA received NULL", __func__);
19182 VOS_ASSERT(0);
19183 goto error;
19184 }
19185
19186 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19187 if (NULL == pMac)
19188 {
19189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19190 "%s:pMac is NULL", __func__);
19191 VOS_ASSERT(0);
19192 goto error;
19193 }
19194 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19195
19196 if (pMac->sme.pEXTScanIndCb)
19197 {
19198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19199 "%s:HDD call back function called", __func__);
19200 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
19201 pEventData);
19202 }
19203 else
19204 {
19205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19206 "%s:HDD callback is null", __func__);
19207 VOS_ASSERT(0);
19208 }
19209
19210error:
19211
19212 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19213 {
19214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19215 }
19216 if (pWdaParams->wdaMsgParam != NULL)
19217 {
19218 vos_mem_free(pWdaParams->wdaMsgParam);
19219 }
19220 vos_mem_free(pWdaParams) ;
19221
19222
19223 return;
19224}
19225
19226/*==========================================================================
19227 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19228
19229 DESCRIPTION
19230 API to send EXTScan Get Cached Results Response to HDD
19231
19232 PARAMETERS
19233 pEventData: Response from FW
19234 pUserData:
19235===========================================================================*/
19236void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19237{
19238 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19239 tWDA_CbContext *pWDA = NULL;
19240 void *pCallbackContext;
19241 tpAniSirGlobal pMac;
19242
19243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19244 "%s: ", __func__);
19245 if (NULL == pWdaParams)
19246 {
19247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19248 "%s: pWdaParams received NULL", __func__);
19249 VOS_ASSERT(0);
19250 return;
19251 }
19252
19253 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19254
19255 if (NULL == pWDA)
19256 {
19257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19258 "%s: pWDA received NULL", __func__);
19259 VOS_ASSERT(0);
19260 goto error;
19261 }
19262
19263 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19264 if (NULL == pMac)
19265 {
19266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19267 "%s:pMac is NULL", __func__);
19268 VOS_ASSERT(0);
19269 goto error;
19270 }
19271
19272 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19273
19274 if (pMac->sme.pEXTScanIndCb)
19275 {
19276 pMac->sme.pEXTScanIndCb(pCallbackContext,
19277 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19278 pEventData);
19279 }
19280 else
19281 {
19282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19283 "%s:HDD callback is null", __func__);
19284 VOS_ASSERT(0);
19285 }
19286
19287
19288error:
19289
19290 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19291 {
19292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19293 }
19294 if (pWdaParams->wdaMsgParam != NULL)
19295 {
19296 vos_mem_free(pWdaParams->wdaMsgParam);
19297 }
19298 vos_mem_free(pWdaParams) ;
19299
19300 return;
19301}
19302
19303/*==========================================================================
19304 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19305
19306 DESCRIPTION
19307 API to send EXTScan Get Capabilities Response to HDD
19308
19309 PARAMETERS
19310 pEventData: Response from FW
19311 pUserData:
19312===========================================================================*/
19313void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19314{
19315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19316 tWDA_CbContext *pWDA = NULL;
19317 void *pCallbackContext;
19318 tpAniSirGlobal pMac;
19319
19320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19321 "%s:", __func__);
19322 if (NULL == pWdaParams)
19323 {
19324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19325 "%s: pWdaParams received NULL", __func__);
19326 VOS_ASSERT(0);
19327 return;
19328 }
19329
19330 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19331
19332 if (NULL == pWDA)
19333 {
19334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19335 "%s: pWDA received NULL", __func__);
19336 VOS_ASSERT(0);
19337 goto error;
19338 }
19339
19340 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19341 if (NULL == pMac)
19342 {
19343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19344 "%s:pMac is NULL", __func__);
19345 VOS_ASSERT(0);
19346 goto error;
19347 }
19348
19349 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19350
19351 if (pMac->sme.pEXTScanIndCb)
19352 {
19353 pMac->sme.pEXTScanIndCb(pCallbackContext,
19354 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19355 pEventData);
19356 }
19357 else
19358 {
19359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19360 "%s:HDD callback is null", __func__);
19361 VOS_ASSERT(0);
19362 }
19363
19364
19365error:
19366
19367 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19368 {
19369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19370 }
19371 if (pWdaParams->wdaMsgParam != NULL)
19372 {
19373 vos_mem_free(pWdaParams->wdaMsgParam);
19374 }
19375 vos_mem_free(pWdaParams) ;
19376
19377 return;
19378}
19379
19380/*==========================================================================
19381 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19382
19383 DESCRIPTION
19384 API to send EXTScan Set BSSID Hotlist Response to HDD
19385
19386 PARAMETERS
19387 pEventData: Response from FW
19388 pUserData:
19389===========================================================================*/
19390void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19391{
19392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19393 tWDA_CbContext *pWDA = NULL;
19394 void *pCallbackContext;
19395 tpAniSirGlobal pMac;
19396
19397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19398 "%s: ", __func__);
19399 if (NULL == pWdaParams)
19400 {
19401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19402 "%s: pWdaParams received NULL", __func__);
19403 VOS_ASSERT(0) ;
19404 return;
19405 }
19406
19407 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19408
19409 if (NULL == pWDA)
19410 {
19411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19412 "%s: pWDA received NULL", __func__);
19413 VOS_ASSERT(0);
19414 goto error;
19415 }
19416
19417 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19418 if (NULL == pMac)
19419 {
19420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19421 "%s:pMac is NULL", __func__);
19422 VOS_ASSERT(0);
19423 goto error;
19424 }
19425
19426 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19427
19428 if (pMac->sme.pEXTScanIndCb)
19429 {
19430 pMac->sme.pEXTScanIndCb(pCallbackContext,
19431 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
19432 pEventData);
19433 }
19434 else
19435 {
19436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19437 "%s:HDD callback is null", __func__);
19438 VOS_ASSERT(0);
19439 }
19440
19441
19442error:
19443
19444 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19445 {
19446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19447 }
19448 if (pWdaParams->wdaMsgParam != NULL)
19449 {
19450 vos_mem_free(pWdaParams->wdaMsgParam);
19451 }
19452 vos_mem_free(pWdaParams) ;
19453
19454 return;
19455}
19456
19457/*==========================================================================
19458 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
19459
19460 DESCRIPTION
19461 API to send EXTScan ReSet BSSID Hotlist Response to HDD
19462
19463 PARAMETERS
19464 pEventData: Response from FW
19465 pUserData:
19466===========================================================================*/
19467void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19468{
19469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19470 tWDA_CbContext *pWDA = NULL;
19471 void *pCallbackContext;
19472 tpAniSirGlobal pMac;
19473
19474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19475 "%s:", __func__);
19476 if (NULL == pWdaParams)
19477 {
19478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19479 "%s: pWdaParams received NULL", __func__);
19480 VOS_ASSERT(0) ;
19481 return;
19482 }
19483
19484 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19485
19486 if (NULL == pWDA)
19487 {
19488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19489 "%s: pWDA received NULL", __func__);
19490 VOS_ASSERT(0);
19491 goto error;
19492 }
19493
19494 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19495 if (NULL == pMac)
19496 {
19497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19498 "%s:pMac is NULL", __func__);
19499 VOS_ASSERT(0);
19500 goto error;
19501 }
19502
19503 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19504
19505 if (pMac->sme.pEXTScanIndCb)
19506 {
19507 pMac->sme.pEXTScanIndCb(pCallbackContext,
19508 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
19509 pEventData);
19510 }
19511 else
19512 {
19513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19514 "%s:HDD callback is null", __func__);
19515 VOS_ASSERT(0);
19516 }
19517
19518
19519error:
19520
19521 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19522 {
19523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19524 }
19525 if (pWdaParams->wdaMsgParam != NULL)
19526 {
19527 vos_mem_free(pWdaParams->wdaMsgParam);
19528 }
19529 vos_mem_free(pWdaParams) ;
19530
19531 return;
19532}
19533
19534/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019535 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
19536
19537 DESCRIPTION
19538 API to send EXTScan Set SSID Hotlist Response to HDD
19539
19540 PARAMETERS
19541 pEventData: Response from FW
19542 pUserData:
19543===========================================================================*/
19544void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19545{
19546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19547 tWDA_CbContext *pWDA = NULL;
19548 void *pCallbackContext;
19549 tpAniSirGlobal pMac;
19550
19551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19552 "%s: ", __func__);
19553 if (NULL == pWdaParams)
19554 {
19555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19556 "%s: pWdaParams received NULL", __func__);
19557 VOS_ASSERT(0) ;
19558 return;
19559 }
19560
19561 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19562
19563 if (NULL == pWDA)
19564 {
19565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19566 "%s: pWDA received NULL", __func__);
19567 VOS_ASSERT(0);
19568 goto error;
19569 }
19570
19571 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19572 if (NULL == pMac)
19573 {
19574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19575 "%s:pMac is NULL", __func__);
19576 VOS_ASSERT(0);
19577 goto error;
19578 }
19579
19580 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19581
19582 if (pMac->sme.pEXTScanIndCb)
19583 {
19584 pMac->sme.pEXTScanIndCb(pCallbackContext,
19585 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
19586 pEventData);
19587 }
19588 else
19589 {
19590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19591 "%s:HDD callback is null", __func__);
19592 VOS_ASSERT(0);
19593 }
19594
19595
19596error:
19597
19598 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19599 {
19600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19601 }
19602 if (pWdaParams->wdaMsgParam != NULL)
19603 {
19604 vos_mem_free(pWdaParams->wdaMsgParam);
19605 }
19606 vos_mem_free(pWdaParams) ;
19607
19608 return;
19609}
19610
19611/*==========================================================================
19612 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
19613
19614 DESCRIPTION
19615 API to send EXTScan ReSet SSID Hotlist Response to HDD
19616
19617 PARAMETERS
19618 pEventData: Response from FW
19619 pUserData:
19620===========================================================================*/
19621void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19622{
19623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19624 tWDA_CbContext *pWDA = NULL;
19625 void *pCallbackContext;
19626 tpAniSirGlobal pMac;
19627
19628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19629 "%s:", __func__);
19630 if (NULL == pWdaParams)
19631 {
19632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19633 "%s: pWdaParams received NULL", __func__);
19634 VOS_ASSERT(0) ;
19635 return;
19636 }
19637
19638 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19639
19640 if (NULL == pWDA)
19641 {
19642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19643 "%s: pWDA received NULL", __func__);
19644 VOS_ASSERT(0);
19645 goto error;
19646 }
19647
19648 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19649 if (NULL == pMac)
19650 {
19651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19652 "%s:pMac is NULL", __func__);
19653 VOS_ASSERT(0);
19654 goto error;
19655 }
19656
19657 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19658
19659 if (pMac->sme.pEXTScanIndCb)
19660 {
19661 pMac->sme.pEXTScanIndCb(pCallbackContext,
19662 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
19663 pEventData);
19664 }
19665 else
19666 {
19667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19668 "%s:HDD callback is null", __func__);
19669 VOS_ASSERT(0);
19670 }
19671
19672
19673error:
19674
19675 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19676 {
19677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19678 }
19679 if (pWdaParams->wdaMsgParam != NULL)
19680 {
19681 vos_mem_free(pWdaParams->wdaMsgParam);
19682 }
19683 vos_mem_free(pWdaParams) ;
19684
19685 return;
19686}
19687
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019688/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053019689 FUNCTION WDA_ProcessEXTScanStartReq
19690
19691 DESCRIPTION
19692 API to send EXTScan Start Request to WDI
19693
19694 PARAMETERS
19695 pWDA: Pointer to WDA context
19696 wdaRequest: Pointer to EXTScan req parameters
19697===========================================================================*/
19698VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
19699 tSirEXTScanStartReqParams *wdaRequest)
19700{
19701 WDI_Status status = WDI_STATUS_SUCCESS;
19702 tWDA_ReqParams *pWdaParams;
19703
19704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19705 "%s: ", __func__);
19706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19707 if (NULL == pWdaParams)
19708 {
19709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19710 "%s: VOS MEM Alloc Failure", __func__);
19711 VOS_ASSERT(0);
19712 return VOS_STATUS_E_NOMEM;
19713 }
19714 pWdaParams->pWdaContext = pWDA;
19715 pWdaParams->wdaMsgParam = wdaRequest;
19716 pWdaParams->wdaWdiApiMsgParam = NULL;
19717
19718 status = WDI_EXTScanStartReq((void *)wdaRequest,
19719 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
19720 (void *)pWdaParams);
19721 if (IS_WDI_STATUS_FAILURE(status))
19722 {
19723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19724 "Failure to request. Free all the memory " );
19725 vos_mem_free(pWdaParams->wdaMsgParam);
19726 vos_mem_free(pWdaParams);
19727 }
19728 return CONVERT_WDI2VOS_STATUS(status);
19729}
19730
19731/*==========================================================================
19732 FUNCTION WDA_ProcessEXTScanStopReq
19733
19734 DESCRIPTION
19735 API to send EXTScan Start Request to WDI
19736
19737 PARAMETERS
19738 pWDA: Pointer to WDA context
19739 wdaRequest: Pointer to EXTScan req parameters
19740===========================================================================*/
19741VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
19742 tSirEXTScanStopReqParams *wdaRequest)
19743{
19744 WDI_Status status = WDI_STATUS_SUCCESS;
19745 tWDA_ReqParams *pWdaParams;
19746
19747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19748 "%s:", __func__);
19749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19750 if (NULL == pWdaParams)
19751 {
19752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19753 "%s: VOS MEM Alloc Failure", __func__);
19754 VOS_ASSERT(0);
19755 return VOS_STATUS_E_NOMEM;
19756 }
19757 pWdaParams->pWdaContext = pWDA;
19758 pWdaParams->wdaMsgParam = wdaRequest;
19759 pWdaParams->wdaWdiApiMsgParam = NULL;
19760
19761 status = WDI_EXTScanStopReq((void *)wdaRequest,
19762 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
19763 (void *)pWdaParams);
19764 if (IS_WDI_STATUS_FAILURE(status))
19765 {
19766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19767 "Failure to request. Free all the memory " );
19768 vos_mem_free(pWdaParams->wdaMsgParam);
19769 vos_mem_free(pWdaParams);
19770 }
19771 return CONVERT_WDI2VOS_STATUS(status);
19772}
19773
19774/*==========================================================================
19775 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
19776
19777 DESCRIPTION
19778 API to send EXTScan Get Cached Results Request to WDI
19779
19780 PARAMETERS
19781 pWDA: Pointer to WDA context
19782 wdaRequest: Pointer to EXTScan req parameters
19783===========================================================================*/
19784VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
19785 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
19786{
19787 WDI_Status status = WDI_STATUS_SUCCESS;
19788 tWDA_ReqParams *pWdaParams;
19789
19790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19791 "%s: ", __func__);
19792 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19793 if (NULL == pWdaParams)
19794 {
19795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19796 "%s: VOS MEM Alloc Failure", __func__);
19797 VOS_ASSERT(0);
19798 return VOS_STATUS_E_NOMEM;
19799 }
19800 pWdaParams->pWdaContext = pWDA;
19801 pWdaParams->wdaMsgParam = wdaRequest;
19802 pWdaParams->wdaWdiApiMsgParam = NULL;
19803
19804 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
19805 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
19806 (void *)pWdaParams);
19807 if (IS_WDI_STATUS_FAILURE(status))
19808 {
19809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19810 "Failure to request. Free all the memory " );
19811 vos_mem_free(pWdaParams->wdaMsgParam);
19812 vos_mem_free(pWdaParams);
19813 }
19814 return CONVERT_WDI2VOS_STATUS(status);
19815}
19816
19817/*==========================================================================
19818 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
19819
19820 DESCRIPTION
19821 API to send EXTScan Get Capabilities Request to WDI
19822
19823 PARAMETERS
19824 pWDA: Pointer to WDA context
19825 wdaRequest: Pointer to EXTScan req parameters
19826===========================================================================*/
19827VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
19828 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
19829{
19830 WDI_Status status = WDI_STATUS_SUCCESS;
19831 tWDA_ReqParams *pWdaParams;
19832
19833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19834 "%s:", __func__);
19835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19836 if (NULL == pWdaParams)
19837 {
19838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19839 "%s: VOS MEM Alloc Failure", __func__);
19840 VOS_ASSERT(0);
19841 return VOS_STATUS_E_NOMEM;
19842 }
19843 pWdaParams->pWdaContext = pWDA;
19844 pWdaParams->wdaMsgParam = wdaRequest;
19845 pWdaParams->wdaWdiApiMsgParam = NULL;
19846
19847 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
19848 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
19849 (void *)pWdaParams);
19850 if (IS_WDI_STATUS_FAILURE(status))
19851 {
19852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19853 "Failure to request. Free all the memory " );
19854 vos_mem_free(pWdaParams->wdaMsgParam);
19855 vos_mem_free(pWdaParams);
19856 }
19857 return CONVERT_WDI2VOS_STATUS(status);
19858}
19859
19860/*==========================================================================
19861 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
19862
19863 DESCRIPTION
19864 API to send Set BSSID Hotlist Request to WDI
19865
19866 PARAMETERS
19867 pWDA: Pointer to WDA context
19868 wdaRequest: Pointer to EXTScan req parameters
19869===========================================================================*/
19870VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19871 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
19872{
19873 WDI_Status status = WDI_STATUS_SUCCESS;
19874 tWDA_ReqParams *pWdaParams;
19875
19876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19877 "%s: ", __func__);
19878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19879 if (NULL == pWdaParams)
19880 {
19881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19882 "%s: VOS MEM Alloc Failure", __func__);
19883 VOS_ASSERT(0);
19884 return VOS_STATUS_E_NOMEM;
19885 }
19886 pWdaParams->pWdaContext = pWDA;
19887 pWdaParams->wdaMsgParam = wdaRequest;
19888 pWdaParams->wdaWdiApiMsgParam = NULL;
19889
19890 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
19891 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
19892 (void *)pWdaParams);
19893 if (IS_WDI_STATUS_FAILURE(status))
19894 {
19895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19896 "Failure to request. Free all the memory " );
19897 vos_mem_free(pWdaParams->wdaMsgParam);
19898 vos_mem_free(pWdaParams);
19899 }
19900 return CONVERT_WDI2VOS_STATUS(status);
19901}
19902
19903/*==========================================================================
19904 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
19905
19906 DESCRIPTION
19907 API to send Reset BSSID Hotlist Request to WDI
19908
19909 PARAMETERS
19910 pWDA: Pointer to WDA context
19911 wdaRequest: Pointer to EXTScan req parameters
19912===========================================================================*/
19913VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19914 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
19915{
19916 WDI_Status status = WDI_STATUS_SUCCESS;
19917 tWDA_ReqParams *pWdaParams;
19918
19919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19920 "%s:", __func__);
19921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19922 if (NULL == pWdaParams)
19923 {
19924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19925 "%s: VOS MEM Alloc Failure", __func__);
19926 VOS_ASSERT(0);
19927 return VOS_STATUS_E_NOMEM;
19928 }
19929 pWdaParams->pWdaContext = pWDA;
19930 pWdaParams->wdaMsgParam = wdaRequest;
19931 pWdaParams->wdaWdiApiMsgParam = NULL;
19932
19933 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
19934 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
19935 (void *)pWdaParams);
19936 if (IS_WDI_STATUS_FAILURE(status))
19937 {
19938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19939 "Failure to request. Free all the memory " );
19940 vos_mem_free(pWdaParams->wdaMsgParam);
19941 vos_mem_free(pWdaParams);
19942 }
19943 return CONVERT_WDI2VOS_STATUS(status);
19944}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019945
19946/*==========================================================================
19947 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
19948
19949 DESCRIPTION
19950 API to send Set SSID Hotlist Request to WDI
19951
19952 PARAMETERS
19953 pWDA: Pointer to WDA context
19954 wdaRequest: Pointer to EXTScan req parameters
19955===========================================================================*/
19956VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
19957 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
19958{
19959 WDI_Status status = WDI_STATUS_SUCCESS;
19960 tWDA_ReqParams *pWdaParams;
19961
19962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19963 "%s: ", __func__);
19964 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19965 if (NULL == pWdaParams)
19966 {
19967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19968 "%s: VOS MEM Alloc Failure", __func__);
19969 VOS_ASSERT(0);
19970 return VOS_STATUS_E_NOMEM;
19971 }
19972 pWdaParams->pWdaContext = pWDA;
19973 pWdaParams->wdaMsgParam = wdaRequest;
19974 pWdaParams->wdaWdiApiMsgParam = NULL;
19975
19976 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
19977 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19978 (void *)pWdaParams);
19979 if (IS_WDI_STATUS_FAILURE(status))
19980 {
19981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19982 "Failure to request. Free all the memory " );
19983 vos_mem_free(pWdaParams->wdaMsgParam);
19984 vos_mem_free(pWdaParams);
19985 }
19986 return CONVERT_WDI2VOS_STATUS(status);
19987}
19988
19989/*==========================================================================
19990 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19991
19992 DESCRIPTION
19993 API to send Reset SSID Hotlist Request to WDI
19994
19995 PARAMETERS
19996 pWDA: Pointer to WDA context
19997 wdaRequest: Pointer to EXTScan req parameters
19998===========================================================================*/
19999VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20000 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20001{
20002 WDI_Status status = WDI_STATUS_SUCCESS;
20003 tWDA_ReqParams *pWdaParams;
20004
20005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20006 "%s:", __func__);
20007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20008 if (NULL == pWdaParams)
20009 {
20010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20011 "%s: VOS MEM Alloc Failure", __func__);
20012 VOS_ASSERT(0);
20013 return VOS_STATUS_E_NOMEM;
20014 }
20015 pWdaParams->pWdaContext = pWDA;
20016 pWdaParams->wdaMsgParam = wdaRequest;
20017 pWdaParams->wdaWdiApiMsgParam = NULL;
20018
20019 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20020 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20021 (void *)pWdaParams);
20022 if (IS_WDI_STATUS_FAILURE(status))
20023 {
20024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20025 "Failure to request. Free all the memory " );
20026 vos_mem_free(pWdaParams->wdaMsgParam);
20027 vos_mem_free(pWdaParams);
20028 }
20029 return CONVERT_WDI2VOS_STATUS(status);
20030}
20031
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020032/*==========================================================================
20033 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20034
20035 DESCRIPTION
20036 API to send Reset SSID Hotlist Request to WDI
20037
20038 PARAMETERS
20039 pWDA: Pointer to WDA context
20040 wdaRequest: Pointer to EXTScan req parameters
20041===========================================================================*/
20042VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20043 tSirHighPriorityDataInfoInd *wdaRequest)
20044{
20045 WDI_Status status = WDI_STATUS_SUCCESS;
20046
20047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20048 "%s:", __func__);
20049
20050 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20051 if (WDI_STATUS_PENDING == status)
20052 {
20053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20054 FL("pending status received "));
20055 }
20056 else if (WDI_STATUS_SUCCESS_SYNC != status)
20057 {
20058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20059 FL("Failure status %d"), status);
20060 }
20061 return CONVERT_WDI2VOS_STATUS(status);
20062}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020063
Dino Mycle41bdc942014-06-10 11:30:24 +053020064#endif /* WLAN_FEATURE_EXTSCAN */
20065
Sunil Duttbd736ed2014-05-26 21:19:41 +053020066#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20067
20068/*==========================================================================
20069 FUNCTION WDA_LLStatsSetRspCallback
20070
20071 DESCRIPTION
20072 API to process set link layer statistics response from FW
20073
20074 PARAMETERS
20075 pRsp: Pointer to set link layer statistics response
20076 pUserData: Pointer to user data
20077
20078 RETURN VALUE
20079 NONE
20080
20081===========================================================================*/
20082void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20083{
20084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20085
20086
20087 if (NULL == pWdaParams)
20088 {
20089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20090 "%s: pWdaParams received NULL", __func__);
20091 VOS_ASSERT(0) ;
20092 return ;
20093 }
20094
20095 /* Do not need to send notification to upper layer
20096 * Just free allocated resources */
20097 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20098 {
20099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20100 }
20101 if (pWdaParams->wdaMsgParam != NULL)
20102 {
20103 vos_mem_free(pWdaParams->wdaMsgParam);
20104 }
20105 vos_mem_free(pWdaParams) ;
20106
20107 return;
20108}
20109
20110/*==========================================================================
20111 FUNCTION WDA_ProcessLLStatsSetReq
20112
20113 DESCRIPTION
20114 API to send Set Link Layer Stats request to WDI
20115
20116 PARAMETERS
20117 pWDA: Pointer to WDA context
20118 wdaRequest: Pointer to set Link Layer Stats req parameters
20119===========================================================================*/
20120VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20121 tSirLLStatsSetReq *wdaRequest)
20122{
20123 WDI_Status status = WDI_STATUS_SUCCESS;
20124 tWDA_ReqParams *pWdaParams;
20125
20126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20127 if (NULL == pWdaParams)
20128 {
20129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20130 "%s: VOS MEM Alloc Failure", __func__);
20131 VOS_ASSERT(0);
20132 return VOS_STATUS_E_NOMEM;
20133 }
20134 pWdaParams->pWdaContext = pWDA;
20135 pWdaParams->wdaMsgParam = wdaRequest;
20136 pWdaParams->wdaWdiApiMsgParam = NULL;
20137
20138 status = WDI_LLStatsSetReq((void *)wdaRequest,
20139 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20140 (void *)pWdaParams);
20141 if (IS_WDI_STATUS_FAILURE(status))
20142 {
20143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20144 "Failure to request. Free all the memory " );
20145 vos_mem_free(pWdaParams->wdaMsgParam);
20146 vos_mem_free(pWdaParams);
20147 }
20148 return CONVERT_WDI2VOS_STATUS(status);
20149}
20150
20151/*==========================================================================
20152 FUNCTION WDA_LLStatsGetRspCallback
20153
20154 DESCRIPTION
20155 API to process get link layer statistics response from FW
20156
20157 PARAMETERS
20158 pRsp: Pointer to get link layer statistics response
20159 pUserData: Pointer to user data
20160
20161 RETURN VALUE
20162 NONE
20163
20164===========================================================================*/
20165void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20166{
20167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20168
20169 if (NULL == pWdaParams)
20170 {
20171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20172 "%s: pWdaParams received NULL", __func__);
20173 VOS_ASSERT(0) ;
20174 return ;
20175 }
20176
20177 /* Do not need to send notification to upper layer
20178 * Just free allocated resources */
20179 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20180 {
20181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20182 }
20183 if (pWdaParams->wdaMsgParam != NULL)
20184 {
20185 vos_mem_free(pWdaParams->wdaMsgParam);
20186 }
20187 vos_mem_free(pWdaParams) ;
20188
20189 return;
20190}
20191
20192/*==========================================================================
20193 FUNCTION WDA_ProcessLLStatsGetReq
20194
20195 DESCRIPTION
20196 API to send Get Link Layer Stats request to WDI
20197
20198 PARAMETERS
20199 pWDA: Pointer to WDA context
20200 wdaRequest: Pointer to get Link Layer Stats req parameters
20201===========================================================================*/
20202VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20203 tSirLLStatsGetReq *wdaRequest)
20204{
20205 WDI_Status status = WDI_STATUS_SUCCESS;
20206 tWDA_ReqParams *pWdaParams;
20207
20208 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20209 if (NULL == pWdaParams)
20210 {
20211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20212 "%s: VOS MEM Alloc Failure", __func__);
20213 VOS_ASSERT(0);
20214 return VOS_STATUS_E_NOMEM;
20215 }
20216 pWdaParams->pWdaContext = pWDA;
20217 pWdaParams->wdaMsgParam = wdaRequest;
20218 pWdaParams->wdaWdiApiMsgParam = NULL;
20219
20220 status = WDI_LLStatsGetReq((void *) wdaRequest,
20221 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20222 (void *)pWdaParams);
20223 if (IS_WDI_STATUS_FAILURE(status))
20224 {
20225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20226 "Failure to request. Free all the memory " );
20227 vos_mem_free(pWdaParams->wdaMsgParam);
20228 vos_mem_free(pWdaParams);
20229 }
20230 return CONVERT_WDI2VOS_STATUS(status);
20231}
20232
20233/*==========================================================================
20234 FUNCTION WDA_LLStatsClearRspCallback
20235
20236 DESCRIPTION
20237 API to process clear link layer statistics response from FW
20238
20239 PARAMETERS
20240 pRsp: Pointer to clear link layer statistics response
20241 pUserData: Pointer to user data
20242
20243 RETURN VALUE
20244 NONE
20245
20246===========================================================================*/
20247void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20248{
20249 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20250
20251
20252 if (NULL == pWdaParams)
20253 {
20254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20255 "%s: pWdaParams received NULL", __func__);
20256 VOS_ASSERT(0) ;
20257 return ;
20258 }
20259 /* Do not need to send notification to upper layer
20260 * Just free allocated resources */
20261 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20262 {
20263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20264 }
20265 if (pWdaParams->wdaMsgParam != NULL)
20266 {
20267 vos_mem_free(pWdaParams->wdaMsgParam);
20268 }
20269 vos_mem_free(pWdaParams) ;
20270 return;
20271}
20272
20273/*==========================================================================
20274 FUNCTION WDA_ProcessLLStatsClearReq
20275
20276 DESCRIPTION
20277 API to send Clear Link Layer Stats request to WDI
20278
20279 PARAMETERS
20280 pWDA: Pointer to WDA context
20281 wdaRequest: Pointer to earLink Layer Stats req
20282===========================================================================*/
20283VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20284 tSirLLStatsClearReq *wdaRequest)
20285{
20286 WDI_Status status = WDI_STATUS_SUCCESS;
20287 tWDA_ReqParams *pWdaParams;
20288
20289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20290 if (NULL == pWdaParams)
20291 {
20292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20293 "%s: VOS MEM Alloc Failure", __func__);
20294 VOS_ASSERT(0);
20295 return VOS_STATUS_E_NOMEM;
20296 }
20297 pWdaParams->pWdaContext = pWDA;
20298 pWdaParams->wdaMsgParam = wdaRequest;
20299 pWdaParams->wdaWdiApiMsgParam = NULL;
20300
20301 status = WDI_LLStatsClearReq((void *) wdaRequest,
20302 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20303 (void *)pWdaParams);
20304 if (IS_WDI_STATUS_FAILURE(status))
20305 {
20306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20307 "Failure to request. Free all the memory " );
20308 vos_mem_free(pWdaParams->wdaMsgParam);
20309 vos_mem_free(pWdaParams);
20310 }
20311 return CONVERT_WDI2VOS_STATUS(status);
20312}
20313
20314#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020315
Abhishek Singh85b74712014-10-08 11:38:19 +053020316void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20317{
20318 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20319
20320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20321 "<------ %s " ,__func__);
20322 if (NULL == fwStatsinfo)
20323 {
20324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20325 "%s: pWdaParams received NULL", __func__);
20326 VOS_ASSERT(0);
20327 return;
20328 }
20329
20330 if(fwStatsinfo->callback)
20331 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20332
20333 vos_mem_free(pUserData);
20334 return;
20335}
20336
20337
20338v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20339 tSirFWStatsGetReq *pData)
20340{
20341
20342 WDI_Status wdiStatus;
20343 tSirFWStatsInfo *fwStatsinfo;
20344
20345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20346 "------> %s" , __func__);
20347
20348 fwStatsinfo =
20349 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20350 if (NULL == fwStatsinfo)
20351 {
20352 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20353 "%s: VOS MEM Alloc Failure", __func__);
20354 VOS_ASSERT(0);
20355 vos_mem_free(pData);
20356 return;
20357 }
20358
20359 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20360 fwStatsinfo->data = pData->data;
20361
20362 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20363 WDA_FWStatsGetRspCallback,
20364 pData->stats);
20365 if (WDI_STATUS_PENDING == wdiStatus)
20366 {
20367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20368 "Pending received for %s:%d ", __func__, __LINE__);
20369 }
20370 else if (WDI_STATUS_SUCCESS != wdiStatus)
20371 {
20372 if (fwStatsinfo->callback)
20373 {
20374 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20375 }
20376 vos_mem_free(fwStatsinfo);
20377 }
20378 vos_mem_free(pData);
20379}
20380
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020381/*==========================================================================
20382 FUNCTION WDA_EncryptMsgRspCallback
20383
20384 DESCRIPTION
20385 API to send Encrypt message response to HDD
20386
20387 PARAMETERS
20388 pEventData: Response from FW
20389 pUserData: Data sent to firmware as part of request
20390===========================================================================*/
20391void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20392 void* pUserData)
20393{
20394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20395 tWDA_CbContext *pWDA = NULL;
20396 tpAniSirGlobal pMac;
20397 vos_msg_t vosMsg;
20398 tpSirEncryptedDataRspParams pEncRspParams;
20399 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20400
20401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20402 FL("%s:"), __func__);
20403 if (NULL == pWdaParams)
20404 {
20405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20406 FL("%s: pWdaParams received NULL"), __func__);
20407 VOS_ASSERT(0);
20408 return;
20409 }
20410
20411 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20412
20413 if (NULL == pWDA)
20414 {
20415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20416 FL("%s: pWDA received NULL"), __func__);
20417 VOS_ASSERT(0);
20418 goto error;
20419 }
20420
20421 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20422 if (NULL == pMac)
20423 {
20424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20425 FL("%s:pMac is NULL"), __func__);
20426 VOS_ASSERT(0);
20427 goto error;
20428 }
20429
20430 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
20431
20432 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
20433 if (NULL == pEncRspParams)
20434 {
20435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20436 FL("%s: VOS MEM Alloc Failure"), __func__);
20437 VOS_ASSERT(0);
20438 goto error;
20439 }
20440
20441 /* Message Header */
20442 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
20443 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
20444 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
20445 pEncryptedDataRsp->encryptedPayload.length;
20446 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
20447 pEncryptedDataRsp->encryptedPayload.data,
20448 pEncryptedDataRsp->encryptedPayload.length);
20449
20450 /* VOS message wrapper */
20451 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
20452 vosMsg.bodyptr = (void *)pEncRspParams;
20453 vosMsg.bodyval = 0;
20454
20455 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20456 {
20457 /* free the mem */
20458 vos_mem_free((v_VOID_t *) pEncRspParams);
20459 }
20460
20461error:
20462
20463 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20464 {
20465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20466 }
20467 if (pWdaParams->wdaMsgParam != NULL)
20468 {
20469 vos_mem_free(pWdaParams->wdaMsgParam);
20470 }
20471 vos_mem_free(pWdaParams) ;
20472
20473 return;
20474}
20475/*==========================================================================
20476 FUNCTION WDA_ProcessEncryptMsgReq
20477
20478 DESCRIPTION
20479 API to send Encrypt message Request to WDI
20480
20481 PARAMETERS
20482 pWDA: Pointer to WDA context
20483 wdaRequest: Pointer to Encrypt_msg req parameters
20484===========================================================================*/
20485VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
20486 u8 *wdaRequest)
20487{
20488 WDI_Status status = WDI_STATUS_SUCCESS;
20489 tWDA_ReqParams *pWdaParams;
20490
20491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20492 FL("%s: "), __func__);
20493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20494 if (NULL == pWdaParams)
20495 {
20496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20497 FL("%s: VOS MEM Alloc Failure"), __func__);
20498 VOS_ASSERT(0);
20499 return VOS_STATUS_E_NOMEM;
20500 }
20501 pWdaParams->pWdaContext = pWDA;
20502 pWdaParams->wdaMsgParam = wdaRequest;
20503 pWdaParams->wdaWdiApiMsgParam = NULL;
20504
20505 status = WDI_EncryptMsgReq((void *)wdaRequest,
20506 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
20507 (void *)pWdaParams);
20508 if (IS_WDI_STATUS_FAILURE(status))
20509 {
20510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20511 FL("Failure to request. Free all the memory " ));
20512 vos_mem_free(pWdaParams->wdaMsgParam);
20513 vos_mem_free(pWdaParams);
20514 }
20515 return CONVERT_WDI2VOS_STATUS(status);
20516}
Abhishek Singh41988ba2015-05-25 19:42:29 +053020517/*==========================================================================
20518 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
20519
20520 DESCRIPTION
20521 API to enable/disable RTS/CTS for different modes.
20522
20523 PARAMETERS
20524 pWDA: Pointer to WDA context
20525 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
20526===========================================================================*/
20527
20528VOS_STATUS
20529WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
20530 tANI_U32 rtsCtsVal)
20531{
20532 WDI_Status status;
20533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20534 FL("---> %s"), __func__);
20535 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
20536 if (WDI_STATUS_PENDING == status)
20537 {
20538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20539 FL("pending status received "));
20540 }
20541 else if (WDI_STATUS_SUCCESS_SYNC != status)
20542 {
20543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20544 FL("Failure status %d"), status);
20545 }
20546 return CONVERT_WDI2VOS_STATUS(status) ;
20547}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020548
20549void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053020550{
20551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020552 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053020553
20554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20555 "<------ %s " ,__func__);
20556 if (NULL == pWdaParams)
20557 {
20558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20559 "%s: pWdaParams received NULL", __func__);
20560 VOS_ASSERT(0) ;
20561 return ;
20562 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020563 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
20564 if (pData != NULL) {
20565 pData->callback(pData->magic, pData->cmpVar);
20566 vos_mem_free(pWdaParams->wdaMsgParam);
20567 }
Katya Nigamf0511f62015-05-05 16:40:57 +053020568 vos_mem_free(pWdaParams) ;
20569
20570 return;
20571}
20572
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020573VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053020574{
20575
20576 WDI_Status status = WDI_STATUS_SUCCESS;
20577 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020578 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053020579
20580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20581 FL("%s: "), __func__);
20582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20583 if (NULL == pWdaParams)
20584 {
20585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20586 FL("%s: VOS MEM Alloc Failure"), __func__);
20587 VOS_ASSERT(0);
20588 return VOS_STATUS_E_NOMEM;
20589 }
20590 pWdaParams->pWdaContext = pWDA;
20591 pWdaParams->wdaMsgParam = wdaRequest;
20592 pWdaParams->wdaWdiApiMsgParam = NULL;
20593
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020594 status = WDI_MonStartReq(pMonModeData->data,
20595 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020596 (void *)pWdaParams);
20597 if (IS_WDI_STATUS_FAILURE(status))
20598 {
20599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20600 "Failure to request. Free all the memory " );
20601 vos_mem_free(pWdaParams->wdaMsgParam);
20602 vos_mem_free(pWdaParams);
20603 }
20604 return CONVERT_WDI2VOS_STATUS(status);
20605}
20606
Katya Nigamf0511f62015-05-05 16:40:57 +053020607VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
20608{
20609
20610 WDI_Status status = WDI_STATUS_SUCCESS;
20611 tWDA_ReqParams *pWdaParams;
20612
20613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20614 FL("%s: "), __func__);
20615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20616 if (NULL == pWdaParams)
20617 {
20618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20619 FL("%s: VOS MEM Alloc Failure"), __func__);
20620 VOS_ASSERT(0);
20621 return VOS_STATUS_E_NOMEM;
20622 }
20623 pWdaParams->pWdaContext = pWDA;
20624 pWdaParams->wdaMsgParam = wdaRequest;
20625 pWdaParams->wdaWdiApiMsgParam = NULL;
20626
Bhargav Shah1ae5de02015-07-20 13:32:31 +053020627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20628 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020629 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020630 (void *)pWdaParams);
20631
20632 if (IS_WDI_STATUS_FAILURE(status))
20633 {
20634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20635 "Failure to request. Free all the memory " );
20636 vos_mem_free(pWdaParams->wdaMsgParam);
20637 vos_mem_free(pWdaParams);
20638 }
20639 return CONVERT_WDI2VOS_STATUS(status);
20640}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053020641
20642VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
20643{
20644 WDI_Status status;
20645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20646 FL("---> %s"), __func__);
20647 status = WDI_EnableDisableCAEventInd(val);
20648 if (WDI_STATUS_PENDING == status)
20649 {
20650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20651 FL("pending status received "));
20652 }
20653 else if (WDI_STATUS_SUCCESS_SYNC != status)
20654 {
20655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20656 FL("Failure status %d"), status);
20657 }
20658 return CONVERT_WDI2VOS_STATUS(status) ;
20659}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020660
20661/*==========================================================================
20662 FUNCTION WDA_WifiConfigSetRspCallback
20663
20664 DESCRIPTION
20665 API to process set WifiConfig response from FW
20666
20667 PARAMETERS
20668 pRsp: Pointer to set WifiConfig response
20669 pUserData: Pointer to user data
20670
20671 RETURN VALUE
20672 NONE
20673
20674===========================================================================*/
20675void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
20676{
20677 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20678
20679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20680 "<------ %s " ,__func__);
20681
20682 if(NULL == pWdaParams)
20683 {
20684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20685 "%s: pWdaParams received NULL", __func__);
20686 VOS_ASSERT(0);
20687 return ;
20688 }
20689
20690 if(NULL == pWdaParams->wdaMsgParam)
20691 {
20692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20693 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
20694 VOS_ASSERT(0);
20695 vos_mem_free(pWdaParams);
20696 return ;
20697 }
20698
20699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20700 vos_mem_free(pWdaParams->wdaMsgParam);
20701 vos_mem_free(pWdaParams);
20702
20703 return;
20704}
20705
20706/*==========================================================================
20707 FUNCTION WDA_ProcessWifiConfigReq
20708
20709 DESCRIPTION
20710 API to send Set WifiConfig params request to WDI
20711
20712 PARAMETERS
20713 pWDA: Pointer to WDA context
20714 wdaRequest: Pointer to set WifiConfig req parameters
20715===========================================================================*/
20716
20717VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
20718 tSetWifiConfigParams *pwdaWificonfig)
20719{
20720 WDI_Status status = WDI_STATUS_SUCCESS;
20721 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
20722 tWDA_ReqParams *pWdaParams ;
20723 WDI_Status wstatus;
20724
20725 /* Sanity Check*/
20726 if(NULL == pwdaWificonfig)
20727 {
20728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20729 "%s: tSetWifiConfigParams received NULL", __func__);
20730 VOS_ASSERT(0) ;
20731 return VOS_STATUS_E_FAULT;
20732 }
20733
20734 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
20735 sizeof(WDI_WifiConfigSetReqType));
20736 if(NULL == pwdiWifConfigSetReqParams)
20737 {
20738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20739 "%s: VOS MEM Alloc Failure", __func__);
20740 VOS_ASSERT(0);
20741 vos_mem_free(pwdaWificonfig);
20742 return VOS_STATUS_E_NOMEM;
20743 }
20744
20745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20746 if(NULL == pWdaParams)
20747 {
20748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20749 "%s: VOS MEM Alloc Failure", __func__);
20750 VOS_ASSERT(0);
20751 vos_mem_free(pwdiWifConfigSetReqParams);
20752 vos_mem_free(pwdaWificonfig);
20753 return VOS_STATUS_E_NOMEM;
20754 }
20755 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
20756 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
20757 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
20758 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
20759
20760 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053020761 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020762 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
20763
20764 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
20765 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
20766 pWdaParams);
20767 if(IS_WDI_STATUS_FAILURE(wstatus))
20768 {
20769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20770 "Failure in sendind WifiConfigReq, free all the memory" );
20771 status = CONVERT_WDI2VOS_STATUS(wstatus);
20772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20773 vos_mem_free(pWdaParams->wdaMsgParam);
20774 vos_mem_free(pWdaParams);
20775 }
20776
20777 return status;
20778
20779}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020780
20781#ifdef FEATURE_OEM_DATA_SUPPORT
20782/*
20783 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
20784 * Request to WDI.
20785 */
20786VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
20787 tOemDataReqNewConfig *pOemDataReqNewConfig)
20788{
20789 VOS_STATUS status = VOS_STATUS_SUCCESS;
20790 WDI_Status wstatus;
20791 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
20792
20793 /* Sanity Check*/
20794 if(NULL == pOemDataReqNewConfig)
20795 {
20796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20797 "%s: pOemDataReqNewConfig received NULL", __func__);
20798 VOS_ASSERT(0) ;
20799 return VOS_STATUS_E_FAULT;
20800 }
20801
20802 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
20803 sizeof(WDI_OemDataReqNewConfig));
20804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20805 "------> %s " ,__func__);
20806
20807 if(NULL == wdiOemDataReqNewConfig)
20808 {
20809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20810 "%s: VOS MEM Alloc Failure", __func__);
20811 VOS_ASSERT(0);
20812 vos_mem_free(pOemDataReqNewConfig);
20813 return VOS_STATUS_E_NOMEM;
20814 }
20815
20816 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
20817 sizeof(WDI_OemDataReqNewConfig));
20818
20819 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
20820
20821 if (WDI_STATUS_PENDING == wstatus)
20822 {
20823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20824 FL("pending status received "));
20825 }
20826 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
20827 {
20828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20829 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
20830 vos_mem_free(wdiOemDataReqNewConfig);
20831 }
20832
20833 // Free the memory allocated in sme_OemDataReqNew
20834 vos_mem_free(pOemDataReqNewConfig);
20835
20836 return status;
20837}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020838
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053020839void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
20840 void *pUserData)
20841{
20842 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
20843 (tSirAntennaDiversitySelectionInfo *)pUserData;
20844
20845 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
20846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20847 "<------ %s " ,__func__);
20848 if (NULL == pAntennaDivSelInfo)
20849 {
20850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20851 "%s: pWdaParams received NULL", __func__);
20852 VOS_ASSERT(0) ;
20853 return ;
20854 }
20855 if (NULL == resParams)
20856 {
20857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20858 "%s: resParams received NULL", __func__);
20859 VOS_ASSERT(0) ;
20860 return ;
20861 }
20862
20863 if (pAntennaDivSelInfo->callback)
20864 {
20865 if (WDI_STATUS_SUCCESS == status)
20866 {
20867 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
20868 pAntennaDivSelInfo->data);
20869 }
20870 else
20871 {
20872 pAntennaDivSelInfo->callback(-1,
20873 pAntennaDivSelInfo->data);
20874 }
20875 }
20876
20877 vos_mem_free(pUserData);
20878 return;
20879}
20880
20881/*
20882 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
20883 * Request to WDI.
20884 */
20885v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
20886 tSirAntennaDiversitySelectionReq *pData)
20887{
20888 WDI_Status wdiStatus;
20889 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
20890
20891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20892 "------> %s " , __func__);
20893
20894 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
20895 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
20896 if (NULL == pAntennaDivSelInfo)
20897 {
20898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20899 "%s: VOS MEM Alloc Failure", __func__);
20900 VOS_ASSERT(0);
20901 vos_mem_free(pData);
20902 return;
20903 }
20904
20905 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
20906 pAntennaDivSelInfo->data = pData->data;
20907
20908 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
20909 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
20910
20911 if (WDI_STATUS_PENDING == wdiStatus)
20912 {
20913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20914 "Pending received for %s:%d ", __func__, __LINE__);
20915 }
20916 else if (WDI_STATUS_SUCCESS != wdiStatus)
20917 {
20918 if (pAntennaDivSelInfo->callback)
20919 {
20920 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
20921 }
20922 }
20923
20924 vos_mem_free(pData);
20925 return;
20926}
20927
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053020928/*
20929 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
20930 * Request to WDI.
20931 */
20932VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
20933 tModifyRoamParamsReqParams *params)
20934{
20935 WDI_Status status;
20936
20937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20938 FL("---> %s"), __func__);
20939
20940 if (NULL == params)
20941 {
20942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20943 FL("tModifyRoamParamsReqParams is received NULL"));
20944 return VOS_STATUS_E_NOMEM;
20945 }
20946
20947 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
20948 if (WDI_STATUS_PENDING == status)
20949 {
20950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20951 FL("pending status received "));
20952 }
20953 else if (WDI_STATUS_SUCCESS_SYNC != status)
20954 {
20955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20956 FL("Failure status %d"), status);
20957 }
20958 vos_mem_free(params);
20959 return CONVERT_WDI2VOS_STATUS(status) ;
20960}
20961
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053020962#endif