blob: 706940d42fff01cff46b89700a823ba80f1279be [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) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
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);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530180VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
181 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700182void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530183void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
184void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
186void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
187#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700188#ifdef WLAN_FEATURE_PACKET_FILTERING
189static VOS_STATUS WDA_Process8023MulticastListReq (
190 tWDA_CbContext *pWDA,
191 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
196 );
197static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
198 tWDA_CbContext *pWDA,
199 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
200 );
201static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
202 tWDA_CbContext *pWDA,
203 tSirRcvFltPktClearParam *pRcvFltPktClearParam
204 );
205#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700206VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700207static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
208 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
210 v_U8_t *pDefaultKeyId,
211 v_U8_t *pNumKeys,
212 WDI_KeysType *pWdiKeys );
213
214#ifdef WLAN_FEATURE_GTK_OFFLOAD
215static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
216static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
217#endif // WLAN_FEATURE_GTK_OFFLOAD
218
c_hpothu92367912014-05-01 15:18:17 +0530219v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
220 tSirBcnMissRateReq *pData);
221
Jeff Johnson295189b2012-06-20 16:38:30 -0700222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530233
Abhishek Singh00b71972016-01-07 10:51:04 +0530234#ifdef WLAN_FEATURE_RMC
235void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
236 v_PVOID_t pData);
237#endif /* WLAN_FEATURE_RMC */
238
Dino Mycle41bdc942014-06-10 11:30:24 +0530239#ifdef WLAN_FEATURE_EXTSCAN
240VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
241 tSirEXTScanStartReqParams *wdaRequest);
242VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
243 tSirEXTScanStopReqParams *wdaRequest);
244VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
245 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
246VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
247 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
248VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
249 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
250VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
251 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530252VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
253 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
254VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
255 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530256VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
257 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530258#endif /* WLAN_FEATURE_EXTSCAN */
259
Sunil Duttbd736ed2014-05-26 21:19:41 +0530260#ifdef WLAN_FEATURE_LINK_LAYER_STATS
261VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
262 tSirLLStatsSetReq *wdaRequest);
263
264VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
265 tSirLLStatsGetReq *wdaRequest);
266
267VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
268 tSirLLStatsClearReq *wdaRequest);
269#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530270
271v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
272 tSirFWStatsGetReq *wdaRequest);
273
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530274VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
275 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530276VOS_STATUS
277WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
278 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530279
c_manjeecfd1efb2015-09-25 19:32:34 +0530280VOS_STATUS
281WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
282 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530283
Katya Nigamf0511f62015-05-05 16:40:57 +0530284VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
285VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530286VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530287
288VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
289 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530290
291VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
292 tOemDataReqNewConfig *pOemDataReqNewConfig);
293
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530294
295v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
296 tSirAntennaDiversitySelectionReq *pData);
297
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530298VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
299 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530300/*
301 * FUNCTION: WDA_ProcessNanRequest
302 * Process NAN request
303 */
304VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
305 tNanRequest *wdaRequest)
306{
307 WDI_Status status = WDI_STATUS_SUCCESS;
308 tWDA_ReqParams *pWdaParams;
309 WDI_NanRequestType *wdiRequest = NULL;
310 size_t wdiReqLength = sizeof(WDI_NanRequestType)
311 - sizeof(wdiRequest->request_data)
312 + wdaRequest->request_data_len;
313
314 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
315
316 if (NULL == wdiRequest)
317 {
318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
319 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
320 wdiReqLength);
321 vos_mem_free(wdaRequest);
322 return VOS_STATUS_E_NOMEM;
323 }
324
325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
326 "WDA: Process Nan Request length: %zu", wdiReqLength);
327
328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
329 if (NULL == pWdaParams)
330 {
331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
332 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
333 VOS_ASSERT(0);
334 vos_mem_free(wdaRequest);
335 vos_mem_free(wdiRequest);
336 return VOS_STATUS_E_NOMEM;
337 }
338
339 wdiRequest->request_data_len = wdaRequest->request_data_len;
340
341 vos_mem_copy( wdiRequest->request_data,
342 wdaRequest->request_data,
343 wdaRequest->request_data_len);
344
345 vos_mem_free(wdaRequest);
346
347 pWdaParams->pWdaContext = pWDA;
348 pWdaParams->wdaMsgParam = NULL;
349 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
350
351 status = WDI_NanRequest(wdiRequest, pWdaParams);
352
353 if (IS_WDI_STATUS_FAILURE(status))
354 {
355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
356 "Failure to request. Free all the memory " );
357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
358 vos_mem_free(pWdaParams);
359 }
360
361 return CONVERT_WDI2VOS_STATUS(status) ;
362}
363
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530364/**
365 * wda_state_info_dump() - prints state information of wda layer
366 */
367static void wda_state_info_dump(void)
368{
369 v_CONTEXT_t vos_ctx_ptr = NULL;
370 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530371
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
373 "<------ %s " ,__func__);
374
375 /* Get the Global VOSS Context */
376 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
377
378 if (NULL != vos_ctx_ptr)
379 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
380 vos_ctx_ptr );
381 else {
382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
383 "%s: Invalid Global VOSS Context", __func__);
384 VOS_ASSERT(0);
385 return;
386 }
387
388 if (NULL != wda)
389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
390 "wdaState: %d linkState: %d", wda->wdaState,
391 wda->linkState);
392 else {
393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
394 "%s: Invalid WDA Context", __func__);
395 VOS_ASSERT(0);
396 }
397}
398
399/**
400 * wda_register_debug_callback() - registration function for wda layer
401 * to print wda state information
402 */
403static void wda_register_debug_callback(void)
404{
405 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
406}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530407
Jeff Johnson295189b2012-06-20 16:38:30 -0700408/*
409 * FUNCTION: WDA_open
410 * Allocate the WDA context
411 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530412VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 tMacOpenParameters *pMacParams )
414{
415 tWDA_CbContext *wdaContext;
416 VOS_STATUS status;
417 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530419 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700420 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
421 if(!VOS_IS_STATUS_SUCCESS(status))
422 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
424 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 return VOS_STATUS_E_NOMEM;
426 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 /*__asm int 3;*/
428 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
429
430 /* Initialize data structures */
431 wdaContext->pVosContext = pVosContext;
432 wdaContext->wdaState = WDA_INIT_STATE;
433 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530434 vos_lock_init(&wdaContext->mgmt_pkt_lock);
435
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* Initialize WDA-WDI synchronization event */
437 status = vos_event_init(&wdaContext->wdaWdiEvent);
438 if(!VOS_IS_STATUS_SUCCESS(status))
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800441 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800442 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* Init Frame transfer event */
445 status = vos_event_init(&wdaContext->txFrameEvent);
446 if(!VOS_IS_STATUS_SUCCESS(status))
447 {
448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800449 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800450 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 status = vos_event_init(&wdaContext->suspendDataTxEvent);
453 if(!VOS_IS_STATUS_SUCCESS(status))
454 {
455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800456 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800457 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700458 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
460 if(!VOS_IS_STATUS_SUCCESS(status))
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800463 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800464 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530468 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 &wdiDevCapability, pMacParams->driverType))
470 {
471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
472 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800473 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 }
475 else
476 {
477 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
478 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
479 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 /* update max STA in WDA used for BA */
481 wdaContext->wdaMaxSta = pMacParams->maxStation;
482 /* store the frameTransRequired flag in wdaContext, to send this to HAL
483 * in WDA_Start
484 */
485 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
486 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530487
488 wda_register_debug_callback();
489
Jeff Johnson295189b2012-06-20 16:38:30 -0700490 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800491
492error:
493 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
494 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700495}
496
Jeff Johnson295189b2012-06-20 16:38:30 -0700497/*
498 * FUNCTION: WDA_preStart
499 * Trigger DAL-AL to start CFG download
500 */
501VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
502{
503 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
504 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 /*
506 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
507 */
508 wdaMsg.type = WNI_CFG_DNLD_REQ ;
509 wdaMsg.bodyptr = NULL;
510 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 /* post the message.. */
512 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
513 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
514 {
515 vosStatus = VOS_STATUS_E_BADMSG;
516 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 return( vosStatus );
518}
Jeff Johnson295189b2012-06-20 16:38:30 -0700519/*
520 * FUNCTION: WDA_wdiStartCallback
521 * Once WDI_Start is finished, WDI start callback will be called by WDI
522 * to indicate completion of WDI_Start.
523 */
524void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
525 void *pVosContext)
526{
527 tWDA_CbContext *wdaContext;
528 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 if (NULL == pVosContext)
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 return;
534 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
536 if (NULL == wdaContext)
537 {
538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700539 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 return;
541 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700542 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
543 {
544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700545 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 }
547 else
548 {
549 wdaContext->wdaState = WDA_START_STATE;
550 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* extract and save version information from the Start Response */
552 wdaContext->wcnssWlanCompiledVersion.major =
553 wdiRspParams->wlanCompiledVersion.major;
554 wdaContext->wcnssWlanCompiledVersion.minor =
555 wdiRspParams->wlanCompiledVersion.minor;
556 wdaContext->wcnssWlanCompiledVersion.version =
557 wdiRspParams->wlanCompiledVersion.version;
558 wdaContext->wcnssWlanCompiledVersion.revision =
559 wdiRspParams->wlanCompiledVersion.revision;
560 wdaContext->wcnssWlanReportedVersion.major =
561 wdiRspParams->wlanReportedVersion.major;
562 wdaContext->wcnssWlanReportedVersion.minor =
563 wdiRspParams->wlanReportedVersion.minor;
564 wdaContext->wcnssWlanReportedVersion.version =
565 wdiRspParams->wlanReportedVersion.version;
566 wdaContext->wcnssWlanReportedVersion.revision =
567 wdiRspParams->wlanReportedVersion.revision;
568 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
569 wdiRspParams->wcnssSoftwareVersion,
570 sizeof(wdaContext->wcnssSoftwareVersionString));
571 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
572 wdiRspParams->wcnssHardwareVersion,
573 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* Notify WDA_start that WDI_Start has completed */
575 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700576 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 {
578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700579 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 return;
582}
583
Jeff Johnson295189b2012-06-20 16:38:30 -0700584/*
585 * FUNCTION: WDA_start
586 * Prepare TLV configuration and call WDI_Start.
587 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700588VOS_STATUS WDA_start(v_PVOID_t pVosContext)
589{
590 tWDA_CbContext *wdaContext;
591 VOS_STATUS status;
592 WDI_Status wdiStatus;
593 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 if (NULL == pVosContext)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700597 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 return VOS_STATUS_E_FAILURE;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
601 if (NULL == wdaContext)
602 {
603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700604 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 return VOS_STATUS_E_FAILURE;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* Non-FTM mode, WDA status for START must be INIT
608 * FTM mode, WDA Status for START can be INIT or STOP */
609 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
610 (WDA_STOP_STATE != wdaContext->wdaState) )
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700614 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 return VOS_STATUS_E_FAILURE;
616 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 /* initialize the wdiStartParam. Note that we can create this on
618 the stack since we won't exit until WDI_Start() completes or
619 times out */
620 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 /* prepare the config TLV for the WDI */
623 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
624 if ( !VOS_IS_STATUS_SUCCESS(status) )
625 {
626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700627 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 return VOS_STATUS_E_FAILURE;
629 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 /* note from here onwards if an error occurs we must
631 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
633 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
634 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 /* initialize the WDA-WDI synchronization event */
636 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 /* call WDI start */
638 wdiStatus = WDI_Start(&wdiStartParam,
639 (WDI_StartRspCb)WDA_wdiStartCallback,
640 (v_VOID_t *)pVosContext);
641 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700644 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 vos_mem_free(wdiStartParam.pConfigBuffer);
646 return VOS_STATUS_E_FAILURE;
647 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 /* wait for WDI start to invoke our callback */
649 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
650 WDA_WDI_START_TIMEOUT );
651 if ( !VOS_IS_STATUS_SUCCESS(status) )
652 {
653 if ( VOS_STATUS_E_TIMEOUT == status )
654 {
655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700656 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 }
658 else
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
661 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700662 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 }
664 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530665 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* we no longer need the config TLV */
669 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* if we are not in the START state then WDI_Start() failed */
671 if (WDA_START_STATE != wdaContext->wdaState)
672 {
673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700674 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 return VOS_STATUS_E_FAILURE;
676 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700677 /* FTM mode does not need to monitor BA activity */
678 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
679 {
680 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800681 if(VOS_STATUS_SUCCESS == status)
682 {
683 wdaContext->wdaTimersCreated = VOS_TRUE;
684 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530685 else
686 {
687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
688 FL("wda create timers failed"));
689 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 }
Leo Chang9d76f622013-08-23 16:34:52 -0700691 else
692 {
693 vos_event_init(&wdaContext->ftmStopDoneEvent);
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 return status;
696}
697
Jeff Johnson295189b2012-06-20 16:38:30 -0700698/*
699 * FUNCTION: WDA_prepareConfigTLV
700 * Function to prepare CFG for DAL(WDA)
701 */
702VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
703 WDI_StartReqParamsType *wdiStartParams )
704{
705 /* get pMac to acess CFG data base */
706 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
707 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
708 tHalCfg *tlvStruct = NULL ;
709 tANI_U8 *tlvStructStart = NULL ;
710 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
711 v_PVOID_t *configParam;
712 tANI_U32 configParamSize;
713 tANI_U32 *configDataValue;
714 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700715 tANI_U8 i;
716
Jeff Johnson295189b2012-06-20 16:38:30 -0700717 if ((NULL == pMac)||(NULL == wdaContext))
718 {
719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700720 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 VOS_ASSERT(0);
722 return VOS_STATUS_E_FAILURE;
723 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
725 WNI_CFG_STA_ID_LEN +
726 WNI_CFG_EDCA_WME_ACBK_LEN +
727 WNI_CFG_EDCA_WME_ACBE_LEN +
728 WNI_CFG_EDCA_WME_ACVI_LEN +
729 WNI_CFG_EDCA_WME_ACVO_LEN +
730 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 /* malloc memory for all configs in one shot */
732 configParam = vos_mem_malloc(configParamSize);
733
734 if(NULL == configParam )
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700737 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 VOS_ASSERT(0) ;
739 return VOS_STATUS_E_NOMEM;
740 }
741 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 tlvStruct = (tHalCfg *)configParam;
744 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 /* TODO: Remove Later */
746 /* QWLAN_HAL_CFG_STA_ID */
747 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
748 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
749 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
750 eSIR_SUCCESS)
751 {
752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
753 "Failed to get value for WNI_CFG_STA_ID");
754 goto handle_failure;
755 }
756 tlvStruct->length = strLength ;
757 /* calculate the pad bytes to have the CFG in aligned format */
758 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
759 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
763 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
767 != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
776 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
780 eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
789 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
793 != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length)) ;
801
802 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
803 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
807 configDataValue ) != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_CAL_PERIOD */
816 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
820 != eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_CAL_PERIOD");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 /* QWLAN_HAL_CFG_CAL_CONTROL */
829 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
833 != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_CAL_CONTROL");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_PROXIMITY */
842 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
846 != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_PROXIMITY");
850 goto handle_failure;
851 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
855 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
859 != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
868 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
872 eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
881 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
894 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
898 eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
907 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
908 tlvStruct->length = sizeof(tANI_U32);
909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
910 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
911 eSIR_SUCCESS)
912 {
913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
914 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
915 goto handle_failure;
916 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700917 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
918 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700919 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
920 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
921 tlvStruct->length = sizeof(tANI_U32);
922 configDataValue = (tANI_U32 *)(tlvStruct + 1);
923 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
924 eSIR_SUCCESS)
925 {
926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
927 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
928 goto handle_failure;
929 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700930 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
931 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700932 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
933 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
934 tlvStruct->length = sizeof(tANI_U32);
935 configDataValue = (tANI_U32 *)(tlvStruct + 1);
936 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
937 configDataValue ) != eSIR_SUCCESS)
938 {
939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
940 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
941 goto handle_failure;
942 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
944 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700945 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
946 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
947 tlvStruct->length = sizeof(tANI_U32);
948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
949 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
950 configDataValue ) != eSIR_SUCCESS)
951 {
952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
953 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
954 goto handle_failure;
955 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
957 + sizeof(tHalCfg) + tlvStruct->length));
958
959 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
960 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
961 tlvStruct->length = sizeof(tANI_U32);
962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
963 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
964 configDataValue ) != eSIR_SUCCESS)
965 {
966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
967 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
968 goto handle_failure;
969 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
971 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700972 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
973 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
974 tlvStruct->length = sizeof(tANI_U32);
975 configDataValue = (tANI_U32 *)(tlvStruct + 1);
976 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
977 configDataValue ) != eSIR_SUCCESS)
978 {
979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
980 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
981 goto handle_failure;
982 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
984 + sizeof(tHalCfg) + tlvStruct->length));
985
986 /* QWLAN_HAL_CFG_FIXED_RATE */
987 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
988 tlvStruct->length = sizeof(tANI_U32);
989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
990 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
991 != eSIR_SUCCESS)
992 {
993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
994 "Failed to get value for WNI_CFG_FIXED_RATE");
995 goto handle_failure;
996 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700997 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
998 + sizeof(tHalCfg) + tlvStruct->length));
999
1000 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1001 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1002 tlvStruct->length = sizeof(tANI_U32);
1003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1004 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1005 != eSIR_SUCCESS)
1006 {
1007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1008 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1009 goto handle_failure;
1010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length));
1013
1014 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1015 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1016 tlvStruct->length = sizeof(tANI_U32);
1017 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1018 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1019 configDataValue ) != eSIR_SUCCESS)
1020 {
1021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1022 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1023 goto handle_failure;
1024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1026 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1028 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1029 tlvStruct->length = sizeof(tANI_U32);
1030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1031 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1032 configDataValue ) != eSIR_SUCCESS)
1033 {
1034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1035 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1036 goto handle_failure;
1037 }
1038 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1041 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1042 tlvStruct->length = sizeof(tANI_U32);
1043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1044 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1045 configDataValue ) != eSIR_SUCCESS)
1046 {
1047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1048 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1049 goto handle_failure;
1050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1054 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1055 tlvStruct->length = sizeof(tANI_U32);
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1058 configDataValue ) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1062 goto handle_failure;
1063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1065 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1067 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1068 tlvStruct->length = sizeof(tANI_U32);
1069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1070 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1071 configDataValue ) != eSIR_SUCCESS)
1072 {
1073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1074 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1075 goto handle_failure;
1076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1078 + sizeof(tHalCfg) + tlvStruct->length);
1079
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1081 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1082 tlvStruct->length = sizeof(tANI_U32);
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1085 configDataValue ) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1089 goto handle_failure;
1090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1094 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1098 configDataValue ) != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1111 eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length);
1119
1120 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1121 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1122 tlvStruct->length = sizeof(tANI_U32);
1123 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1124 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1125 configDataValue ) != eSIR_SUCCESS)
1126 {
1127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1128 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1129 goto handle_failure;
1130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1132 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001133 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1134 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1135 tlvStruct->length = sizeof(tANI_U32);
1136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1137 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1138 configDataValue ) != eSIR_SUCCESS)
1139 {
1140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1141 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1142 goto handle_failure;
1143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1147 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1151 configDataValue ) != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1155 goto handle_failure;
1156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1160 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1164 configDataValue ) != eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1168 goto handle_failure;
1169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length);
1172
1173 /* QWLAN_HAL_CFG_STATS_PERIOD */
1174 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1175 tlvStruct->length = sizeof(tANI_U32);
1176 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1177 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1178 eSIR_SUCCESS)
1179 {
1180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1181 "Failed to get value for WNI_CFG_STATS_PERIOD");
1182 goto handle_failure;
1183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1185 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001186 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1187 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1188 tlvStruct->length = sizeof(tANI_U32);
1189 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1190 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1191 eSIR_SUCCESS)
1192 {
1193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1194 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1195 goto handle_failure;
1196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1198 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001199 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1200 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1201 tlvStruct->length = sizeof(tANI_U32);
1202 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1203 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1204 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1206 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1208 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1209 tlvStruct->length = sizeof(tANI_U32);
1210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1211 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1212 != eSIR_SUCCESS)
1213 {
1214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1215 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1216 goto handle_failure;
1217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1219 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1221 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1222 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1224 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1225 &strLength) != eSIR_SUCCESS)
1226 {
1227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1228 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1229 goto handle_failure;
1230 }
1231 tlvStruct->length = strLength;
1232 /* calculate the pad bytes to have the CFG in aligned format */
1233 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1234 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1236 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1238 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1239 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1241 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1242 &strLength) != eSIR_SUCCESS)
1243 {
1244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1245 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1246 goto handle_failure;
1247 }
1248 tlvStruct->length = strLength;
1249 /* calculate the pad bytes to have the CFG in aligned format */
1250 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1251 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1255 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1256 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1259 &strLength) != eSIR_SUCCESS)
1260 {
1261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1262 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1263 goto handle_failure;
1264 }
1265 tlvStruct->length = strLength;
1266 /* calculate the pad bytes to have the CFG in aligned format */
1267 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1268 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001271 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1272 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1273 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1274 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1275 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1276 &strLength) != eSIR_SUCCESS)
1277 {
1278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1279 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1280 goto handle_failure;
1281 }
1282 tlvStruct->length = strLength;
1283 /* calculate the pad bytes to have the CFG in aligned format */
1284 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1285 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001286 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1287 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001288 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1289 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1293 != eSIR_SUCCESS)
1294 {
1295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1296 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1297 goto handle_failure;
1298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001301 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1302 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1306 != eSIR_SUCCESS)
1307 {
1308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1309 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1310 goto handle_failure;
1311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001314 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1315 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1319 != eSIR_SUCCESS)
1320 {
1321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1322 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1323 goto handle_failure;
1324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001327 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1328 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1329 tlvStruct->length = sizeof(tANI_U32);
1330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1331 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1332 != eSIR_SUCCESS)
1333 {
1334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1335 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1336 goto handle_failure;
1337 }
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001340 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1341 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1342 tlvStruct->length = sizeof(tANI_U32);
1343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1344 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1345 != eSIR_SUCCESS)
1346 {
1347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1348 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1349 goto handle_failure;
1350 }
1351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1352 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001353 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1354 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1355 tlvStruct->length = sizeof(tANI_U32);
1356 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1357 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1358 != eSIR_SUCCESS)
1359 {
1360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1361 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1362 goto handle_failure;
1363 }
1364 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1365 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001366 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1367 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1368 tlvStruct->length = sizeof(tANI_U32);
1369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1370 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1371 != eSIR_SUCCESS)
1372 {
1373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1374 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1375 goto handle_failure;
1376 }
1377 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1378 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001379 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1380 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1384 != eSIR_SUCCESS)
1385 {
1386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1387 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1388 goto handle_failure;
1389 }
1390 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1391 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001392 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1393 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1397 != eSIR_SUCCESS)
1398 {
1399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1400 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1401 goto handle_failure;
1402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001405 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1406 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1410 != eSIR_SUCCESS)
1411 {
1412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1413 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1414 goto handle_failure;
1415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001418 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1419 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1420 tlvStruct->length = sizeof(tANI_U32);
1421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1422 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1423 != eSIR_SUCCESS)
1424 {
1425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1426 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1427 goto handle_failure;
1428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001429 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1430 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001431 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1432 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1433 * into FW, so the parameters are added here.
1434 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001435 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1436 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1440 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1441 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001442 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1443 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1444 tlvStruct->length = sizeof(tANI_U32);
1445 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1446 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001449 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1450 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1451 tlvStruct->length = sizeof(tANI_U32);
1452 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1453 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1454 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1455 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001456 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1457 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1458 tlvStruct->length = sizeof(tANI_U32);
1459 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1460 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1461 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1462 + sizeof(tHalCfg) + tlvStruct->length) ;
1463
1464 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1465 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1470 + sizeof(tHalCfg) + tlvStruct->length) ;
1471
1472 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1473 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1474 tlvStruct->length = sizeof(tANI_U32);
1475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1476 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1477 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1478 + sizeof(tHalCfg) + tlvStruct->length) ;
1479
1480 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1481 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1482 tlvStruct->length = sizeof(tANI_U32);
1483 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1484 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1485 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1486 + sizeof(tHalCfg) + tlvStruct->length) ;
1487
1488 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1489 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1490 tlvStruct->length = sizeof(tANI_U32);
1491 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1492 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
1495
1496 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1497 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1498 tlvStruct->length = sizeof(tANI_U32);
1499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1500 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1501 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1502 + sizeof(tHalCfg) + tlvStruct->length) ;
1503
1504 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1505 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1506 tlvStruct->length = sizeof(tANI_U32);
1507 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1508 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1509 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1510 + sizeof(tHalCfg) + tlvStruct->length) ;
1511
1512 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1513 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1514 tlvStruct->length = sizeof(tANI_U32);
1515 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1516 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1517 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1518 + sizeof(tHalCfg) + tlvStruct->length) ;
1519
1520 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1521 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1522 tlvStruct->length = sizeof(tANI_U32);
1523 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1524 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1525 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1526 + sizeof(tHalCfg) + tlvStruct->length) ;
1527
1528 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1529 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1530 tlvStruct->length = sizeof(tANI_U32);
1531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1532 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535
1536 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1537 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1538 tlvStruct->length = sizeof(tANI_U32);
1539 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1540 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1541 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1542 + sizeof(tHalCfg) + tlvStruct->length) ;
1543
1544 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1545 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1546 tlvStruct->length = sizeof(tANI_U32);
1547 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1548 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1549 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1550 + sizeof(tHalCfg) + tlvStruct->length) ;
1551
1552 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1553 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1554 tlvStruct->length = sizeof(tANI_U32);
1555 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1556 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1557 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1558 + sizeof(tHalCfg) + tlvStruct->length) ;
1559
Wilson Tsaof8b37942013-09-06 10:49:00 -07001560 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1561 {
1562 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1563 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1564 tlvStruct->length = sizeof(tANI_U32);
1565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1566 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569
1570 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1571 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1572 tlvStruct->length = sizeof(tANI_U32);
1573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1574 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1575 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1576 + sizeof(tHalCfg) + tlvStruct->length) ;
1577
1578 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1579 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1580 tlvStruct->length = sizeof(tANI_U32);
1581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1582 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585
1586 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1587 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1588 tlvStruct->length = sizeof(tANI_U32);
1589 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1590 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1591 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1592 + sizeof(tHalCfg) + tlvStruct->length) ;
1593 }
1594
1595 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1596 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1600 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1601 + sizeof(tHalCfg) + tlvStruct->length) ;
1602
1603 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1604 {
1605 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1606 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1607 tlvStruct->length = sizeof(tANI_U32);
1608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1609 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1610 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1611 + sizeof(tHalCfg) + tlvStruct->length) ;
1612 }
1613
1614 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1615 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1616 tlvStruct->length = sizeof(tANI_U32);
1617 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1618 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1619 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1620 + sizeof(tHalCfg) + tlvStruct->length) ;
1621
Jeff Johnson32d95a32012-09-10 13:15:23 -07001622 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001623 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1627 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1628 wcnssCompiledApiVersion.minor,
1629 wcnssCompiledApiVersion.version,
1630 wcnssCompiledApiVersion.revision);
1631 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1632 + sizeof(tHalCfg) + tlvStruct->length) ;
1633
Jeff Johnsond13512a2012-07-17 11:42:19 -07001634 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1635 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1636 tlvStruct->length = sizeof(tANI_U32);
1637 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1638 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1639 configDataValue ) != eSIR_SUCCESS)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1642 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1643 goto handle_failure;
1644 }
1645
1646 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1647 + sizeof(tHalCfg) + tlvStruct->length) ;
1648 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1649 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1650 tlvStruct->length = sizeof(tANI_U32);
1651 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1652 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1653 configDataValue ) != eSIR_SUCCESS)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1657 goto handle_failure;
1658 }
1659
1660 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1661 + sizeof(tHalCfg) + tlvStruct->length) ;
1662
1663 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1664 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1665 tlvStruct->length = sizeof(tANI_U32);
1666 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1667 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1668 != eSIR_SUCCESS)
1669 {
1670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1671 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1672 goto handle_failure;
1673 }
1674
1675 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1676 + sizeof(tHalCfg) + tlvStruct->length) ;
1677
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001678 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1679 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1680 tlvStruct->length = sizeof(tANI_U32);
1681 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1682 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1683 != eSIR_SUCCESS)
1684 {
1685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1686 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1687 goto handle_failure;
1688 }
1689
1690 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1691 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001692#ifdef WLAN_SOFTAP_VSTA_FEATURE
1693 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1694 tlvStruct->length = sizeof(tANI_U32);
1695 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1696 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1697 != eSIR_SUCCESS)
1698 {
1699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1700 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1701 goto handle_failure;
1702 }
1703
1704 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1705 + sizeof(tHalCfg) + tlvStruct->length) ;
1706#endif
1707
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001708 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1709 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1710 tlvStruct->length = sizeof(tANI_U32);
1711 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1712
1713 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1714 != eSIR_SUCCESS)
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1717 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1718 goto handle_failure;
1719 }
1720
1721 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1722 + sizeof(tHalCfg) + tlvStruct->length) ;
1723
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301724/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1725 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1726 tlvStruct->length = sizeof(tANI_U32);
1727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1728 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1729 configDataValue ) != eSIR_SUCCESS)
1730 {
1731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1732 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1733 goto handle_failure;
1734 }
1735
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301738#ifdef FEATURE_WLAN_TDLS
1739 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1740 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1754 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1767 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1780 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1781 tlvStruct->length = sizeof(tANI_U32);
1782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1783 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1784 configDataValue ) != eSIR_SUCCESS)
1785 {
1786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1787 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1788 goto handle_failure;
1789 }
1790 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1791 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301792 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1793 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1794 tlvStruct->length = sizeof(tANI_U32);
1795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1796 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1797 configDataValue ) != eSIR_SUCCESS)
1798 {
1799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1800 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1801 goto handle_failure;
1802 }
1803 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1804 + sizeof(tHalCfg) + tlvStruct->length) ;
1805
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301806#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301807
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001808 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1809 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1810 tlvStruct->length = sizeof(tANI_U32);
1811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1812 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1813 configDataValue ) != eSIR_SUCCESS)
1814 {
1815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1816 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1817 goto handle_failure;
1818 }
1819
1820 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1821 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001822
1823 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1824 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1825 tlvStruct->length = sizeof(tANI_U32);
1826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1827 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1828 != eSIR_SUCCESS)
1829 {
1830 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1831 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1832 goto handle_failure;
1833 }
1834 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1835 + sizeof(tHalCfg) + tlvStruct->length));
1836
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301837 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1838 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1839 tlvStruct->length = sizeof(tANI_U32);
1840 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1841 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1842 configDataValue ) != eSIR_SUCCESS)
1843 {
1844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1845 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1846 goto handle_failure;
1847 }
1848
1849 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1850 + sizeof(tHalCfg) + tlvStruct->length) ;
1851
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301852 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1853 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1854 tlvStruct->length = sizeof(tANI_U32);
1855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1856 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1857 configDataValue ) != eSIR_SUCCESS)
1858 {
1859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1860 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1861 goto handle_failure;
1862 }
1863 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1864 + sizeof(tHalCfg) + tlvStruct->length) ;
1865
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301866 /* QWLAN_HAL_CFG_ATH_DISABLE */
1867 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1868 tlvStruct->length = sizeof(tANI_U32);
1869 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1870 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1871 configDataValue ) != eSIR_SUCCESS)
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1874 "Failed to get value for WNI_CFG_ATH_DISABLE");
1875 goto handle_failure;
1876 }
1877 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1878 + sizeof(tHalCfg) + tlvStruct->length) ;
1879
c_hpothu6d7dc922013-12-02 12:36:41 +05301880 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1881 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1882 tlvStruct->length = sizeof(tANI_U32);
1883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1884 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1885 configDataValue ) != eSIR_SUCCESS)
1886 {
1887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1888 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1889 goto handle_failure;
1890 }
1891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1892 + sizeof(tHalCfg) + tlvStruct->length) ;
1893
1894 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1895 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1896 tlvStruct->length = sizeof(tANI_U32);
1897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1898 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1899 configDataValue ) != eSIR_SUCCESS)
1900 {
1901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1902 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1903 goto handle_failure;
1904 }
1905 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1906 + sizeof(tHalCfg) + tlvStruct->length) ;
1907
1908 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1909 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1910 tlvStruct->length = sizeof(tANI_U32);
1911 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1912 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1913 configDataValue ) != eSIR_SUCCESS)
1914 {
1915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1916 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1917 goto handle_failure;
1918 }
1919 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1920 + sizeof(tHalCfg) + tlvStruct->length) ;
1921
1922 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1923 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1924 tlvStruct->length = sizeof(tANI_U32);
1925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1926 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1927 configDataValue ) != eSIR_SUCCESS)
1928 {
1929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1930 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1931 goto handle_failure;
1932 }
1933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1934 + sizeof(tHalCfg) + tlvStruct->length) ;
1935
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301936 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1937 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1938 tlvStruct->length = sizeof(tANI_U32);
1939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1940 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1941 configDataValue ) != eSIR_SUCCESS)
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1944 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1945 goto handle_failure;
1946 }
1947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1948 + sizeof(tHalCfg) + tlvStruct->length) ;
1949
1950 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1951 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1952 tlvStruct->length = sizeof(tANI_U32);
1953 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1954 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1955 configDataValue ) != eSIR_SUCCESS)
1956 {
1957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1958 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1959 goto handle_failure;
1960 }
1961 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1962 + sizeof(tHalCfg) + tlvStruct->length) ;
1963
1964 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1965 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1966 tlvStruct->length = sizeof(tANI_U32);
1967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1968 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1969 configDataValue ) != eSIR_SUCCESS)
1970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1972 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1973 goto handle_failure;
1974 }
1975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1976 + sizeof(tHalCfg) + tlvStruct->length) ;
1977
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001978 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1979 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1980 tlvStruct->length = sizeof(tANI_U32);
1981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1982 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1983 configDataValue ) != eSIR_SUCCESS)
1984 {
1985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1986 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1987 goto handle_failure;
1988 }
1989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1990 + sizeof(tHalCfg) + tlvStruct->length) ;
1991
c_hpothu5bd1ae42014-03-07 20:28:22 +05301992 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1993 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1994 tlvStruct->length = sizeof(tANI_U32);
1995 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1996
1997 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1998 configDataValue ) != eSIR_SUCCESS)
1999 {
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2001 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2002 goto handle_failure;
2003 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302004 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2005 + sizeof(tHalCfg) + tlvStruct->length) ;
2006
2007 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2008 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2009 tlvStruct->length = sizeof(tANI_U32);
2010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2011
2012 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2013 configDataValue ) != eSIR_SUCCESS)
2014 {
2015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2016 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2017 goto handle_failure;
2018 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302019 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2020 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302021
c_hpothu2d0f1c42014-04-01 18:38:51 +05302022 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2023 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2024 tlvStruct->length = sizeof(tANI_U32);
2025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2026
2027 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2028 configDataValue ) != eSIR_SUCCESS)
2029 {
2030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2031 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2032 goto handle_failure;
2033 }
2034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2035 + sizeof(tHalCfg) + tlvStruct->length) ;
2036
2037 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2038 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2039 tlvStruct->length = sizeof(tANI_U32);
2040 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2041
2042 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2043 configDataValue ) != eSIR_SUCCESS)
2044 {
2045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2046 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2047 goto handle_failure;
2048 }
2049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2050 + sizeof(tHalCfg) + tlvStruct->length) ;
2051
2052 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2053 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2054 tlvStruct->length = sizeof(tANI_U32);
2055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2056
2057 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2058 configDataValue ) != eSIR_SUCCESS)
2059 {
2060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2061 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2062 goto handle_failure;
2063 }
2064 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2065 + sizeof(tHalCfg) + tlvStruct->length) ;
2066
2067 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2068 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2069 tlvStruct->length = sizeof(tANI_U32);
2070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2071
2072 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2073 configDataValue ) != eSIR_SUCCESS)
2074 {
2075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2076 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2077 goto handle_failure;
2078 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302079 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2080 + sizeof(tHalCfg) + tlvStruct->length) ;
2081
Mihir Shetec34258c2014-07-30 17:50:27 +05302082 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2083 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2084 tlvStruct->length = sizeof(tANI_U32);
2085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2086
2087 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2088 configDataValue ) != eSIR_SUCCESS)
2089 {
2090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2091 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2092 goto handle_failure;
2093 }
2094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2095 + sizeof(tHalCfg) + tlvStruct->length) ;
2096
2097 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2098 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2099 tlvStruct->length = sizeof(tANI_U32);
2100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2101
2102 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2103 configDataValue ) != eSIR_SUCCESS)
2104 {
2105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2106 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2107 goto handle_failure;
2108 }
2109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2110 + sizeof(tHalCfg) + tlvStruct->length) ;
2111
2112 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2113 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2114 tlvStruct->length = sizeof(tANI_U32);
2115 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2116
2117 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2118 configDataValue ) != eSIR_SUCCESS)
2119 {
2120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2121 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2122 goto handle_failure;
2123 }
2124 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2125 + sizeof(tHalCfg) + tlvStruct->length) ;
2126
2127 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2128 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2129 tlvStruct->length = sizeof(tANI_U32);
2130 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2131
2132 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2133 configDataValue ) != eSIR_SUCCESS)
2134 {
2135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2136 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2137 goto handle_failure;
2138 }
2139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2140 + sizeof(tHalCfg) + tlvStruct->length) ;
2141
2142 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2143 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2144 tlvStruct->length = sizeof(tANI_U32);
2145 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2146
2147 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2148 configDataValue ) != eSIR_SUCCESS)
2149 {
2150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2151 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2152 goto handle_failure;
2153 }
2154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2155 + sizeof(tHalCfg) + tlvStruct->length) ;
2156
2157 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2158 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2159 tlvStruct->length = sizeof(tANI_U32);
2160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2161
2162 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2163 configDataValue ) != eSIR_SUCCESS)
2164 {
2165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2166 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2167 goto handle_failure;
2168 }
2169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2170 + sizeof(tHalCfg) + tlvStruct->length) ;
2171
2172 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2173 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2174 tlvStruct->length = sizeof(tANI_U32);
2175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2176
2177 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2178 configDataValue ) != eSIR_SUCCESS)
2179 {
2180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2181 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2182 goto handle_failure;
2183 }
2184 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2185 + sizeof(tHalCfg) + tlvStruct->length) ;
2186
2187 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2188 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2189 tlvStruct->length = sizeof(tANI_U32);
2190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2191
2192 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2193 configDataValue ) != eSIR_SUCCESS)
2194 {
2195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2196 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2197 goto handle_failure;
2198 }
2199 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2200 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302201
2202 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2203 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2204 tlvStruct->length = sizeof(tANI_U32);
2205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2206
2207 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2208 configDataValue ) != eSIR_SUCCESS)
2209 {
2210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2211 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2212 goto handle_failure;
2213 }
2214 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2215 + sizeof(tHalCfg) + tlvStruct->length) ;
2216
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302217 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2218 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2219 tlvStruct->length = sizeof(tANI_U32);
2220 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2221
2222 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2223 configDataValue ) != eSIR_SUCCESS)
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2226 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2227 goto handle_failure;
2228 }
2229 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2230 + sizeof(tHalCfg) + tlvStruct->length) ;
2231
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302232 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2233 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2234 tlvStruct->length = sizeof(tANI_U32);
2235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2236
2237 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2238 configDataValue ) != eSIR_SUCCESS)
2239 {
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2241 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2242 goto handle_failure;
2243 }
2244 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2245 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302246
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302247 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2248 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2249 tlvStruct->length = sizeof(tANI_U32);
2250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2251
2252 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2253 configDataValue ) != eSIR_SUCCESS)
2254 {
2255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2256 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2257 goto handle_failure;
2258 }
2259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2260 + sizeof(tHalCfg) + tlvStruct->length) ;
2261
Sachin Ahuja41b61902015-06-18 18:32:15 +05302262
2263 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2264 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2265 tlvStruct->length = sizeof(tANI_U32);
2266 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2267
2268 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2269 configDataValue ) != eSIR_SUCCESS)
2270 {
2271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2272 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2273 goto handle_failure;
2274 }
2275 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2276 + sizeof(tHalCfg) + tlvStruct->length) ;
2277
2278 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2279 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2280 tlvStruct->length = sizeof(tANI_U32);
2281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2282
2283 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2284 configDataValue ) != eSIR_SUCCESS)
2285 {
2286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2287 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2288 goto handle_failure;
2289 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2291 + sizeof(tHalCfg) + tlvStruct->length) ;
2292
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302293 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2294 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2295 tlvStruct->length = sizeof(tANI_U32);
2296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2297
2298 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2299 configDataValue ) != eSIR_SUCCESS)
2300 {
2301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2302 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2303 goto handle_failure;
2304 }
2305 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2306 + sizeof(tHalCfg) + tlvStruct->length) ;
2307
2308 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2309 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2310 tlvStruct->length = sizeof(tANI_U32);
2311 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2312
2313 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2314 configDataValue ) != eSIR_SUCCESS)
2315 {
2316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2317 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2318 goto handle_failure;
2319 }
2320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2321 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302322
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302323 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2324 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2325 tlvStruct->length = sizeof(tANI_U32);
2326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2327
2328 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2329 configDataValue ) != eSIR_SUCCESS)
2330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2332 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2333 goto handle_failure;
2334 }
2335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2336 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302337 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2338 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2339 tlvStruct->length = sizeof(tANI_U32);
2340 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2341 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2342 configDataValue ) != eSIR_SUCCESS)
2343 {
2344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2345 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2346 goto handle_failure;
2347 }
2348 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2349 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302350
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302351 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2352 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2353 tlvStruct->length = sizeof(tANI_U32);
2354 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2355
2356 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2357 configDataValue ) != eSIR_SUCCESS)
2358 {
2359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2360 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2361 goto handle_failure;
2362 }
2363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2364 + sizeof(tHalCfg) + tlvStruct->length) ;
2365
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302366 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2367 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2368 tlvStruct->length = sizeof(tANI_U32);
2369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2370
2371 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2372 configDataValue ) != eSIR_SUCCESS)
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2375 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2376 goto handle_failure;
2377 }
2378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2379 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302380
2381 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2382 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2383 tlvStruct->length = sizeof(tANI_U32);
2384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2385
2386 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2387 configDataValue ) != eSIR_SUCCESS)
2388 {
2389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2390 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2391 goto handle_failure;
2392 }
2393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2394 + sizeof(tHalCfg) + tlvStruct->length) ;
2395
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002397#ifdef WLAN_DEBUG
2398 {
2399 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2401 "****** Dumping CFG TLV ***** ");
2402 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2403 {
2404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2405 "%02x %02x %02x %02x %02x %02x %02x %02x",
2406 tlvStructStart[i],
2407 tlvStructStart[i+1],
2408 tlvStructStart[i+2],
2409 tlvStructStart[i+3],
2410 tlvStructStart[i+4],
2411 tlvStructStart[i+5],
2412 tlvStructStart[i+6],
2413 tlvStructStart[i+7]);
2414 }
2415 /* Dump the bytes in the last line*/
2416 for (; i < wdiStartParams->usConfigBufferLen; i++)
2417 {
2418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2419 "%02x ",tlvStructStart[i]);
2420 }
2421 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2422 "**************************** ");
2423 }
2424#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002426handle_failure:
2427 vos_mem_free(configParam);
2428 return VOS_STATUS_E_FAILURE;
2429}
Jeff Johnson295189b2012-06-20 16:38:30 -07002430/*
2431 * FUNCTION: WDA_wdiCompleteCB
2432 * call the voss call back function
2433 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002434void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002435{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2437 tWDA_CbContext *wdaContext;
2438
2439 if(NULL == pWdaParams)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002443 VOS_ASSERT(0) ;
2444 return ;
2445 }
2446
2447 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2448
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 if (NULL == wdaContext)
2450 {
2451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002452 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 return ;
2454 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002455
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002457 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002461 vos_mem_free(pWdaParams);
2462
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 if(WDI_STATUS_SUCCESS != status)
2464 {
2465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2466 "WDI stop callback returned failure" );
2467 VOS_ASSERT(0) ;
2468 }
2469 else
2470 {
2471 wdaContext->wdaState = WDA_STOP_STATE;
2472 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002473
Leo Chang9d76f622013-08-23 16:34:52 -07002474 /* FTM Driver stop procedure should be synced.
2475 * Stop and Close will happen on same context */
2476 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2477 {
2478 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2479 {
2480 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2481 "%s: FTM Stop Event Set Fail", __func__);
2482 VOS_ASSERT(0);
2483 }
2484 }
2485
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002487 vos_WDAComplete_cback(wdaContext->pVosContext);
2488
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 return ;
2490}
Jeff Johnson295189b2012-06-20 16:38:30 -07002491/*
2492 * FUNCTION: WDA_stop
2493 * call WDI_stop
2494 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002495VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2496{
2497 WDI_Status wdiStatus;
2498 VOS_STATUS status = VOS_STATUS_SUCCESS;
2499 WDI_StopReqParamsType *wdiStopReq;
2500 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002501 tWDA_ReqParams *pWdaParams ;
2502
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 if (NULL == pWDA)
2504 {
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 VOS_ASSERT(0);
2508 return VOS_STATUS_E_FAILURE;
2509 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002510 if (pWDA->wdiFailed == true)
2511 {
2512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002513 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002514 return VOS_STATUS_E_ALREADY;
2515 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002516
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 /* FTM mode stay START_STATE */
2518 if( (WDA_READY_STATE != pWDA->wdaState) &&
2519 (WDA_INIT_STATE != pWDA->wdaState) &&
2520 (WDA_START_STATE != pWDA->wdaState) )
2521 {
2522 VOS_ASSERT(0);
2523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 wdiStopReq = (WDI_StopReqParamsType *)
2525 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2526 if(NULL == wdiStopReq)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_ASSERT(0);
2531 return VOS_STATUS_E_NOMEM;
2532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002533
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 wdiStopReq->wdiStopReason = reason;
2535 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302536
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2538 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 {
2540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 VOS_ASSERT(0);
2543 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002544 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002546
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002547 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2548 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 {
2550 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002551 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002553
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002554 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2555 pWdaParams->wdaMsgParam = NULL;
2556 pWdaParams->pWdaContext = pWDA;
2557
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 /* call WDI stop */
2559 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002560 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2561
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2563 {
2564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2565 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2567 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 status = VOS_STATUS_E_FAILURE;
2569 }
Leo Chang9d76f622013-08-23 16:34:52 -07002570
2571 /* FTM Driver stop procedure should be synced.
2572 * Stop and Close will happen on same context */
2573 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2574 {
2575 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2576 WDI_RESPONSE_TIMEOUT);
2577 if (status != VOS_STATUS_SUCCESS)
2578 {
2579 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2580 "%s: FTM Stop Timepoout", __func__);
2581 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002582 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302583 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 return status;
2586}
Jeff Johnson295189b2012-06-20 16:38:30 -07002587/*
2588 * FUNCTION: WDA_close
2589 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302590 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002591VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2592{
Jeff Johnson43971f52012-07-17 12:26:56 -07002593 VOS_STATUS status = VOS_STATUS_SUCCESS;
2594 WDI_Status wstatus;
2595 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 if (NULL == wdaContext)
2598 {
2599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002600 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 return VOS_STATUS_E_FAILURE;
2602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2604 (WDA_STOP_STATE != wdaContext->wdaState))
2605 {
2606 VOS_ASSERT(0);
2607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002609 wstatus = WDI_Close();
2610 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 {
2612 status = VOS_STATUS_E_FAILURE;
2613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002616 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2617 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 {
2619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002620 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 status = VOS_STATUS_E_FAILURE;
2622 }
2623
Jeff Johnson43971f52012-07-17 12:26:56 -07002624 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002625 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 {
2627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002628 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 status = VOS_STATUS_E_FAILURE;
2630 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002631 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002632 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 {
2634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002635 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 status = VOS_STATUS_E_FAILURE;
2637 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002638 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002639 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 {
2641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002642 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 status = VOS_STATUS_E_FAILURE;
2644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002646 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002647 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 {
2649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2650 "error in WDA close " );
2651 status = VOS_STATUS_E_FAILURE;
2652 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +05302653 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 return status;
2655}
Jeff Johnson295189b2012-06-20 16:38:30 -07002656/*
2657 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2658 * returns 1 if the compiled version is greater than or equal to the input version
2659 */
2660
2661uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2662{
2663 VOS_STATUS status = VOS_STATUS_SUCCESS;
2664 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2665 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2668 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2669 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2670 (compiledVersion.revision >= revision)))
2671 return 1;
2672 else
2673 return 0;
2674}
Jeff Johnson295189b2012-06-20 16:38:30 -07002675/*
2676 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2677 * returns 1 if the compiled version is greater than or equal to the input version
2678 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002679uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2680{
2681 VOS_STATUS status = VOS_STATUS_SUCCESS;
2682 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2683 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2686 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2687 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2688 (reportedVersion.revision >= revision)))
2689 return 1;
2690 else
2691 return 0;
2692}
Jeff Johnson295189b2012-06-20 16:38:30 -07002693/*
2694 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2695 * Returns the version of the WCNSS WLAN API with which the HOST
2696 * device driver was compiled
2697 */
2698VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2699 tSirVersionType *pVersion)
2700{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302701 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 if ((NULL == pvosGCtx) || (NULL == pVersion))
2703 {
2704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002705 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_ASSERT(0);
2707 return VOS_STATUS_E_FAILURE;
2708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2710 if (NULL == pWDA )
2711 {
2712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002713 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 VOS_ASSERT(0);
2715 return VOS_STATUS_E_FAILURE;
2716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 *pVersion = pWDA->wcnssWlanCompiledVersion;
2718 return VOS_STATUS_SUCCESS;
2719}
Jeff Johnson295189b2012-06-20 16:38:30 -07002720/*
2721 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2722 * Returns the version of the WCNSS WLAN API with which the WCNSS
2723 * device driver was compiled
2724 */
2725VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2726 tSirVersionType *pVersion)
2727{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302728 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 if ((NULL == pvosGCtx) || (NULL == pVersion))
2730 {
2731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 VOS_ASSERT(0);
2734 return VOS_STATUS_E_FAILURE;
2735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2737 if (NULL == pWDA )
2738 {
2739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 VOS_ASSERT(0);
2742 return VOS_STATUS_E_FAILURE;
2743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 *pVersion = pWDA->wcnssWlanReportedVersion;
2745 return VOS_STATUS_SUCCESS;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_GetWcnssSoftwareVersion
2749 * Returns the WCNSS Software version string
2750 */
2751VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2752 tANI_U8 *pVersion,
2753 tANI_U32 versionBufferSize)
2754{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302755 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002757 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 if ((NULL == pvosGCtx) || (NULL == pVersion))
2759 {
2760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002761 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 VOS_ASSERT(0);
2763 return VOS_STATUS_E_FAILURE;
2764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2766 if (NULL == pWDA )
2767 {
2768 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002769 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 VOS_ASSERT(0);
2771 return VOS_STATUS_E_FAILURE;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2774 return VOS_STATUS_SUCCESS;
2775}
Jeff Johnson295189b2012-06-20 16:38:30 -07002776/*
2777 * FUNCTION: WDA_GetWcnssHardwareVersion
2778 * Returns the WCNSS Hardware version string
2779 */
2780VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2781 tANI_U8 *pVersion,
2782 tANI_U32 versionBufferSize)
2783{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302784 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002786 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 if ((NULL == pvosGCtx) || (NULL == pVersion))
2788 {
2789 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002790 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 VOS_ASSERT(0);
2792 return VOS_STATUS_E_FAILURE;
2793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2795 if (NULL == pWDA )
2796 {
2797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002798 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 VOS_ASSERT(0);
2800 return VOS_STATUS_E_FAILURE;
2801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2803 return VOS_STATUS_SUCCESS;
2804}
Jeff Johnson295189b2012-06-20 16:38:30 -07002805/*
2806 * FUNCTION: WDA_WniCfgDnld
2807 * Trigger CFG Download
2808 */
2809VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2810{
2811 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302812 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002813
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 if (NULL == pMac )
2815 {
2816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002817 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 VOS_ASSERT(0);
2819 return VOS_STATUS_E_FAILURE;
2820 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302821 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 return vosStatus;
2823}
Jeff Johnson295189b2012-06-20 16:38:30 -07002824/* -----------------------------------------------------------------
2825 * WDI interface
2826 * -----------------------------------------------------------------
2827 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_suspendDataTxCallback
2830 * call back function called from TL after suspend Transmission
2831 */
2832VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2833 v_U8_t* ucSTAId,
2834 VOS_STATUS vosStatus)
2835{
2836 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002838 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 if (NULL == pWDA )
2840 {
2841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002842 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 VOS_ASSERT(0);
2844 return VOS_STATUS_E_FAILURE;
2845 }
2846 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2847 {
2848 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2849 }
2850 else
2851 {
2852 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 /* Trigger the event to bring the WDA TL suspend function to come
2855 * out of wait*/
2856 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2857 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2858 {
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002860 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* If TL suspended had timedout before this callback was called, resume back
2863 * TL.*/
2864 if (pWDA->txSuspendTimedOut)
2865 {
2866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002867 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 WDA_ResumeDataTx(pWDA);
2869 pWDA->txSuspendTimedOut = FALSE;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return VOS_STATUS_SUCCESS;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_suspendDataTx
2875 * Update TL to suspend the data Transmission
2876 */
2877VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2878{
2879 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2880 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002881
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 if (pWDA->txSuspendTimedOut)
2886 {
2887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002888 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 return status;
2890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 /* Reset the event to be not signalled */
2892 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2893 if(!VOS_IS_STATUS_SUCCESS(status))
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002896 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 return VOS_STATUS_E_FAILURE;
2898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002900 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 WDA_SuspendDataTxCallback);
2902 if(status != VOS_STATUS_SUCCESS)
2903 {
2904 return status;
2905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* Wait for the event to be set by the TL, to get the response of
2907 * suspending the TX queues, this event should be set by the Callback
2908 * function called by TL*/
2909 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2910 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2911 if(!VOS_IS_STATUS_SUCCESS(status))
2912 {
2913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2914 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 /* Set this flag to true when TL suspend times out, so that when TL
2917 * suspend eventually happens and calls the callback, TL can be resumed
2918 * right away by looking at this flag when true.*/
2919 pWDA->txSuspendTimedOut = TRUE;
2920 }
2921 else
2922 {
2923 pWDA->txSuspendTimedOut = FALSE;
2924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2926 {
2927 status = VOS_STATUS_SUCCESS;
2928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 return status;
2930}
Jeff Johnson295189b2012-06-20 16:38:30 -07002931/*
2932 * FUNCTION: WDA_resumeDataTx
2933 * Update TL to resume the data Transmission
2934 */
2935VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2936{
2937 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938
2939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002940 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002941
2942 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 return status;
2944}
Jeff Johnson295189b2012-06-20 16:38:30 -07002945/*
2946 * FUNCTION: WDA_InitScanReqCallback
2947 * Trigger Init SCAN callback
2948 */
2949void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2950{
2951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2952 tWDA_CbContext *pWDA;
2953 tInitScanParams *pWDA_ScanParam ;
2954 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002956 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 if(NULL == pWdaParams)
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_ASSERT(0) ;
2962 return ;
2963 }
2964 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2965 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 if(NULL == pWDA_ScanParam)
2967 {
2968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002969 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002970 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2972 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 return ;
2974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 if(WDI_STATUS_SUCCESS != wdiStatus)
2976 {
2977 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(VOS_STATUS_SUCCESS != status)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 }
2983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 /* free WDI command buffer */
2985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302987
2988
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002990 /* without converting the Status to Failure or Success Just
2991 pass the same status to lim */
2992 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 /* send SCAN RSP message back to PE */
2994 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996}
2997
2998/*
2999 * FUNCTION: WDA_ProcessInitScanReq
3000 * Trigger Init SCAN in DAL
3001 */
3002VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3003 tInitScanParams *initScanParams)
3004{
3005 WDI_Status status = WDI_STATUS_SUCCESS ;
3006 WDI_InitScanReqParamsType *wdiInitScanParam =
3007 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3008 sizeof(WDI_InitScanReqParamsType)) ;
3009 tWDA_ReqParams *pWdaParams;
3010 tANI_U8 i = 0;
3011
3012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 if(NULL == wdiInitScanParam)
3015 {
3016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003017 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 VOS_ASSERT(0);
3019 return VOS_STATUS_E_NOMEM;
3020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3022 if(NULL == pWdaParams)
3023 {
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_ASSERT(0);
3027 vos_mem_free(wdiInitScanParam);
3028 return VOS_STATUS_E_NOMEM;
3029 }
3030
3031 /* Copy init Scan params to WDI structure */
3032 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3033 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3034 sizeof(tSirMacAddr)) ;
3035 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3036 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3037 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3039 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3041 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3043 {
3044 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3045 initScanParams->scanEntry.bssIdx[i] ;
3046 }
3047
3048 /* if Frame length, copy macMgmtHdr or WDI structure */
3049 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3050 {
3051 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3052 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3053 }
3054 wdiInitScanParam->wdiReqStatusCB = NULL ;
3055
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 /* Store Init Req pointer, as this will be used for response */
3057 pWdaParams->pWdaContext = pWDA;
3058 pWdaParams->wdaMsgParam = initScanParams;
3059 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 /* first try to suspend TX */
3061 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 if(WDI_STATUS_SUCCESS != status)
3063 {
3064 goto handleWdiFailure;
3065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 /* call DAL API to pass init scan request to DAL */
3067 status = WDI_InitScanReq(wdiInitScanParam,
3068 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 if(IS_WDI_STATUS_FAILURE(status))
3070 {
3071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3072 "error in WDA Init Scan, Resume Tx " );
3073 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 VOS_ASSERT(0) ;
3075
3076 goto handleWdiFailure;
3077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079handleWdiFailure:
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3081 "Failure in WDI Api, free all the memory " );
3082 /* free WDI command buffer */
3083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3084 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 /* send Failure to PE */
3086 initScanParams->status = eSIR_FAILURE ;
3087 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 return CONVERT_WDI2VOS_STATUS(status) ;
3089}
3090
Jeff Johnson295189b2012-06-20 16:38:30 -07003091/*
3092 * FUNCTION: WDA_StartScanReqCallback
3093 * send Start SCAN RSP back to PE
3094 */
3095void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3096 void* pUserData)
3097{
3098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3099 tWDA_CbContext *pWDA;
3100 tStartScanParams *pWDA_ScanParam;
3101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003102 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 if(NULL == pWdaParams)
3104 {
3105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 VOS_ASSERT(0) ;
3108 return ;
3109 }
3110 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3111 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWDA_ScanParam)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003117 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 return ;
3119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3121 {
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003123 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003125 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 return ;
3127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3129 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003130
Jeff Johnson295189b2012-06-20 16:38:30 -07003131
3132 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003133 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 /* send SCAN RSP message back to PE */
3135 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 return ;
3137}
3138
Jeff Johnson295189b2012-06-20 16:38:30 -07003139/*
3140 * FUNCTION: WDA_ProcessStartScanReq
3141 * Trigger start SCAN in WDI
3142 */
3143VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3144 tStartScanParams *startScanParams)
3145{
3146 WDI_Status status = WDI_STATUS_SUCCESS;
3147 WDI_StartScanReqParamsType *wdiStartScanParams =
3148 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3149 sizeof(WDI_StartScanReqParamsType)) ;
3150 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 if(NULL == wdiStartScanParams)
3154 {
3155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003157 VOS_ASSERT(0);
3158 return VOS_STATUS_E_NOMEM;
3159 }
3160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3161 if(NULL == pWdaParams)
3162 {
3163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 VOS_ASSERT(0);
3166 vos_mem_free(wdiStartScanParams);
3167 return VOS_STATUS_E_NOMEM;
3168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 /* Copy init Scan params to WDI structure */
3170 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3171 wdiStartScanParams->wdiReqStatusCB = NULL ;
3172
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 /* Store Init Req pointer, as this will be used for response */
3174 /* store Params pass it to WDI */
3175 pWdaParams->pWdaContext = pWDA;
3176 pWdaParams->wdaMsgParam = startScanParams;
3177 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 /* call DAL API to pass init scan request to DAL */
3179 status = WDI_StartScanReq(wdiStartScanParams,
3180 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 /* failure returned by WDI API */
3182 if(IS_WDI_STATUS_FAILURE(status))
3183 {
3184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3185 "Failure in Start Scan WDI API, free all the memory "
3186 "It should be due to previous abort scan." );
3187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3188 vos_mem_free(pWdaParams) ;
3189 startScanParams->status = eSIR_FAILURE ;
3190 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 return CONVERT_WDI2VOS_STATUS(status) ;
3193}
Jeff Johnson295189b2012-06-20 16:38:30 -07003194/*
3195 * FUNCTION: WDA_EndScanReqCallback
3196 * END SCAN callback
3197 */
3198void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3199{
3200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3201 tWDA_CbContext *pWDA;
3202 tEndScanParams *endScanParam;
3203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 if(NULL == pWdaParams)
3206 {
3207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 VOS_ASSERT(0) ;
3210 return ;
3211 }
3212 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3213 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 if(NULL == endScanParam)
3215 {
3216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003217 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3220 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 return ;
3222 }
3223
3224 /* Free WDI command buffer */
3225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3226 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003228 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 /* send response back to PE */
3230 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3231 return ;
3232}
3233
Jeff Johnson295189b2012-06-20 16:38:30 -07003234/*
3235 * FUNCTION: WDA_ProcessEndScanReq
3236 * Trigger END SCAN in WDI
3237 */
3238VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3239 tEndScanParams *endScanParams)
3240{
3241 WDI_Status status = WDI_STATUS_SUCCESS;
3242 WDI_EndScanReqParamsType *wdiEndScanParams =
3243 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3244 sizeof(WDI_EndScanReqParamsType)) ;
3245 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 if(NULL == wdiEndScanParams)
3249 {
3250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 VOS_ASSERT(0);
3253 return VOS_STATUS_E_NOMEM;
3254 }
3255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3256 if(NULL == pWdaParams)
3257 {
3258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 VOS_ASSERT(0);
3261 vos_mem_free(wdiEndScanParams);
3262 return VOS_STATUS_E_NOMEM;
3263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 /* Copy init Scan params to WDI structure */
3265 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3266 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* Store Init Req pointer, as this will be used for response */
3268 /* store Params pass it to WDI */
3269 pWdaParams->pWdaContext = pWDA;
3270 pWdaParams->wdaMsgParam = endScanParams;
3271 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 /* call DAL API to pass init scan request to DAL */
3273 status = WDI_EndScanReq(wdiEndScanParams,
3274 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 if(IS_WDI_STATUS_FAILURE(status))
3276 {
3277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3278 "Failure in End Scan WDI API, free all the memory "
3279 "It should be due to previous abort scan." );
3280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3281 vos_mem_free(pWdaParams) ;
3282 endScanParams->status = eSIR_FAILURE ;
3283 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 return CONVERT_WDI2VOS_STATUS(status) ;
3286}
Jeff Johnson295189b2012-06-20 16:38:30 -07003287/*
3288 * FUNCTION: WDA_FinishScanReqCallback
3289 * Trigger Finish SCAN callback
3290 */
3291void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3292{
3293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3294 tWDA_CbContext *pWDA;
3295 tFinishScanParams *finishScanParam;
3296 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 if(NULL == pWdaParams)
3300 {
3301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003302 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 VOS_ASSERT(0) ;
3304 return ;
3305 }
3306
3307 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3308 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 if(NULL == finishScanParam)
3310 {
3311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003312 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3315 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 return ;
3317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3319 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 /*
3321 * Now Resume TX, if we reached here means, TX is already suspended, we
3322 * have to resume it unconditionaly
3323 */
3324 status = WDA_ResumeDataTx(pWDA) ;
3325
3326 if(VOS_STATUS_SUCCESS != status)
3327 {
3328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003329 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003331 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3333 return ;
3334}
Jeff Johnson295189b2012-06-20 16:38:30 -07003335/*
3336 * FUNCTION: WDA_ProcessFinshScanReq
3337 * Trigger Finish SCAN in WDI
3338 */
3339VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3340 tFinishScanParams *finishScanParams)
3341{
3342 WDI_Status status = WDI_STATUS_SUCCESS;
3343 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3344 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3345 sizeof(WDI_FinishScanReqParamsType)) ;
3346 tWDA_ReqParams *pWdaParams ;
3347 tANI_U8 i = 0;
3348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003349 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(NULL == wdiFinishScanParams)
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 VOS_ASSERT(0);
3355 return VOS_STATUS_E_NOMEM;
3356 }
3357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3358 if(NULL == pWdaParams)
3359 {
3360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 VOS_ASSERT(0);
3363 vos_mem_free(wdiFinishScanParams);
3364 return VOS_STATUS_E_NOMEM;
3365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 /* Copy init Scan params to WDI structure */
3367 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3368 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3369 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3371 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3372 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3373 finishScanParams->frameLength ;
3374 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3375 finishScanParams->currentOperChannel ;
3376 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3377 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3378 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3380 {
3381 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3382 finishScanParams->scanEntry.bssIdx[i] ;
3383 }
3384
3385
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 /* if Frame length, copy macMgmtHdr ro WDI structure */
3387 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3388 {
3389 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3390 &finishScanParams->macMgmtHdr,
3391 sizeof(WDI_MacMgmtHdr)) ;
3392 }
3393 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 /* Store Init Req pointer, as this will be used for response */
3395 /* store Params pass it to WDI */
3396 pWdaParams->pWdaContext = pWDA;
3397 pWdaParams->wdaMsgParam = finishScanParams;
3398 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 /* call DAL API to pass init scan request to DAL */
3400 status = WDI_FinishScanReq(wdiFinishScanParams,
3401 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003402
Jeff Johnson295189b2012-06-20 16:38:30 -07003403
3404 /*
3405 * WDI API returns failure..
3406 */
3407 if(IS_WDI_STATUS_FAILURE( status))
3408 {
3409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3410 "Failure in Finish Scan WDI API, free all the memory " );
3411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3412 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 finishScanParams->status = eSIR_FAILURE ;
3414 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 return CONVERT_WDI2VOS_STATUS(status) ;
3417}
Jeff Johnson295189b2012-06-20 16:38:30 -07003418/*---------------------------------------------------------------------
3419 * ASSOC API's
3420 *---------------------------------------------------------------------
3421 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003422/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303423 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 * Trigger Init SCAN callback
3425 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303426void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003427{
3428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3429 tWDA_CbContext *pWDA;
3430 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003432 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 if(NULL == pWdaParams)
3434 {
3435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003436 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 VOS_ASSERT(0) ;
3438 return ;
3439 }
3440 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3441 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3443 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 /* reset macBSSID */
3445 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 /* reset macSTASelf */
3447 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003448 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 return ;
3451}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303452
3453/*
3454 * FUNCTION: WDA_JoinReqCallback
3455 * Free memory and send SWITCH CHANNEL RSP back to PE.
3456 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3457 */
3458void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3459{
3460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3461 tWDA_CbContext *pWDA;
3462 tSwitchChannelParams *joinReqParam;
3463
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3465 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3466
3467 if(NULL == pWdaParams)
3468 {
3469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3470 "%s: pWdaParams received NULL", __func__);
3471 VOS_ASSERT(0);
3472 return;
3473 }
3474
3475 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3476 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3477 joinReqParam->status = wdiStatus;
3478
3479 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3480 {
3481 /* reset macBSSID */
3482 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3483 /* reset macSTASelf */
3484 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3485
3486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3487 vos_mem_free(pWdaParams);
3488 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3489 }
3490
3491 return;
3492}
3493
Jeff Johnson295189b2012-06-20 16:38:30 -07003494/*
3495 * FUNCTION: WDA_ProcessJoinReq
3496 * Trigger Join REQ in WDI
3497 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003498VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3499 tSwitchChannelParams* joinReqParam)
3500{
3501 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 WDI_JoinReqParamsType *wdiJoinReqParam =
3503 (WDI_JoinReqParamsType *)vos_mem_malloc(
3504 sizeof(WDI_JoinReqParamsType)) ;
3505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 if(NULL == wdiJoinReqParam)
3509 {
3510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003513 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 return VOS_STATUS_E_NOMEM;
3515 }
3516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3517 if(NULL == pWdaParams)
3518 {
3519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 VOS_ASSERT(0);
3522 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003523 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 return VOS_STATUS_E_NOMEM;
3525 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003526
3527 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3528 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3529 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3530 {
3531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3532 "%s: received join request when BSSID or self-STA is NULL "
3533 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003534 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003535 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3536 VOS_ASSERT(0);
3537 vos_mem_free(wdiJoinReqParam);
3538 vos_mem_free(pWdaParams);
3539 joinReqParam->status = eSIR_FAILURE ;
3540 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3541 return VOS_STATUS_E_INVAL;
3542 }
3543
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 /* copy the BSSID for pWDA */
3545 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3546 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3548 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3550 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003551#ifdef WLAN_FEATURE_VOWIFI
3552 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3553 joinReqParam->maxTxPower ;
3554#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3556 joinReqParam->localPowerConstraint ;
3557#endif
3558 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3559 joinReqParam->secondaryChannelOffset ;
3560 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3561
Sachin Ahuja935eda782014-07-30 14:57:41 +05303562 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3563 wdiJoinReqParam->pUserData = pWdaParams;
3564
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 /* Store Init Req pointer, as this will be used for response */
3566 /* store Params pass it to WDI */
3567 pWdaParams->pWdaContext = pWDA;
3568 pWdaParams->wdaMsgParam = joinReqParam;
3569 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303571 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 if(IS_WDI_STATUS_FAILURE(status))
3573 {
3574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3575 "Failure in Join WDI API, free all the memory " );
3576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3577 vos_mem_free(pWdaParams) ;
3578 joinReqParam->status = eSIR_FAILURE ;
3579 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 return CONVERT_WDI2VOS_STATUS(status) ;
3582}
Jeff Johnson295189b2012-06-20 16:38:30 -07003583/*
3584 * FUNCTION: WDA_SwitchChannelReqCallback
3585 * send Switch channel RSP back to PE
3586 */
3587void WDA_SwitchChannelReqCallback(
3588 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3589{
3590 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3591 tWDA_CbContext *pWDA;
3592 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003594 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 if(NULL == pWdaParams)
3596 {
3597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003598 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 VOS_ASSERT(0) ;
3600 return ;
3601 }
3602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3603 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3604
3605#ifdef WLAN_FEATURE_VOWIFI
3606 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3607#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3609 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003611 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 return ;
3614}
Jeff Johnson295189b2012-06-20 16:38:30 -07003615/*
3616 * FUNCTION: WDA_ProcessChannelSwitchReq
3617 * Request to WDI to switch channel REQ params.
3618 */
3619VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3620 tSwitchChannelParams *pSwitchChanParams)
3621{
3622 WDI_Status status = WDI_STATUS_SUCCESS ;
3623 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3624 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3625 sizeof(WDI_SwitchChReqParamsType)) ;
3626 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003628 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 if(NULL == wdiSwitchChanParam)
3630 {
3631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 VOS_ASSERT(0);
3634 return VOS_STATUS_E_NOMEM;
3635 }
3636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3637 if(NULL == pWdaParams)
3638 {
3639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_ASSERT(0);
3642 vos_mem_free(wdiSwitchChanParam);
3643 return VOS_STATUS_E_NOMEM;
3644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3646#ifndef WLAN_FEATURE_VOWIFI
3647 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3648 pSwitchChanParams->localPowerConstraint;
3649#endif
3650 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3651 pSwitchChanParams->secondaryChannelOffset;
3652 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 /* Store req pointer, as this will be used for response */
3654 /* store Params pass it to WDI */
3655 pWdaParams->pWdaContext = pWDA;
3656 pWdaParams->wdaMsgParam = pSwitchChanParams;
3657 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658#ifdef WLAN_FEATURE_VOWIFI
3659 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3660 = pSwitchChanParams->maxTxPower;
3661 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3662 pSwitchChanParams ->selfStaMacAddr,
3663 sizeof(tSirMacAddr));
3664#endif
3665 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3666 pSwitchChanParams->bssId,
3667 sizeof(tSirMacAddr));
3668
3669 status = WDI_SwitchChReq(wdiSwitchChanParam,
3670 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 if(IS_WDI_STATUS_FAILURE(status))
3672 {
3673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3674 "Failure in process channel switch Req WDI API, free all the memory " );
3675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3676 vos_mem_free(pWdaParams) ;
3677 pSwitchChanParams->status = eSIR_FAILURE ;
3678 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003680 return CONVERT_WDI2VOS_STATUS(status) ;
3681}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003682
3683/*
3684 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3685 * send Switch channel RSP back to PE
3686 */
3687void WDA_SwitchChannelReqCallback_V1(
3688 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3689 void* pUserData)
3690{
3691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3692 tWDA_CbContext *pWDA;
3693 tSwitchChannelParams *pSwitchChanParams;
3694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3695 "<------ %s " ,__func__);
3696
3697 if (NULL == pWdaParams)
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3700 "%s: pWdaParams received NULL", __func__);
3701 VOS_ASSERT(0);
3702 return ;
3703 }
3704 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3705 pSwitchChanParams =
3706 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3707 pSwitchChanParams->channelSwitchSrc =
3708 wdiSwitchChanRsp->channelSwitchSrc;
3709#ifdef WLAN_FEATURE_VOWIFI
3710 pSwitchChanParams->txMgmtPower =
3711 wdiSwitchChanRsp->ucTxMgmtPower;
3712#endif
3713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3714 vos_mem_free(pWdaParams);
3715 pSwitchChanParams->status =
3716 wdiSwitchChanRsp->wdiStatus ;
3717 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3718 (void *)pSwitchChanParams , 0);
3719 return;
3720}
3721
3722/*
3723 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3724 * Request to WDI to switch channel REQ params.
3725 */
3726VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3727 tSwitchChannelParams *pSwitchChanParams)
3728{
3729 WDI_Status status = WDI_STATUS_SUCCESS ;
3730 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3731 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3732 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3733 tWDA_ReqParams *pWdaParams ;
3734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3735 "------> %s " ,__func__);
3736 if (NULL == wdiSwitchChanParam)
3737 {
3738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3739 "%s: VOS MEM Alloc Failure", __func__);
3740 VOS_ASSERT(0);
3741 return VOS_STATUS_E_NOMEM;
3742 }
3743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3744 if (NULL == pWdaParams)
3745 {
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3747 "%s: VOS MEM Alloc Failure", __func__);
3748 VOS_ASSERT(0);
3749 vos_mem_free(wdiSwitchChanParam);
3750 return VOS_STATUS_E_NOMEM;
3751 }
3752 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3753 pSwitchChanParams->channelSwitchSrc;
3754
3755 wdiSwitchChanParam->wdiChInfo.ucChannel =
3756 pSwitchChanParams->channelNumber;
3757#ifndef WLAN_FEATURE_VOWIFI
3758 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3759 pSwitchChanParams->localPowerConstraint;
3760#endif
3761 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3762 pSwitchChanParams->secondaryChannelOffset;
3763 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3764 /* Store req pointer, as this will be used for response */
3765 /* store Params pass it to WDI */
3766 pWdaParams->pWdaContext = pWDA;
3767 pWdaParams->wdaMsgParam = pSwitchChanParams;
3768 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3769#ifdef WLAN_FEATURE_VOWIFI
3770 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3771 pSwitchChanParams->maxTxPower;
3772 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3773 pSwitchChanParams ->selfStaMacAddr,
3774 sizeof(tSirMacAddr));
3775#endif
3776 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3777 pSwitchChanParams->bssId,
3778 sizeof(tSirMacAddr));
3779
3780 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3781 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3782 pWdaParams);
3783 if (IS_WDI_STATUS_FAILURE(status))
3784 {
3785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3786 "Failure in process channel switch Req WDI "
3787 "API, free all the memory " );
3788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3789 vos_mem_free(pWdaParams) ;
3790 pSwitchChanParams->status = eSIR_FAILURE ;
3791 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3792 (void *)pSwitchChanParams, 0) ;
3793 }
3794 return CONVERT_WDI2VOS_STATUS(status) ;
3795}
3796
Jeff Johnson295189b2012-06-20 16:38:30 -07003797/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303798 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 * config BSS Req Callback, called by WDI
3800 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303801void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 ,void* pUserData)
3803{
3804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3805 tWDA_CbContext *pWDA;
3806 tAddBssParams *configBssReqParam;
3807 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003809 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 if(NULL == pWdaParams)
3811 {
3812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003813 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 VOS_ASSERT(0) ;
3815 return ;
3816 }
3817 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3818 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3819 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003821 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3823 {
3824 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3825 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3827 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3828 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3829
3830 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3831 {
3832 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3833 {
3834 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3835 staConfigBssParam->staType = STA_ENTRY_BSSID;
3836 }
3837 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3838 (staConfigBssParam->staType == STA_ENTRY_SELF))
3839 {
3840 /* This is the 1st add BSS Req for the BTAMP STA */
3841 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3842 staConfigBssParam->staType = STA_ENTRY_BSSID;
3843 }
3844 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3845 (staConfigBssParam->staType == STA_ENTRY_PEER))
3846 {
3847 /* This is the 2nd ADD BSS Request that is sent
3848 * on the BTAMP STA side. The Sta type is
3849 * set to STA_ENTRY_PEER here.*/
3850 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3851 }
3852 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3853 (staConfigBssParam->staType == STA_ENTRY_SELF))
3854 {
3855 /* statype is already set by PE.
3856 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3857 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3858 staConfigBssParam->staType = STA_ENTRY_BSSID;
3859 }
3860 else
3861 {
3862 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3863 staConfigBssParam->staType = STA_ENTRY_PEER;
3864 }
3865 }
3866 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3867 {
3868 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3869 staConfigBssParam->staType = STA_ENTRY_SELF;
3870 }
3871 else
3872 {
3873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3874 "Invalid operation mode specified");
3875 VOS_ASSERT(0);
3876 }
3877
3878 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3883 sizeof(tSirMacAddr));
3884 staConfigBssParam->txChannelWidthSet =
3885 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3887 staConfigBssParam->htCapable)
3888 {
3889 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3890 wdiConfigBssRsp->ucBSSIdx;
3891 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3892 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303893 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3894 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3897 wdiConfigBssRsp->ucBSSIdx,
3898 wdiConfigBssRsp->ucSTAIdx))
3899 {
3900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 VOS_ASSERT(0) ;
3903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3905 {
3906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003907 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 VOS_ASSERT(0) ;
3909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003910#ifdef WLAN_FEATURE_VOWIFI
3911 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3912#endif
3913 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303914 else
3915 {
3916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3917 "%s: Failure with status %d", __func__,
3918 wdiConfigBssRsp->wdiStatus);
3919 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3920 WLAN_LOG_INDICATOR_HOST_DRIVER,
3921 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3922 FALSE, TRUE);
3923 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303924 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3925 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3927 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 return ;
3930}
Jeff Johnson295189b2012-06-20 16:38:30 -07003931/*
3932 * FUNCTION: WDA_UpdateEdcaParamsForAC
3933 * Update WDI EDCA params with PE edca params
3934 */
3935void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3936 WDI_EdcaParamRecord *wdiEdcaParam,
3937 tSirMacEdcaParamRecord *macEdcaParam)
3938{
3939 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3940 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3941 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3942 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3943 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3944 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3945}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303946void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3947 void* pUserData)
3948{
3949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3950 tWDA_CbContext *pWDA;
3951 tAddBssParams *addBssParams;
3952
3953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3954 "<------ %s, wdiStatus: %d",
3955 __func__, wdiStatus);
3956
3957 if (NULL == pWdaParams)
3958 {
3959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3960 "%s: Invalid pWdaParams pointer", __func__);
3961 VOS_ASSERT(0);
3962 return;
3963 }
3964
3965 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3966 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3967
3968 addBssParams->status = wdiStatus;
3969
3970 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3971 {
3972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3973 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303974 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3975 WLAN_LOG_INDICATOR_HOST_DRIVER,
3976 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3977 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303978 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3979 }
3980
3981 return ;
3982}
3983
Jeff Johnson295189b2012-06-20 16:38:30 -07003984/*
3985 * FUNCTION: WDA_ProcessConfigBssReq
3986 * Configure BSS before starting Assoc with AP
3987 */
3988VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3989 tAddBssParams* configBssReqParam)
3990{
3991 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303992 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003995 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303996 if (NULL == configBssReqParam)
3997 {
3998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3999 "%s: configBssReqParam is NULL", __func__);
4000 return VOS_STATUS_E_INVAL;
4001 }
4002
4003 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4004 sizeof(WDI_ConfigBSSReqParamsType)) ;
4005
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 if(NULL == wdiConfigBssReqParam)
4007 {
4008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 VOS_ASSERT(0);
4011 return VOS_STATUS_E_NOMEM;
4012 }
4013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4014 if(NULL == pWdaParams)
4015 {
4016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 VOS_ASSERT(0);
4019 vos_mem_free(wdiConfigBssReqParam);
4020 return VOS_STATUS_E_NOMEM;
4021 }
Kiran4a17ebe2013-01-31 10:43:43 -08004022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4023 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4026 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304027 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4028 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 /* Store Init Req pointer, as this will be used for response */
4030 /* store Params pass it to WDI */
4031 pWdaParams->pWdaContext = pWDA;
4032 pWdaParams->wdaMsgParam = configBssReqParam;
4033 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304035 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 if(IS_WDI_STATUS_FAILURE(status))
4037 {
4038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4039 "Failure in Config BSS WDI API, free all the memory " );
4040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4041 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 return CONVERT_WDI2VOS_STATUS(status) ;
4046}
Jeff Johnson295189b2012-06-20 16:38:30 -07004047#ifdef ENABLE_HAL_COMBINED_MESSAGES
4048/*
4049 * FUNCTION: WDA_PostAssocReqCallback
4050 * Post ASSOC req callback, send RSP back to PE
4051 */
4052void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4053 void* pUserData)
4054{
4055 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4056 tPostAssocParams *postAssocReqParam =
4057 (tPostAssocParams *)pWDA->wdaMsgParam ;
4058 /*STA context within the BSS Params*/
4059 tAddStaParams *staPostAssocParam =
4060 &postAssocReqParam->addBssParams.staContext ;
4061 /*STA Params for self STA*/
4062 tAddStaParams *selfStaPostAssocParam =
4063 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004067 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4069 {
4070 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4071 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4072 sizeof(tSirMacAddr)) ;
4073 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4074 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4075 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4077 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304078 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4080 pWDA->wdaWdiApiMsgParam = NULL;
4081 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 return ;
4084}
Jeff Johnson295189b2012-06-20 16:38:30 -07004085/*
4086 * FUNCTION: WDA_ProcessPostAssocReq
4087 * Trigger POST ASSOC processing in WDI
4088 */
4089VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4090 tPostAssocParams *postAssocReqParam)
4091{
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 WDI_Status status = WDI_STATUS_SUCCESS ;
4093
4094 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4095 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4096 sizeof(WDI_PostAssocReqParamsType)) ;
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004099
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 if(NULL == wdiPostAssocReqParam)
4101 {
4102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004103 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 VOS_ASSERT(0);
4105 return VOS_STATUS_E_NOMEM;
4106 }
4107
4108 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4109 {
4110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004111 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 VOS_ASSERT(0);
4113 return VOS_STATUS_E_FAILURE;
4114 }
4115
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 /* update BSS params into WDI structure */
4117 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4118 &postAssocReqParam->addBssParams) ;
4119 /* update STA params into WDI structure */
4120 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4121 &postAssocReqParam->addStaParams) ;
4122
4123 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4124 postAssocReqParam->addBssParams.highPerformance;
4125 WDA_UpdateEdcaParamsForAC(pWDA,
4126 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4127 &postAssocReqParam->addBssParams.acbe);
4128 WDA_UpdateEdcaParamsForAC(pWDA,
4129 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4130 &postAssocReqParam->addBssParams.acbk);
4131 WDA_UpdateEdcaParamsForAC(pWDA,
4132 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4133 &postAssocReqParam->addBssParams.acvi);
4134 WDA_UpdateEdcaParamsForAC(pWDA,
4135 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4136 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 /* Store Init Req pointer, as this will be used for response */
4138 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 /* store Params pass it to WDI */
4140 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4142 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 if(IS_WDI_STATUS_FAILURE(status))
4144 {
4145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4146 "Failure in Post Assoc WDI API, free all the memory " );
4147 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4148 pWDA->wdaWdiApiMsgParam = NULL;
4149 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 return CONVERT_WDI2VOS_STATUS(status) ;
4154}
4155#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004156/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304157 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 * ADD STA req callback, send RSP back to PE
4159 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304160void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 void* pUserData)
4162{
4163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4164 tWDA_CbContext *pWDA;
4165 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004167 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 if(NULL == pWdaParams)
4169 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 VOS_ASSERT(0) ;
4172 return ;
4173 }
4174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4175 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004177 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4179 {
4180 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4181 /*TODO: UMAC structure doesn't have these fields*/
4182 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4183 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4184 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4185 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4186 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4187 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004188#ifdef FEATURE_WLAN_TDLS
4189 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4190 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4191#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004192 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004193#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 {
4195 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4196 wdiConfigStaRsp->ucBssIdx;
4197 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4198 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304199 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4200 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 }
4202 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4203 {
4204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004205 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 VOS_ASSERT(0) ;
4207 return ;
4208 }
4209 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304210 else
4211 {
4212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4213 "%s: Failure with status %d", __func__,
4214 wdiConfigStaRsp->wdiStatus);
4215 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4216 WLAN_LOG_INDICATOR_HOST_DRIVER,
4217 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4218 FALSE, TRUE);
4219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4221 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 return ;
4224}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304225void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4226 void* pUserData)
4227{
4228 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4229 tWDA_CbContext *pWDA;
4230 tAddStaParams *addStaParams;
4231
4232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4233 "<------ %s, wdiStatus: %d",
4234 __func__, wdiStatus);
4235
4236 if (NULL == pWdaParams)
4237 {
4238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4239 "%s: Invalid pWdaParams pointer", __func__);
4240 VOS_ASSERT(0);
4241 return;
4242 }
4243
4244 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4245 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4246
4247 addStaParams->status = wdiStatus;
4248
4249 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4250 {
4251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4252 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304253 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4254 WLAN_LOG_INDICATOR_HOST_DRIVER,
4255 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4256 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304257 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4258 }
4259
4260 return ;
4261}
4262
Jeff Johnson295189b2012-06-20 16:38:30 -07004263/*
4264 * FUNCTION: WDA_ConfigStaReq
4265 * Trigger Config STA processing in WDI
4266 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304267VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 tAddStaParams *addStaReqParam)
4269{
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4272 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4273 sizeof(WDI_ConfigSTAReqParamsType)) ;
4274 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004276 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 if(NULL == wdiConfigStaReqParam)
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 VOS_ASSERT(0);
4282 return VOS_STATUS_E_NOMEM;
4283 }
4284 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4285 if(NULL == pWdaParams)
4286 {
4287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 VOS_ASSERT(0);
4290 vos_mem_free(wdiConfigStaReqParam);
4291 return VOS_STATUS_E_NOMEM;
4292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 /* update STA params into WDI structure */
4295 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4296 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304297 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4298 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 /* Store Init Req pointer, as this will be used for response */
4300 /* store Params pass it to WDI */
4301 pWdaParams->pWdaContext = pWDA;
4302 pWdaParams->wdaMsgParam = addStaReqParam;
4303 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304304
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304306 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 if(IS_WDI_STATUS_FAILURE(status))
4308 {
4309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4310 "Failure in Config STA WDI API, free all the memory " );
4311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4312 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 return CONVERT_WDI2VOS_STATUS(status) ;
4317}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304318
Jeff Johnson295189b2012-06-20 16:38:30 -07004319/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304320 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304322 */
4323void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 void* pUserData)
4325{
4326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4327 tWDA_CbContext *pWDA;
4328 tDeleteBssParams *delBssReqParam;
4329 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004331 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 if(NULL == pWdaParams)
4333 {
4334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004335 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 VOS_ASSERT(0) ;
4337 return ;
4338 }
4339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4340 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004341 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4343 {
4344 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4345 sizeof(tSirMacAddr)) ;
4346 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304347 else
4348 {
4349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4350 "%s: Failure with status %d", __func__,
4351 wdiDelBssRsp->wdiStatus);
4352 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4353 WLAN_LOG_INDICATOR_HOST_DRIVER,
4354 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4355 FALSE, TRUE);
4356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4358 {
4359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 VOS_ASSERT(0) ;
4362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4364 {
4365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004366 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 VOS_ASSERT(0) ;
4368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4370 {
4371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004372 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 VOS_ASSERT(0) ;
4374 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304375
4376 WLANTL_StartForwarding(staIdx,0,0);
4377
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4379 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 /* reset the the system role*/
4381 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4382
4383 /* Reset the BA related information */
4384 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4385 {
4386 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4387 {
4388 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4389 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304390 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 /* Reset framesTxed counters here */
4392 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4393 {
4394 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4395 }
4396 }
4397 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304398
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 return ;
4401}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304402void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4403 void* pUserData)
4404{
4405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4406 tWDA_CbContext *pWDA;
4407 tDeleteBssParams *delbssParams;
4408
4409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4410 "<------ %s, wdiStatus: %d",
4411 __func__, wdiStatus);
4412
4413 if (NULL == pWdaParams)
4414 {
4415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4416 "%s: Invalid pWdaParams pointer", __func__);
4417 VOS_ASSERT(0);
4418 return;
4419 }
4420
4421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4422 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4423
4424 delbssParams->status = wdiStatus ;
4425
4426 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4427 {
4428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4429 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304430 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4431 WLAN_LOG_INDICATOR_HOST_DRIVER,
4432 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4433 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304434 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4435 }
4436
4437 return ;
4438}
Jeff Johnson295189b2012-06-20 16:38:30 -07004439
Jeff Johnson295189b2012-06-20 16:38:30 -07004440/*
4441 * FUNCTION: WDA_ProcessDelBssReq
4442 * Init DEL BSS req with WDI
4443 */
4444VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4445 tDeleteBssParams *delBssParam)
4446{
4447 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4449 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4450 sizeof(WDI_DelBSSReqParamsType)) ;
4451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 if(NULL == wdiDelBssReqParam)
4455 {
4456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 VOS_ASSERT(0);
4459 return VOS_STATUS_E_NOMEM;
4460 }
4461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4462 if(NULL == pWdaParams)
4463 {
4464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 VOS_ASSERT(0);
4467 vos_mem_free(wdiDelBssReqParam);
4468 return VOS_STATUS_E_NOMEM;
4469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304471 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4472 wdiDelBssReqParam->pUserData = pWdaParams;
4473
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 /* Store Init Req pointer, as this will be used for response */
4475 /* store Params pass it to WDI */
4476 pWdaParams->pWdaContext = pWDA;
4477 pWdaParams->wdaMsgParam = delBssParam;
4478 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304479
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304481 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 if(IS_WDI_STATUS_FAILURE(status))
4483 {
4484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4485 "Failure in Del BSS WDI API, free all the memory " );
4486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4487 vos_mem_free(pWdaParams) ;
4488 delBssParam->status = eSIR_FAILURE ;
4489 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 return CONVERT_WDI2VOS_STATUS(status) ;
4492}
Jeff Johnson295189b2012-06-20 16:38:30 -07004493/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304494 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304496 */
4497void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 void* pUserData)
4499{
4500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4501 tWDA_CbContext *pWDA;
4502 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(NULL == pWdaParams)
4506 {
4507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004508 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304509 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 return ;
4511 }
4512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4513 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004514 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4516 {
4517 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4518 {
4519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004520 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 VOS_ASSERT(0) ;
4522 }
4523 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304524 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304526 else
4527 {
4528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4529 "%s: Failure with status %d", __func__,
4530 wdiDelStaRsp->wdiStatus);
4531 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4532 WLAN_LOG_INDICATOR_HOST_DRIVER,
4533 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4534 FALSE, TRUE);
4535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4537 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 /*Reset the BA information corresponding to this STAIdx */
4539 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4540 WDA_INVALID_STA_INDEX;
4541 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304542 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 return ;
4545}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304546void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4547 void* pUserData)
4548{
4549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4550 tWDA_CbContext *pWDA;
4551 tDeleteStaParams *delStaParams;
4552
4553 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4554 "<------ %s, wdiStatus: %d",
4555 __func__, wdiStatus);
4556
4557 if (NULL == pWdaParams)
4558 {
4559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4560 "%s: Invalid pWdaParams pointer", __func__);
4561 VOS_ASSERT(0);
4562 return;
4563 }
4564
4565 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4566 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4567
4568 delStaParams->status = wdiStatus ;
4569
4570 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4571 {
4572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4573 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304574 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4575 WLAN_LOG_INDICATOR_HOST_DRIVER,
4576 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4577 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304578 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4579 }
4580
4581 return ;
4582}
4583
Jeff Johnson295189b2012-06-20 16:38:30 -07004584/*
4585 * FUNCTION: WDA_ProcessDelStaReq
4586 * Init DEL STA req with WDI
4587 */
4588VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4589 tDeleteStaParams *delStaParam)
4590{
4591 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4593 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4594 sizeof(WDI_DelSTAReqParamsType)) ;
4595 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004597 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 if(NULL == wdiDelStaReqParam)
4599 {
4600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 VOS_ASSERT(0);
4603 return VOS_STATUS_E_NOMEM;
4604 }
4605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4606 if(NULL == pWdaParams)
4607 {
4608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 VOS_ASSERT(0);
4611 vos_mem_free(wdiDelStaReqParam);
4612 return VOS_STATUS_E_NOMEM;
4613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304615 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4616 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 /* Store Init Req pointer, as this will be used for response */
4618 /* store Params pass it to WDI */
4619 pWdaParams->pWdaContext = pWDA;
4620 pWdaParams->wdaMsgParam = delStaParam;
4621 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304622
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304624 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 if(IS_WDI_STATUS_FAILURE(status))
4626 {
4627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4628 "Failure in Del STA WDI API, free all the memory status = %d",
4629 status );
4630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4631 vos_mem_free(pWdaParams) ;
4632 delStaParam->status = eSIR_FAILURE ;
4633 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 return CONVERT_WDI2VOS_STATUS(status) ;
4636}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304637void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004638{
4639 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4640 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304641 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004643 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 if(NULL == pWdaParams)
4645 {
4646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004647 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 VOS_ASSERT(0) ;
4649 return ;
4650 }
4651 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4652 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4654 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004655 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4656 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4657 pwdiAddSTASelfRsp->macSelfSta,
4658 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304659 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4660 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4661 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4662 {
4663 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4664 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4666 "%s: Failure with status %d failcnter %d", __func__,
4667 pwdiAddSTASelfRsp->wdiStatus,
4668 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4669 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4670 WLAN_LOG_INDICATOR_HOST_DRIVER,
4671 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4672 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 return ;
4676}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304677void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4678 void* pUserData)
4679{
4680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4681 tWDA_CbContext *pWDA;
4682 tAddStaSelfParams *addStaSelfParams;
4683
4684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4685 "<------ %s, wdiStatus: %d",
4686 __func__, wdiStatus);
4687
4688 if (NULL == pWdaParams)
4689 {
4690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4691 "%s: Invalid pWdaParams pointer", __func__);
4692 VOS_ASSERT(0);
4693 return;
4694 }
4695
4696 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4697 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4698
4699 addStaSelfParams->status = wdiStatus ;
4700
4701 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4702 {
4703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4704 vos_mem_free(pWdaParams) ;
4705 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4706 = WDA_ADDSTA_REQ_WDI_FAIL;
4707 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4709 "%s: Failure with status %d failcnter %d", __func__,
4710 wdiStatus,
4711 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4712 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4713 WLAN_LOG_INDICATOR_HOST_DRIVER,
4714 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4715 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304716 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4717 }
4718
4719 return ;
4720}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304721
Jeff Johnson295189b2012-06-20 16:38:30 -07004722/*
4723 * FUNCTION: WDA_ProcessAddStaSelfReq
4724 *
4725 */
4726VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4727{
4728 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004729 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4731 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4732 sizeof(WDI_AddSTASelfReqParamsType)) ;
4733 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004735 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304736 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 if( NULL == wdiAddStaSelfReq )
4738 {
4739 VOS_ASSERT( 0 );
4740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004741 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304742 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4743 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 return( VOS_STATUS_E_NOMEM );
4745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 if( NULL == pWdaParams )
4748 {
4749 VOS_ASSERT( 0 );
4750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004751 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304752 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4753 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 vos_mem_free(wdiAddStaSelfReq) ;
4755 return( VOS_STATUS_E_NOMEM );
4756 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304757 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4758 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004759 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004760 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 /* Store Init Req pointer, as this will be used for response */
4762 /* store Params pass it to WDI */
4763 pWdaParams->pWdaContext = pWDA;
4764 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304765 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4766
4767 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4768 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004769
Jeff Johnson43971f52012-07-17 12:26:56 -07004770 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 {
4772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4773 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004774 wstatus );
4775 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4777 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304778 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4779 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 pAddStaSelfReq->status = eSIR_FAILURE ;
4781 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4782 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004783 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004784}
Jeff Johnson295189b2012-06-20 16:38:30 -07004785/*
4786 * FUNCTION: WDA_DelSTASelfRespCallback
4787 *
4788 */
4789void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4790 wdiDelStaSelfRspParams , void* pUserData)
4791{
4792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4793 tWDA_CbContext *pWDA;
4794 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 if (NULL == pWdaParams)
4798 {
4799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004800 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 VOS_ASSERT(0);
4802 return;
4803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4805 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004807 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808
4809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4810 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304811 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304812 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4814 "%s: Failure with status %d", __func__,
4815 wdiDelStaSelfRspParams->wdiStatus);
4816 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4817 WLAN_LOG_INDICATOR_HOST_DRIVER,
4818 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4819 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 return ;
4823}
Jeff Johnson295189b2012-06-20 16:38:30 -07004824/*
4825 * FUNCTION: WDA_DelSTASelfReqCallback
4826 *
4827 */
4828void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4829 void* pUserData)
4830{
4831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4832 tWDA_CbContext *pWDA;
4833 tDelStaSelfParams *delStaSelfParams;
4834
4835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304836 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004837 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004838
4839 if (NULL == pWdaParams)
4840 {
4841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004842 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 VOS_ASSERT(0);
4844 return;
4845 }
4846
4847 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4848 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4849
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004850 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851
4852 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4853 {
4854 VOS_ASSERT(0);
4855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4856 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304857 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4858 WLAN_LOG_INDICATOR_HOST_DRIVER,
4859 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4860 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4862 }
4863
4864 return ;
4865}
4866
4867/*
4868 * FUNCTION: WDA_DelSTASelfReq
4869 * Trigger Config STA processing in WDI
4870 */
4871VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4872 tDelStaSelfParams* pDelStaSelfReqParam)
4873{
4874 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004875 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 tWDA_ReqParams *pWdaParams = NULL;
4877 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4878 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4879 sizeof(WDI_DelSTASelfReqParamsType)) ;
4880
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004882 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 if( NULL == wdiDelStaSelfReq )
4884 {
4885 VOS_ASSERT( 0 );
4886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004887 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 return( VOS_STATUS_E_NOMEM );
4889 }
4890
4891 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4892 if( NULL == pWdaParams )
4893 {
4894 VOS_ASSERT( 0 );
4895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004896 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 vos_mem_free(wdiDelStaSelfReq) ;
4898 return( VOS_STATUS_E_NOMEM );
4899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 pWdaParams->pWdaContext = pWDA;
4901 /* Store param pointer as passed in by caller */
4902 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4903 /* store Params pass it to WDI */
4904 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4906 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4907
4908 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4909 wdiDelStaSelfReq->pUserData = pWdaParams;
4910
Jeff Johnson43971f52012-07-17 12:26:56 -07004911 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4913
Jeff Johnson43971f52012-07-17 12:26:56 -07004914 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 {
4916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4917 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4918 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004919 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4921 vos_mem_free(pWdaParams) ;
4922 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4923 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4924 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004925 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926}
4927
Jeff Johnson295189b2012-06-20 16:38:30 -07004928/*
4929 * FUNCTION: WDA_SendMsg
4930 * Send Message back to PE
4931 */
4932void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4933 void *pBodyptr, tANI_U32 bodyVal)
4934{
4935 tSirMsgQ msg = {0} ;
4936 tANI_U32 status = VOS_STATUS_SUCCESS ;
4937 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 msg.type = msgType;
4939 msg.bodyval = bodyVal;
4940 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 if (VOS_STATUS_SUCCESS != status)
4943 {
4944 if(NULL != pBodyptr)
4945 {
4946 vos_mem_free(pBodyptr);
4947 }
4948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_ASSERT(0) ;
4951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 return ;
4953}
Jeff Johnson295189b2012-06-20 16:38:30 -07004954/*
4955 * FUNCTION: WDA_UpdateBSSParams
4956 * Translated WDA/PE BSS info into WDI BSS info..
4957 */
4958void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4959 WDI_ConfigBSSReqInfoType *wdiBssParams,
4960 tAddBssParams *wdaBssParams)
4961{
4962 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304963 v_U8_t i = 0;
4964
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 /* copy bssReq Params to WDI structure */
4966 vos_mem_copy(wdiBssParams->macBSSID,
4967 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4968 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4969 sizeof(tSirMacAddr)) ;
4970 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4971 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4972 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 wdiBssParams->ucShortSlotTimeSupported =
4974 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4976 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4977 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4978 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4979 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4980
4981 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4982 wdiBssParams->ucTXOPProtectionFullSupport =
4983 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4985 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4988 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4989 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4990 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4991
Chet Lanctot186b5732013-03-18 10:26:30 -07004992 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4993
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 /* copy SSID into WDI structure */
4995 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4996 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4997 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4999 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001#ifdef WLAN_FEATURE_VOWIFI
5002 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5003#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005006#ifdef WLAN_FEATURE_VOWIFI_11R
5007 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 if(wdiBssParams->bExtSetStaKeyParamValid)
5009 {
5010 /* copy set STA key params to WDI structure */
5011 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5012 wdaBssParams->extSetStaKeyParam.staIdx;
5013 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5014 wdaBssParams->extSetStaKeyParam.encType;
5015 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5016 wdaBssParams->extSetStaKeyParam.wepType;
5017 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5018 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5020 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005021 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5023 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5024 {
5025 WDA_GetWepKeysFromCfg( pWDA,
5026 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5027 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5028 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5029 }
5030 else
5031 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5033 keyIndex++)
5034 {
5035 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5036 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5037 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5038 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5039 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5040 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305041
5042 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5043 {
5044 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5045 {
5046 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5047 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5048 }
5049
5050 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5051 {
5052 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5053 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5054 }
5055 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5056 FL("%s: Negated Keys"), __func__);
5057 }
5058 else
5059 {
5060 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5061 FL("%s: No change in Keys "), __func__);
5062 vos_mem_copy(
5063 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5064 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5065 WLAN_MAX_KEY_RSC_LEN);
5066 vos_mem_copy(
5067 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5068 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5069 SIR_MAC_MAX_KEY_LENGTH);
5070 }
5071
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5073 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5074 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5075 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305077 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 }
5080 }
5081 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5082 }
5083 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5084 {
5085 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5086 sizeof(wdaBssParams->extSetStaKeyParam) );
5087 }
5088#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005089#ifdef WLAN_FEATURE_11AC
5090 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5091 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5092#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005093
5094 return ;
5095}
Jeff Johnson295189b2012-06-20 16:38:30 -07005096/*
5097 * FUNCTION: WDA_UpdateSTAParams
5098 * Translated WDA/PE BSS info into WDI BSS info..
5099 */
5100void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5101 WDI_ConfigStaReqInfoType *wdiStaParams,
5102 tAddStaParams *wdaStaParams)
5103{
5104 tANI_U8 i = 0;
5105 /* Update STA params */
5106 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5107 sizeof(tSirMacAddr)) ;
5108 wdiStaParams->usAssocId = wdaStaParams->assocId;
5109 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005110 wdiStaParams->staIdx = wdaStaParams->staIdx;
5111
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 wdiStaParams->ucShortPreambleSupported =
5113 wdaStaParams->shortPreambleSupported;
5114 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5115 sizeof(tSirMacAddr)) ;
5116 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5117
5118 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5119
5120 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5121 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5122 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5123 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5124 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5125 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5126 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5127
5128 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5129 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 wdiStaParams->wdiSupportedRates.opRateMode =
5131 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5133 {
5134 wdiStaParams->wdiSupportedRates.llbRates[i] =
5135 wdaStaParams->supportedRates.llbRates[i];
5136 }
5137 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5138 {
5139 wdiStaParams->wdiSupportedRates.llaRates[i] =
5140 wdaStaParams->supportedRates.llaRates[i];
5141 }
5142 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5143 {
5144 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5145 wdaStaParams->supportedRates.aniLegacyRates[i];
5146 }
5147 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5148 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005149#ifdef WLAN_FEATURE_11AC
5150 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5151 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5152 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5153 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5154#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5156 {
5157 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5158 wdaStaParams->supportedRates.supportedMCSSet[i];
5159 }
5160 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5161 wdaStaParams->supportedRates.rxHighestDataRate;
5162
5163 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5164
5165 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5166
5167 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5168 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5169 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5170
5171 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5172 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5173 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5174 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005176#ifdef WLAN_FEATURE_11AC
5177 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5178 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005179 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305180 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5181 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5182 * must be set by default */
5183 if ( wdiStaParams->vhtTxMUBformeeCapable )
5184 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005185#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005186 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5187 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005188 return ;
5189}
Jeff Johnson295189b2012-06-20 16:38:30 -07005190/*
5191 * -------------------------------------------------------------------------
5192 * CFG update to WDI
5193 * -------------------------------------------------------------------------
5194 */
5195
5196 /*
5197 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5198 * Convert the WNI CFG ID to HAL CFG ID
5199 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005200static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005201{
5202 switch(wniCfgId)
5203 {
5204 case WNI_CFG_STA_ID:
5205 return QWLAN_HAL_CFG_STA_ID;
5206 case WNI_CFG_CURRENT_TX_ANTENNA:
5207 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5208 case WNI_CFG_CURRENT_RX_ANTENNA:
5209 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5210 case WNI_CFG_LOW_GAIN_OVERRIDE:
5211 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5212 case WNI_CFG_POWER_STATE_PER_CHAIN:
5213 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5214 case WNI_CFG_CAL_PERIOD:
5215 return QWLAN_HAL_CFG_CAL_PERIOD;
5216 case WNI_CFG_CAL_CONTROL:
5217 return QWLAN_HAL_CFG_CAL_CONTROL;
5218 case WNI_CFG_PROXIMITY:
5219 return QWLAN_HAL_CFG_PROXIMITY;
5220 case WNI_CFG_NETWORK_DENSITY:
5221 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5222 case WNI_CFG_MAX_MEDIUM_TIME:
5223 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5224 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5225 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5226 case WNI_CFG_RTS_THRESHOLD:
5227 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5228 case WNI_CFG_SHORT_RETRY_LIMIT:
5229 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5230 case WNI_CFG_LONG_RETRY_LIMIT:
5231 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5232 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5233 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5234 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5235 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5236 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5237 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5238 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5239 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5240 case WNI_CFG_FIXED_RATE:
5241 return QWLAN_HAL_CFG_FIXED_RATE;
5242 case WNI_CFG_RETRYRATE_POLICY:
5243 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5244 case WNI_CFG_RETRYRATE_SECONDARY:
5245 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5246 case WNI_CFG_RETRYRATE_TERTIARY:
5247 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5248 case WNI_CFG_FORCE_POLICY_PROTECTION:
5249 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5250 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5251 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5252 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5253 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5254 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5255 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5256 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5257 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5258 case WNI_CFG_MAX_BA_SESSIONS:
5259 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5260 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5261 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5262 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5263 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5264 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5265 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5266 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5267 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5268 case WNI_CFG_STATS_PERIOD:
5269 return QWLAN_HAL_CFG_STATS_PERIOD;
5270 case WNI_CFG_CFP_MAX_DURATION:
5271 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5272#if 0 /*This is not part of CFG*/
5273 case WNI_CFG_FRAME_TRANS_ENABLED:
5274 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5275#endif
5276 case WNI_CFG_DTIM_PERIOD:
5277 return QWLAN_HAL_CFG_DTIM_PERIOD;
5278 case WNI_CFG_EDCA_WME_ACBK:
5279 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5280 case WNI_CFG_EDCA_WME_ACBE:
5281 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5282 case WNI_CFG_EDCA_WME_ACVI:
5283 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5284 case WNI_CFG_EDCA_WME_ACVO:
5285 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5286#if 0
5287 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5288 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5289 case WNI_CFG_TELE_BCN_TRANS_LI:
5290 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5291 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5292 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5293 case WNI_CFG_TELE_BCN_MAX_LI:
5294 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5295 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5296 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5297#endif
5298 case WNI_CFG_ENABLE_CLOSE_LOOP:
5299 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005300 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5301 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305302 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5303 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 default:
5305 {
5306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005307 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 wniCfgId);
5309 return VOS_STATUS_E_INVAL;
5310 }
5311 }
5312}
Jeff Johnson295189b2012-06-20 16:38:30 -07005313/*
5314 * FUNCTION: WDA_UpdateCfgCallback
5315 *
5316 */
5317void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5318{
5319 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5320 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5321 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005323 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 /*
5325 * currently there is no response message is expected between PE and
5326 * WDA, Failure return from WDI is a ASSERT condition
5327 */
5328 if(WDI_STATUS_SUCCESS != wdiStatus)
5329 {
5330 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005331 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5333 }
5334
5335 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5336 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5337 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 return ;
5339}
Jeff Johnson295189b2012-06-20 16:38:30 -07005340/*
5341 * FUNCTION: WDA_UpdateCfg
5342 *
5343 */
5344VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5345{
5346
5347 WDI_Status status = WDI_STATUS_SUCCESS ;
5348 tANI_U32 val =0;
5349 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5350 tHalCfg *configData;
5351 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5352 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005354 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 if (NULL == pMac )
5356 {
5357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005358 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 return VOS_STATUS_E_FAILURE;
5360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 if(WDA_START_STATE != pWDA->wdaState)
5362 {
5363 return VOS_STATUS_E_FAILURE;
5364 }
5365
5366 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5367 {
5368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005369 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 VOS_ASSERT(0);
5371 return VOS_STATUS_E_FAILURE;
5372 }
5373
5374 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5375 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 if(NULL == wdiCfgReqParam)
5377 {
5378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 VOS_ASSERT(0);
5381 return VOS_STATUS_E_NOMEM;
5382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5384 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(NULL == wdiCfgReqParam->pConfigBuffer)
5386 {
5387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 vos_mem_free(wdiCfgReqParam);
5390 VOS_ASSERT(0);
5391 return VOS_STATUS_E_NOMEM;
5392 }
5393
5394 /*convert the WNI CFG Id to HAL CFG Id*/
5395 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5396 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5397
5398 /*TODO: revisit this for handling string parameters */
5399 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5400 &val) != eSIR_SUCCESS)
5401 {
5402 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005403 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5405 vos_mem_free(wdiCfgReqParam);
5406 return eSIR_FAILURE;
5407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5409 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5410 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5411 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5412 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5413
5414 /* store Params pass it to WDI */
5415 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005416#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5417 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5418 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 if(IS_WDI_STATUS_FAILURE(status))
5420 {
5421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5422 "Failure in Update CFG WDI API, free all the memory " );
5423 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5424 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5425 pWDA->wdaWdiCfgApiMsgParam = NULL;
5426 /* Failure is not expected */
5427 VOS_ASSERT(0) ;
5428 }
5429#else
5430 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5431 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5432 pWDA->wdaWdiCfgApiMsgParam = NULL;
5433#endif
5434 return CONVERT_WDI2VOS_STATUS(status) ;
5435}
5436
Jeff Johnson295189b2012-06-20 16:38:30 -07005437VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5438 v_U8_t *pDefaultKeyId,
5439 v_U8_t *pNumKeys,
5440 WDI_KeysType *pWdiKeys )
5441{
5442 v_U32_t i, j, defKeyId = 0;
5443 v_U32_t val = SIR_MAC_KEY_LENGTH;
5444 VOS_STATUS status = WDI_STATUS_SUCCESS;
5445 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 if (NULL == pMac )
5447 {
5448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005449 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005450 return VOS_STATUS_E_FAILURE;
5451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5453 &defKeyId ))
5454 {
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5456 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5457 }
5458
5459 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 /* Need to extract ALL of the configured WEP Keys */
5461 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5462 {
5463 val = SIR_MAC_KEY_LENGTH;
5464 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5465 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5466 pWdiKeys[j].key,
5467 &val ))
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005470 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 }
5472 else
5473 {
5474 pWdiKeys[j].keyId = (tANI_U8) i;
5475 /*
5476 * Actually, a DC (Don't Care) because
5477 * this is determined (and set) by PE/MLME
5478 */
5479 pWdiKeys[j].unicast = 0;
5480 /*
5481 * Another DC (Don't Care)
5482 */
5483 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5484 /* Another DC (Don't Care). Unused for WEP */
5485 pWdiKeys[j].paeRole = 0;
5486 /* Determined from wlan_cfgGetStr() above.*/
5487 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 j++;
5489 *pNumKeys = (tANI_U8) j;
5490 }
5491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 return status;
5493}
Jeff Johnson295189b2012-06-20 16:38:30 -07005494/*
5495 * FUNCTION: WDA_SetBssKeyReqCallback
5496 * send SET BSS key RSP back to PE
5497 */
5498void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5499{
5500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5501 tWDA_CbContext *pWDA;
5502 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 if(NULL == pWdaParams)
5506 {
5507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 VOS_ASSERT(0) ;
5510 return ;
5511 }
5512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5513 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305514 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5515 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5517 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005518 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 return ;
5521}
Jeff Johnson295189b2012-06-20 16:38:30 -07005522/*
5523 * FUNCTION: WDA_ProcessSetBssKeyReq
5524 * Request to WDI for programming the BSS key( key for
5525 * broadcast/multicast frames Encryption)
5526 */
5527VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5528 tSetBssKeyParams *setBssKeyParams )
5529{
5530 WDI_Status status = WDI_STATUS_SUCCESS ;
5531 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5532 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5533 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5534 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 if(NULL == wdiSetBssKeyParam)
5539 {
5540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 VOS_ASSERT(0);
5543 return VOS_STATUS_E_NOMEM;
5544 }
5545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5546 if(NULL == pWdaParams)
5547 {
5548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_ASSERT(0);
5551 vos_mem_free(wdiSetBssKeyParam);
5552 return VOS_STATUS_E_NOMEM;
5553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 /* copy set BSS params to WDI structure */
5556 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5557 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5558 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 if(setBssKeyParams->encType != eSIR_ED_NONE)
5560 {
5561 if( setBssKeyParams->numKeys == 0 &&
5562 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5563 setBssKeyParams->encType == eSIR_ED_WEP104))
5564 {
5565 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5567 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5568 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5569 }
5570 else
5571 {
5572 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5573 {
5574 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5575 setBssKeyParams->key[keyIndex].keyId;
5576 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5577 setBssKeyParams->key[keyIndex].unicast;
5578 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5579 setBssKeyParams->key[keyIndex].keyDirection;
5580 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5581 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5582 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5583 setBssKeyParams->key[keyIndex].paeRole;
5584 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5585 setBssKeyParams->key[keyIndex].keyLength;
5586 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5587 setBssKeyParams->key[keyIndex].key,
5588 SIR_MAC_MAX_KEY_LENGTH);
5589 }
5590 }
5591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5593 setBssKeyParams->singleTidRc;
5594 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 /* Store set key pointer, as this will be used for response */
5596 /* store Params pass it to WDI */
5597 pWdaParams->pWdaContext = pWDA;
5598 pWdaParams->wdaMsgParam = setBssKeyParams;
5599 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005600 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5601 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5602
5603 if(IS_WDI_STATUS_FAILURE(status))
5604 {
5605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5606 "Failure in Set BSS Key Req WDI API, free all the memory " );
5607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5608 vos_mem_free(pWdaParams) ;
5609 setBssKeyParams->status = eSIR_FAILURE ;
5610 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 return CONVERT_WDI2VOS_STATUS(status) ;
5613}
Jeff Johnson295189b2012-06-20 16:38:30 -07005614/*
5615 * FUNCTION: WDA_RemoveBssKeyReqCallback
5616 * send SET BSS key RSP back to PE
5617 */
5618void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5619{
5620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5621 tWDA_CbContext *pWDA;
5622 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005624 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 if(NULL == pWdaParams)
5626 {
5627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005628 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 VOS_ASSERT(0) ;
5630 return ;
5631 }
5632 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5633 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5635 vos_mem_free(pWdaParams) ;
5636
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005637 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 return ;
5640}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305641
5642/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305643 * FUNCTION: WDA_GetFrameLogRspCallback
5644 * recieves get frame log response from FW
5645 */
5646void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5647 void* pUserData)
5648{
5649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5650 tWDA_CbContext *pWDA = NULL;
5651 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5652
5653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5654 "<------ Entering: %s " ,__func__);
5655 if(NULL == pWdaParams)
5656 {
5657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5658 "%s: pWdaParams received NULL", __func__);
5659 VOS_ASSERT(0) ;
5660 return ;
5661 }
5662
5663 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5664 if (NULL == pWDA)
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5667 "%s:pWDA is NULL", __func__);
5668 VOS_ASSERT(0);
5669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5670 vos_mem_free(pWdaParams);
5671 return ;
5672 }
5673
5674 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5675 if(NULL == pGetFrameLogReqParams)
5676 {
5677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5678 "%s: pGetFrameLogReqParams received NULL", __func__);
5679 VOS_ASSERT(0);
5680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5681 vos_mem_free(pWdaParams);
5682 return;
5683 }
5684
Siddharth Bhal64246172015-02-27 01:04:37 +05305685 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305687 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5688 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305689 }
5690
5691 /* free WDI command buffer only */
5692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5693 vos_mem_free(pWdaParams->wdaMsgParam);
5694 vos_mem_free(pWdaParams);
5695
5696 return ;
5697
5698}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305699
5700/*
5701 * FUNCTION: WDA_RssiMonitorStopRspCallback
5702 * recieves Rssi Monitor stop response from FW
5703 */
5704void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5705 void* pUserData)
5706{
5707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5708 tSirRssiMonitorReq *pRssiMonitorReqParams;
5709
5710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5711 "<------ %s " ,__func__);
5712
5713 if(NULL == pWdaParams)
5714 {
5715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5716 "%s: pWdaParams received NULL", __func__);
5717 VOS_ASSERT(0);
5718 return ;
5719 }
5720
5721 if(NULL == pWdaParams->wdaMsgParam)
5722 {
5723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5724 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5725 VOS_ASSERT(0);
5726 vos_mem_free(pWdaParams);
5727 return ;
5728 }
5729
5730 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5731
5732 if(pRssiMonitorReqParams->rssiMonitorCallback)
5733 {
5734 pRssiMonitorReqParams->rssiMonitorCallback(
5735 pRssiMonitorReqParams->rssiMonitorCbContext,
5736 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5737 }
5738 else
5739 {
5740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5741 "%s: pFWLoggingInitParams callback is NULL", __func__);
5742 }
5743
5744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5745 vos_mem_free(pWdaParams->wdaMsgParam);
5746 vos_mem_free(pWdaParams);
5747
5748 return;
5749}
5750
5751/*
5752 * FUNCTION: WDA_RssiMonitorStartRspCallback
5753 * recieves Rssi Monitor start response from FW
5754 */
5755void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5756 void* pUserData)
5757{
5758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5759 tSirRssiMonitorReq *pRssiMonitorReqParams;
5760
5761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5762 "<------ %s " ,__func__);
5763
5764 if(NULL == pWdaParams)
5765 {
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5767 "%s: pWdaParams received NULL", __func__);
5768 VOS_ASSERT(0);
5769 return ;
5770 }
5771
5772 if(NULL == pWdaParams->wdaMsgParam)
5773 {
5774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5775 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5776 VOS_ASSERT(0);
5777 vos_mem_free(pWdaParams);
5778 return ;
5779 }
5780
5781 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5782
5783 if(pRssiMonitorReqParams->rssiMonitorCallback)
5784 {
5785 pRssiMonitorReqParams->rssiMonitorCallback(
5786 pRssiMonitorReqParams->rssiMonitorCbContext,
5787 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5788 }
5789 else
5790 {
5791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5792 "%s: pFWLoggingInitParams callback is NULL", __func__);
5793 }
5794
5795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5796 vos_mem_free(pWdaParams->wdaMsgParam);
5797 vos_mem_free(pWdaParams);
5798
5799 return;
5800}
5801
Siddharth Bhal64246172015-02-27 01:04:37 +05305802/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305803 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305804 * recieves Mgmt Logging init response from FW
5805 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305806void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305807 void* pUserData)
5808{
5809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305810 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305811 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305812
5813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5814 "<------ %s " ,__func__);
5815
5816 if(NULL == pWdaParams)
5817 {
5818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5819 "%s: pWdaParams received NULL", __func__);
5820 VOS_ASSERT(0);
5821 return ;
5822 }
5823
5824 if(NULL == pWdaParams->wdaMsgParam)
5825 {
5826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5827 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5828 VOS_ASSERT(0);
5829 vos_mem_free(pWdaParams);
5830 return ;
5831 }
5832
c_manjeecfd1efb2015-09-25 19:32:34 +05305833 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5834 if(NULL == pWdaParams)
5835 {
5836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5837 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5838 VOS_ASSERT(0);
5839 vos_mem_free(pWdaParams);
5840 return;
5841 }
5842
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305843 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305844 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305845
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305846 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305847 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305848 pFWLoggingInitParams->fwlogInitCallback(
5849 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305850 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305851 }
5852 else
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305855 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305856 }
5857
c_manjeecfd1efb2015-09-25 19:32:34 +05305858 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5860 vos_mem_free(pWdaParams->wdaMsgParam);
5861 vos_mem_free(pWdaParams);
5862
5863 return;
5864}
5865
5866/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305867 * FUNCTION: WDA_SpoofMacAddrRspCallback
5868 * recieves spoof mac addr response from FW
5869 */
5870void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5871{
5872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5873 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305874
Siddharth Bhal171788a2014-09-29 21:02:40 +05305875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5876 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305877
Siddharth Bhal171788a2014-09-29 21:02:40 +05305878 if(NULL == pWdaParams)
5879 {
5880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5881 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305882 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305883 return ;
5884 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305885 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305886
Siddharth Bhal029d6732014-10-09 21:31:23 +05305887 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305889 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305890 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305891 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5892 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305893
Siddharth Bhal171788a2014-09-29 21:02:40 +05305894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305895 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305896 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305897
5898 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305899}
5900
Jeff Johnson295189b2012-06-20 16:38:30 -07005901/*
5902 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5903 * Request to WDI to remove the BSS key( key for broadcast/multicast
5904 * frames Encryption)
5905 */
5906VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5907 tRemoveBssKeyParams *removeBssKeyParams )
5908{
5909 WDI_Status status = WDI_STATUS_SUCCESS ;
5910 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5911 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5912 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5913 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(NULL == wdiRemoveBssKeyParam)
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 VOS_ASSERT(0);
5921 return VOS_STATUS_E_NOMEM;
5922 }
5923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5924 if(NULL == pWdaParams)
5925 {
5926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 VOS_ASSERT(0);
5929 vos_mem_free(wdiRemoveBssKeyParam);
5930 return VOS_STATUS_E_NOMEM;
5931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 /* copy Remove BSS key params to WDI structure*/
5933 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5934 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5935 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5936 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5937 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 /* Store remove key pointer, as this will be used for response */
5939 /* store Params pass it to WDI */
5940 pWdaParams->pWdaContext = pWDA;
5941 pWdaParams->wdaMsgParam = removeBssKeyParams;
5942 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5944 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 if(IS_WDI_STATUS_FAILURE(status))
5946 {
5947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5948 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5950 vos_mem_free(pWdaParams) ;
5951 removeBssKeyParams->status = eSIR_FAILURE ;
5952 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 return CONVERT_WDI2VOS_STATUS(status) ;
5955}
Jeff Johnson295189b2012-06-20 16:38:30 -07005956/*
5957 * FUNCTION: WDA_SetBssKeyReqCallback
5958 * send SET BSS key RSP back to PE
5959 */
5960void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5961{
5962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5963 tWDA_CbContext *pWDA;
5964 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005966 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 if(NULL == pWdaParams)
5968 {
5969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005970 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 VOS_ASSERT(0) ;
5972 return ;
5973 }
5974 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5975 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305976 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5977 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5979 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005980 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 return ;
5983}
Jeff Johnson295189b2012-06-20 16:38:30 -07005984/*
5985 * FUNCTION: WDA_ProcessSetStaKeyReq
5986 * Request to WDI for programming the STA key( key for Unicast frames
5987 * Encryption)
5988 */
5989VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5990 tSetStaKeyParams *setStaKeyParams )
5991{
5992 WDI_Status status = WDI_STATUS_SUCCESS ;
5993 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5994 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5995 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005999 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 if(NULL == wdiSetStaKeyParam)
6001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 VOS_ASSERT(0);
6005 return VOS_STATUS_E_NOMEM;
6006 }
6007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6008 if(NULL == pWdaParams)
6009 {
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_ASSERT(0);
6013 vos_mem_free(wdiSetStaKeyParam);
6014 return VOS_STATUS_E_NOMEM;
6015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 /* copy set STA key params to WDI structure */
6019 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6020 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6021 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6022 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 if(setStaKeyParams->encType != eSIR_ED_NONE)
6024 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006025 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6027 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6028 {
6029 WDA_GetWepKeysFromCfg( pWDA,
6030 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6031 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6032 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6033 }
6034 else
6035 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6037 keyIndex++)
6038 {
6039 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6040 setStaKeyParams->key[keyIndex].keyId;
6041 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6042 setStaKeyParams->key[keyIndex].unicast;
6043 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6044 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6046 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6047 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6048 setStaKeyParams->key[keyIndex].paeRole;
6049 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6050 setStaKeyParams->key[keyIndex].keyLength;
6051 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6052 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6053 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6054 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6055 {
6056 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6057 }
6058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6060 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 }
6062 }
6063 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6064 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 /* Store set key pointer, as this will be used for response */
6066 /* store Params pass it to WDI */
6067 pWdaParams->pWdaContext = pWDA;
6068 pWdaParams->wdaMsgParam = setStaKeyParams;
6069 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6071 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 if(IS_WDI_STATUS_FAILURE(status))
6073 {
6074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6075 "Failure in set STA Key Req WDI API, free all the memory " );
6076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6077 vos_mem_free(pWdaParams) ;
6078 setStaKeyParams->status = eSIR_FAILURE ;
6079 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 return CONVERT_WDI2VOS_STATUS(status) ;
6082}
Jeff Johnson295189b2012-06-20 16:38:30 -07006083/*
6084 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6085 * send SET Bcast STA key RSP back to PE
6086 */
6087void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6088{
6089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6090 tWDA_CbContext *pWDA;
6091 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 if(NULL == pWdaParams)
6095 {
6096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006097 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 VOS_ASSERT(0) ;
6099 return ;
6100 }
6101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6102 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6104 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006105 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 return ;
6108}
6109
Jeff Johnson295189b2012-06-20 16:38:30 -07006110/*
6111 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6112 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6113 * Encryption)
6114 */
6115VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6116 tSetStaKeyParams *setStaKeyParams )
6117{
6118 WDI_Status status = WDI_STATUS_SUCCESS ;
6119 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6120 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6121 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6122 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 if(NULL == wdiSetStaKeyParam)
6127 {
6128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 VOS_ASSERT(0);
6131 return VOS_STATUS_E_NOMEM;
6132 }
6133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6134 if(NULL == pWdaParams)
6135 {
6136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 VOS_ASSERT(0);
6139 vos_mem_free(wdiSetStaKeyParam);
6140 return VOS_STATUS_E_NOMEM;
6141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 /* copy set STA key params to WDI structure */
6145 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6146 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6147 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6148 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 if(setStaKeyParams->encType != eSIR_ED_NONE)
6150 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6152 keyIndex++)
6153 {
6154 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6155 setStaKeyParams->key[keyIndex].keyId;
6156 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6157 setStaKeyParams->key[keyIndex].unicast;
6158 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6159 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6161 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6162 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6163 setStaKeyParams->key[keyIndex].paeRole;
6164 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6165 setStaKeyParams->key[keyIndex].keyLength;
6166 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6167 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6170 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 }
6172 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 /* Store set key pointer, as this will be used for response */
6174 /* store Params pass it to WDI */
6175 pWdaParams->pWdaContext = pWDA;
6176 pWdaParams->wdaMsgParam = setStaKeyParams;
6177 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6179 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 if(IS_WDI_STATUS_FAILURE(status))
6181 {
6182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6183 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6185 vos_mem_free(pWdaParams) ;
6186 setStaKeyParams->status = eSIR_FAILURE ;
6187 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 return CONVERT_WDI2VOS_STATUS(status) ;
6190}
Jeff Johnson295189b2012-06-20 16:38:30 -07006191/*
6192 * FUNCTION: WDA_RemoveStaKeyReqCallback
6193 * send SET BSS key RSP back to PE
6194 */
6195void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6196{
6197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6198 tWDA_CbContext *pWDA;
6199 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006201 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 if(NULL == pWdaParams)
6203 {
6204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006205 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 VOS_ASSERT(0) ;
6207 return ;
6208 }
6209 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6210 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6212 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006213 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 return ;
6216}
6217
Jeff Johnson295189b2012-06-20 16:38:30 -07006218/*
6219 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6220 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6221 */
6222VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6223 tRemoveStaKeyParams *removeStaKeyParams )
6224{
6225 WDI_Status status = WDI_STATUS_SUCCESS ;
6226 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6227 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6228 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6229 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006231 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 if(NULL == wdiRemoveStaKeyParam)
6233 {
6234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 VOS_ASSERT(0);
6237 return VOS_STATUS_E_NOMEM;
6238 }
6239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6240 if(NULL == pWdaParams)
6241 {
6242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 VOS_ASSERT(0);
6245 vos_mem_free(wdiRemoveStaKeyParam);
6246 return VOS_STATUS_E_NOMEM;
6247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* copy remove STA key params to WDI structure*/
6249 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6250 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6251 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6252 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6253 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 /* Store remove key pointer, as this will be used for response */
6255 /* store Params pass it to WDI */
6256 pWdaParams->pWdaContext = pWDA;
6257 pWdaParams->wdaMsgParam = removeStaKeyParams;
6258 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6260 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 if(IS_WDI_STATUS_FAILURE(status))
6262 {
6263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6264 "Failure in remove STA Key Req WDI API, free all the memory " );
6265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6266 vos_mem_free(pWdaParams) ;
6267 removeStaKeyParams->status = eSIR_FAILURE ;
6268 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 return CONVERT_WDI2VOS_STATUS(status) ;
6271}
Jeff Johnson295189b2012-06-20 16:38:30 -07006272/*
6273 * FUNCTION: WDA_IsHandleSetLinkStateReq
6274 * Update the WDA state and return the status to handle this message or not
6275 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006276WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6277 tWDA_CbContext *pWDA,
6278 tLinkStateParams *linkStateParams)
6279{
6280 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 switch(linkStateParams->state)
6282 {
6283 case eSIR_LINK_PREASSOC_STATE:
6284 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6285 /*
6286 * set the WDA state to PRE ASSOC
6287 * copy the BSSID into pWDA to use it in join request and return,
6288 * No need to handle these messages.
6289 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006290 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6291 {
6292 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006294 }
6295 else
6296 {
6297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006298 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006299 VOS_ASSERT(0);
6300 }
6301
6302 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6303 {
6304 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006306 }
6307 else
6308 {
6309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006310 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006311 VOS_ASSERT(0);
6312 }
6313
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6315 *channel and after ) so reset the WDA state to ready when the second
6316 * time UMAC issue the link state with PREASSOC
6317 */
6318 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6319 {
6320 /* RESET WDA state back to WDA_READY_STATE */
6321 pWDA->wdaState = WDA_READY_STATE;
6322 }
6323 else
6324 {
6325 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6326 }
6327 //populate linkState info in WDACbCtxt
6328 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 default:
6331 if(pWDA->wdaState != WDA_READY_STATE)
6332 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006333 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6334 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6335 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6336 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6337 *the ASSERT in WDA_Stop during module unload.*/
6338 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6339 {
6340 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006341 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006342 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006343 else
6344 {
6345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006346 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006347 status = WDA_IGNORE_SET_LINK_STATE;
6348 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 }
6350 break;
6351 }
6352
6353 return status;
6354}
Jeff Johnson295189b2012-06-20 16:38:30 -07006355/*
6356 * FUNCTION: WDA_SetLinkStateCallback
6357 * call back function for set link state from WDI
6358 */
6359void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6360{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306361 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 tLinkStateParams *linkStateParams;
6363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006365 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306366 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 {
6368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 VOS_ASSERT(0) ;
6371 return ;
6372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306374 if (NULL == pWDA)
6375 {
6376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6377 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6379 vos_mem_free(pWdaParams->wdaMsgParam);
6380 vos_mem_free(pWdaParams);
6381
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306382 VOS_ASSERT(0);
6383 return ;
6384 }
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 /*
6388 * In STA mode start the BA activity check timer after association
6389 * and in AP mode start BA activity check timer after BSS start */
6390 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6391 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006392 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6393 ((status == WDI_STATUS_SUCCESS) &&
6394 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 {
6396 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 /*
6400 * No respone required for WDA_SET_LINK_STATE so free the request
6401 * param here
6402 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6404 vos_mem_free(pWdaParams);
6405
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 return ;
6407}
Jeff Johnson295189b2012-06-20 16:38:30 -07006408/*
6409 * FUNCTION: WDA_ProcessSetLinkState
6410 * Request to WDI to set the link status.
6411 */
6412VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6413 tLinkStateParams *linkStateParams)
6414{
6415 WDI_Status status = WDI_STATUS_SUCCESS ;
6416 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6417 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6418 sizeof(WDI_SetLinkReqParamsType)) ;
6419 tWDA_ReqParams *pWdaParams ;
6420 tpAniSirGlobal pMac;
6421 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6422
6423 if(NULL == pMac)
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006426 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006428 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 return VOS_STATUS_E_FAILURE;
6430 }
6431
6432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006433 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 if(NULL == wdiSetLinkStateParam)
6435 {
6436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 VOS_ASSERT(0);
6439 return VOS_STATUS_E_NOMEM;
6440 }
6441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6442 if(NULL == pWdaParams)
6443 {
6444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 VOS_ASSERT(0);
6447 vos_mem_free(wdiSetLinkStateParam);
6448 return VOS_STATUS_E_NOMEM;
6449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 if(WDA_IGNORE_SET_LINK_STATE ==
6451 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6452 {
6453 status = WDI_STATUS_E_FAILURE;
6454 }
6455 else
6456 {
6457 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6458 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6460 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6462 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 pWdaParams->pWdaContext = pWDA;
6464 /* Store remove key pointer, as this will be used for response */
6465 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 /* store Params pass it to WDI */
6467 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6468 /* Stop Timer only other than GO role and concurrent session */
6469 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006470 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6472 {
6473 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6476 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 if(IS_WDI_STATUS_FAILURE(status))
6478 {
6479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6480 "Failure in set link state Req WDI API, free all the memory " );
6481 }
6482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 if(IS_WDI_STATUS_FAILURE(status))
6484 {
6485 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006486 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 vos_mem_free(pWdaParams);
6488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 return CONVERT_WDI2VOS_STATUS(status) ;
6490}
Jeff Johnson295189b2012-06-20 16:38:30 -07006491/*
6492 * FUNCTION: WDA_GetStatsReqParamsCallback
6493 * send the response to PE with Stats received from WDI
6494 */
6495void WDA_GetStatsReqParamsCallback(
6496 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6497 void* pUserData)
6498{
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306500 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006501
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 pGetPEStatsRspParams =
6505 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6506 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6507
6508 if(NULL == pGetPEStatsRspParams)
6509 {
6510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 VOS_ASSERT(0);
6513 return;
6514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306516 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6518 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006519
6520 //Fill the Session Id Properly in PE
6521 pGetPEStatsRspParams->sessionId = 0;
6522 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006523 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6525 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 vos_mem_copy( pGetPEStatsRspParams + 1,
6527 wdiGetStatsRsp + 1,
6528 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306529
6530 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6531 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6532 vosMsg.bodyval = 0;
6533 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6534 (vos_msg_t*)&vosMsg))
6535 {
6536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6537 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6538 vos_mem_free(pGetPEStatsRspParams);
6539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006540
6541 return;
6542}
6543
Jeff Johnson295189b2012-06-20 16:38:30 -07006544/*
6545 * FUNCTION: WDA_ProcessGetStatsReq
6546 * Request to WDI to get the statistics
6547 */
6548VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6549 tAniGetPEStatsReq *pGetStatsParams)
6550{
6551 WDI_Status status = WDI_STATUS_SUCCESS ;
6552 WDI_GetStatsReqParamsType wdiGetStatsParam;
6553 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306554 vos_msg_t vosMsg;
6555
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006557 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6559 pGetStatsParams->staId;
6560 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6561 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 status = WDI_GetStatsReq(&wdiGetStatsParam,
6564 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 if(IS_WDI_STATUS_FAILURE(status))
6566 {
6567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6568 "Failure in Get Stats Req WDI API, free all the memory " );
6569 pGetPEStatsRspParams =
6570 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6571 if(NULL == pGetPEStatsRspParams)
6572 {
6573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006576 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 return VOS_STATUS_E_NOMEM;
6578 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306579 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6581 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6582 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306583
6584 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6585 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6586 vosMsg.bodyval = 0;
6587 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6588 (vos_msg_t*)&vosMsg))
6589 {
6590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6591 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6592 vos_mem_free(pGetPEStatsRspParams);
6593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 /* Free the request message */
6596 vos_mem_free(pGetStatsParams);
6597 return CONVERT_WDI2VOS_STATUS(status);
6598}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006599
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006600#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006601/*
6602 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6603 * send the response to PE with roam Rssi received from WDI
6604 */
6605void WDA_GetRoamRssiReqParamsCallback(
6606 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6607 void* pUserData)
6608{
6609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6610 tWDA_CbContext *pWDA = NULL;
6611 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6612 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6614 "<------ %s " ,__func__);
6615 if(NULL == pWdaParams)
6616 {
6617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6618 "%s: pWdaParams received NULL", __func__);
6619 VOS_ASSERT(0) ;
6620 return ;
6621 }
6622 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6623 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6624
6625 if(NULL == pGetRoamRssiReqParams)
6626 {
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6628 "%s: pGetRoamRssiReqParams received NULL", __func__);
6629 VOS_ASSERT(0);
6630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6631 vos_mem_free(pWdaParams);
6632 return ;
6633 }
6634 pGetRoamRssiRspParams =
6635 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6636
6637 if(NULL == pGetRoamRssiRspParams)
6638 {
6639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6640 "%s: VOS MEM Alloc Failure", __func__);
6641 VOS_ASSERT(0);
6642 return;
6643 }
6644 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6645 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006646 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006647 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6648 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6649
6650 /* Assign get roam rssi req (backup) in to the response */
6651 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6652
6653 /* free WDI command buffer */
6654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6655 vos_mem_free(pWdaParams) ;
6656
6657 /* send response to UMAC*/
6658 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6659
6660 return;
6661}
6662
6663
6664
6665/*
6666 * FUNCTION: WDA_ProcessGetRoamRssiReq
6667 * Request to WDI to get the statistics
6668 */
6669VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6670 tAniGetRssiReq *pGetRoamRssiParams)
6671{
6672 WDI_Status status = WDI_STATUS_SUCCESS ;
6673 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6674 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6675 tWDA_ReqParams *pWdaParams = NULL;
6676
6677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6678 "------> %s " ,__func__);
6679 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6680 pGetRoamRssiParams->staId;
6681 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6682
6683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6687 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306688 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006689 VOS_ASSERT(0);
6690 return VOS_STATUS_E_NOMEM;
6691 }
6692
6693 /* Store Init Req pointer, as this will be used for response */
6694 pWdaParams->pWdaContext = pWDA;
6695
6696 /* Take Get roam Rssi req backup as it stores the callback to be called after
6697 receiving the response */
6698 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6699 pWdaParams->wdaWdiApiMsgParam = NULL;
6700
6701 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6702 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6703 if(IS_WDI_STATUS_FAILURE(status))
6704 {
6705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6706 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6707 pGetRoamRssiRspParams =
6708 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6709 if(NULL == pGetRoamRssiRspParams)
6710 {
6711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6712 "%s: VOS MEM Alloc Failure", __func__);
6713 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306714 vos_mem_free(pGetRoamRssiParams);
6715 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006716 return VOS_STATUS_E_NOMEM;
6717 }
6718 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6719 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6720 pGetRoamRssiRspParams->rssi = 0;
6721 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6722 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6723 (void *)pGetRoamRssiRspParams, 0) ;
6724 }
6725 return CONVERT_WDI2VOS_STATUS(status);
6726}
6727#endif
6728
6729
Jeff Johnson295189b2012-06-20 16:38:30 -07006730/*
6731 * FUNCTION: WDA_UpdateEDCAParamCallback
6732 * call back function for Update EDCA params from WDI
6733 */
6734void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6735{
6736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6737 tEdcaParams *pEdcaParams;
6738
6739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006740 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 if(NULL == pWdaParams)
6742 {
6743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006744 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 VOS_ASSERT(0) ;
6746 return ;
6747 }
6748 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6750 vos_mem_free(pWdaParams);
6751 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 return ;
6753}
Jeff Johnson295189b2012-06-20 16:38:30 -07006754/*
6755 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6756 * Request to WDI to Update the EDCA params.
6757 */
6758VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6759 tEdcaParams *pEdcaParams)
6760{
6761 WDI_Status status = WDI_STATUS_SUCCESS ;
6762 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6763 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6764 sizeof(WDI_UpdateEDCAParamsType)) ;
6765 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 if(NULL == wdiEdcaParam)
6769 {
6770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006773 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 return VOS_STATUS_E_NOMEM;
6775 }
6776 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6777 if(NULL == pWdaParams)
6778 {
6779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006781 VOS_ASSERT(0);
6782 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006783 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 return VOS_STATUS_E_NOMEM;
6785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006787 /*
6788 Since firmware is not using highperformance flag, we have removed
6789 this flag from wdiEDCAInfo structure to match sizeof the structure
6790 between host and firmware.In future if we are planning to use
6791 highperformance flag then Please define this flag in wdiEDCAInfo
6792 structure, update it here and send it to firmware. i.e.
6793 Following is the original line which we removed as part of the fix
6794 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6795 pEdcaParams->highPerformance;
6796 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6798 &pEdcaParams->acbe);
6799 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6800 &pEdcaParams->acbk);
6801 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6802 &pEdcaParams->acvi);
6803 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6804 &pEdcaParams->acvo);
6805 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 pWdaParams->pWdaContext = pWDA;
6807 /* Store remove key pointer, as this will be used for response */
6808 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 /* store Params pass it to WDI */
6810 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6812 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 if(IS_WDI_STATUS_FAILURE(status))
6814 {
6815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6816 "Failure in Update EDCA Params WDI API, free all the memory " );
6817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6818 vos_mem_free(pWdaParams);
6819 vos_mem_free(pEdcaParams);
6820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 return CONVERT_WDI2VOS_STATUS(status) ;
6822}
Jeff Johnson295189b2012-06-20 16:38:30 -07006823/*
6824 * FUNCTION: WDA_AddBAReqCallback
6825 * send ADD BA RSP back to PE
6826 */
6827void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6828 void* pUserData)
6829{
6830 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6831 tWDA_CbContext *pWDA;
6832 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006834 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306835 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 {
6837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 VOS_ASSERT(0) ;
6840 return ;
6841 }
6842 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306843 if (NULL == pWDA)
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6846 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6848 vos_mem_free(pWdaParams->wdaMsgParam);
6849 vos_mem_free(pWdaParams);
6850
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306851 VOS_ASSERT(0);
6852 return ;
6853 }
6854
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6857 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006858 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 return ;
6861}
6862
Jeff Johnson295189b2012-06-20 16:38:30 -07006863/*
6864 * FUNCTION: WDA_ProcessAddBAReq
6865 * Request to WDI to Update the ADDBA REQ params.
6866 */
6867VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306868 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006869{
Jeff Johnson43971f52012-07-17 12:26:56 -07006870 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6872 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6873 sizeof(WDI_AddBAReqParamsType)) ;
6874 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 if(NULL == wdiAddBAReqParam)
6878 {
6879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 VOS_ASSERT(0);
6882 return VOS_STATUS_E_NOMEM;
6883 }
6884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6885 if(NULL == pWdaParams)
6886 {
6887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 VOS_ASSERT(0);
6890 vos_mem_free(wdiAddBAReqParam);
6891 return VOS_STATUS_E_NOMEM;
6892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 do
6894 {
6895 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 wdiAddBaInfo->ucSTAIdx = staIdx ;
6897 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306898 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 } while(0) ;
6900 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 pWdaParams->pWdaContext = pWDA;
6902 /* store Params pass it to WDI */
6903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6904 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006905 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6906 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006907
Jeff Johnson43971f52012-07-17 12:26:56 -07006908 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 {
6910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006911 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6912 status = CONVERT_WDI2VOS_STATUS(wstatus);
6913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 vos_mem_free(pWdaParams);
6915 pAddBAReqParams->status = eSIR_FAILURE;
6916 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6917 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006918 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919}
Jeff Johnson295189b2012-06-20 16:38:30 -07006920/*
6921 * FUNCTION: WDA_AddBASessionReqCallback
6922 * send ADD BA SESSION RSP back to PE/(or TL)
6923 */
6924void WDA_AddBASessionReqCallback(
6925 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6926{
6927 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306929 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006932 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 if(NULL == pWdaParams)
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006936 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 VOS_ASSERT(0) ;
6938 return ;
6939 }
6940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306941 if (NULL == pWDA)
6942 {
6943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6944 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6946 vos_mem_free(pWdaParams->wdaMsgParam);
6947 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306948 VOS_ASSERT(0);
6949 return ;
6950 }
6951
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 if( NULL == pAddBAReqParams )
6954 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006956 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6959 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 return ;
6961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6963 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306965 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 * another request to HAL(/WDI) (ADD_BA_REQ)
6967 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006968 if((VOS_STATUS_SUCCESS ==
6969 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306970 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 {
6972 /* Update TL with BA info received from HAL/WDI */
6973 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6974 wdiAddBaSession->usBaSessionID,
6975 wdiAddBaSession->ucSTAIdx,
6976 wdiAddBaSession->ucBaTID,
6977 wdiAddBaSession->ucBaBufferSize,
6978 wdiAddBaSession->ucWinSize,
6979 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306981 wdiAddBaSession->ucSTAIdx,
6982 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 }
6984 else
6985 {
6986 pAddBAReqParams->status =
6987 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6988
6989 /* Setting Flag to indicate that Set BA is success */
6990 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6991 {
6992 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6993 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6994 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 /*Reset the WDA state to READY */
6999 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return ;
7001}
7002
Jeff Johnson295189b2012-06-20 16:38:30 -07007003/*
7004 * FUNCTION: WDA_ProcessAddBASessionReq
7005 * Request to WDI to Update the ADDBA REQ params.
7006 */
7007VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7008 tAddBAParams *pAddBAReqParams)
7009{
7010 WDI_Status status = WDI_STATUS_SUCCESS ;
7011 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7012 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7013 sizeof(WDI_AddBASessionReqParamsType)) ;
7014 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007015 WLANTL_STAStateType tlSTAState = 0;
7016
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 if(NULL == wdiAddBASessionReqParam)
7020 {
7021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 VOS_ASSERT(0);
7024 return VOS_STATUS_E_NOMEM;
7025 }
7026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7027 if(NULL == pWdaParams)
7028 {
7029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 VOS_ASSERT(0);
7032 vos_mem_free(wdiAddBASessionReqParam);
7033 return VOS_STATUS_E_NOMEM;
7034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 /*
7036 * Populate ADD BA parameters and pass these paarmeters to WDI.
7037 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7038 * the state to track if these is BA recipient case or BA initiator
7039 * case.
7040 */
7041 do
7042 {
7043 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7044 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7045 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7046 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7047 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7048 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7049 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7052 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7053 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7054 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7055 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307056
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 }while(0) ;
7058 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 pWdaParams->pWdaContext = pWDA;
7060 /* Store ADD BA pointer, as this will be used for response */
7061 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7062 /* store Params pass it to WDI */
7063 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007064
7065 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7066 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7067 */
7068 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7069 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7070 {
7071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007072 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007073 status = WDI_STATUS_E_NOT_ALLOWED;
7074 pAddBAReqParams->status =
7075 CONVERT_WDI2SIR_STATUS(status) ;
7076 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7077 /*Reset the WDA state to READY */
7078 pWDA->wdaState = WDA_READY_STATE;
7079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7080 vos_mem_free(pWdaParams);
7081
7082 return CONVERT_WDI2VOS_STATUS(status) ;
7083 }
7084
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7086 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 if(IS_WDI_STATUS_FAILURE(status))
7088 {
7089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007090 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007092 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007093 pAddBAReqParams->status =
7094 CONVERT_WDI2SIR_STATUS(status) ;
7095 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007096 /*Reset the WDA state to READY */
7097 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 vos_mem_free(pWdaParams);
7100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102}
Jeff Johnson295189b2012-06-20 16:38:30 -07007103/*
7104 * FUNCTION: WDA_DelBANotifyTL
7105 * send DEL BA IND to TL
7106 */
7107void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7108 tDelBAParams *pDelBAReqParams)
7109{
7110 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7111 //tSirMsgQ msg;
7112 vos_msg_t vosMsg;
7113 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 if(NULL == pDelBAInd)
7115 {
7116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 VOS_ASSERT(0) ;
7119 return;
7120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7122 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7123 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7124 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007125
Jeff Johnson295189b2012-06-20 16:38:30 -07007126
7127 vosMsg.type = WDA_DELETEBA_IND;
7128 vosMsg.bodyptr = pDelBAInd;
7129 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7130 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7131 {
7132 vosStatus = VOS_STATUS_E_BADMSG;
7133 }
7134}
Jeff Johnson295189b2012-06-20 16:38:30 -07007135/*
7136 * FUNCTION: WDA_DelBAReqCallback
7137 * send DEL BA RSP back to PE
7138 */
7139void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7140{
7141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7142 tWDA_CbContext *pWDA;
7143 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 if(NULL == pWdaParams)
7147 {
7148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007149 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 VOS_ASSERT(0) ;
7151 return ;
7152 }
7153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307154
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 /* Notify TL about DEL BA in case of recipinet */
7157 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7158 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7159 {
7160 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 /*
7163 * No respone required for WDA_DELBA_IND so just free the request
7164 * param here
7165 */
7166 vos_mem_free(pDelBAReqParams);
7167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7168 vos_mem_free(pWdaParams);
7169 return ;
7170}
7171
Jeff Johnson295189b2012-06-20 16:38:30 -07007172/*
7173 * FUNCTION: WDA_ProcessDelBAReq
7174 * Request to WDI to Update the DELBA REQ params.
7175 */
7176VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7177 tDelBAParams *pDelBAReqParams)
7178{
7179 WDI_Status status = WDI_STATUS_SUCCESS ;
7180 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7181 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7182 sizeof(WDI_DelBAReqParamsType)) ;
7183 tWDA_ReqParams *pWdaParams ;
7184 tANI_U16 staIdx = 0;
7185 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 if(NULL == wdiDelBAReqParam)
7189 {
7190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 VOS_ASSERT(0);
7193 return VOS_STATUS_E_NOMEM;
7194 }
7195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7196 if(NULL == pWdaParams)
7197 {
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_ASSERT(0);
7201 vos_mem_free(wdiDelBAReqParam);
7202 return VOS_STATUS_E_NOMEM;
7203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7205 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7206 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7207 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 pWdaParams->pWdaContext = pWDA;
7209 /* Store DEL BA pointer, as this will be used for response */
7210 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 /* store Params pass it to WDI */
7212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7214 * maintained in WDA, so that WDA can retry for another BA session
7215 */
7216 staIdx = pDelBAReqParams->staIdx;
7217 tid = pDelBAReqParams->baTID;
7218 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 status = WDI_DelBAReq(wdiDelBAReqParam,
7220 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 if(IS_WDI_STATUS_FAILURE(status))
7222 {
7223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7224 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7226 vos_mem_free(pWdaParams->wdaMsgParam);
7227 vos_mem_free(pWdaParams);
7228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007230}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007231
7232/*
7233 * FUNCTION: WDA_UpdateChReqCallback
7234 *
7235 */
7236void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7237{
Siddharth Bhala006c122014-05-03 12:13:27 +05307238 tWDA_ReqParams *pWdaParams;
7239 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7240 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7241 WDI_UpdateChannelReqinfoType *pChanInfoType;
7242 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007243
7244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7245 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307246 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007247 {
7248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307249 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007250 VOS_ASSERT(0);
7251 return;
7252 }
7253
Siddharth Bhala006c122014-05-03 12:13:27 +05307254 pWdaParams = (tWDA_ReqParams *)pUserData;
7255 pwdiUpdateChReqParam =
7256 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7257 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7258 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7259 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007260 /*
7261 * currently there is no response message is expected between PE and
7262 * WDA, Failure return from WDI is a ASSERT condition
7263 */
7264 vos_mem_free(pChanInfoType);
7265 vos_mem_free(pChanList);
7266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7267 vos_mem_free(pWdaParams);
7268
7269 return;
7270}
7271
7272/*
7273 * FUNCTION: WDA_ProcessUpdateChannelList
7274 * Request to WDI to Update the ChannelList params.
7275 */
7276VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7277 tSirUpdateChanList *pChanList)
7278{
7279 WDI_Status status = WDI_STATUS_SUCCESS;
7280 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7281 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7282 WDI_UpdateChannelReqinfoType *pChanInfoType;
7283 tWDA_ReqParams *pWdaParams;
7284 wpt_uint8 i;
7285
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7287 "------> %s " ,__func__);
7288 if(NULL == pChanList)
7289 {
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7291 "%s: NULL pChanList", __func__);
7292 VOS_ASSERT(0);
7293 return VOS_STATUS_E_INVAL;
7294 }
7295
7296 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7297 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007299 "Update channel list capability Not Supported");
7300 vos_mem_free(pChanList);
7301 return VOS_STATUS_E_INVAL;
7302 }
7303
7304 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7305 sizeof(WDI_UpdateChReqParamsType));
7306 if(NULL == pwdiUpdateChReqParam)
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7310 __func__);
7311 VOS_ASSERT(0);
7312 vos_mem_free(pChanList);
7313 return VOS_STATUS_E_NOMEM;
7314 }
7315 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7316 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7317 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7318 pChanList->numChan);
7319 if(NULL == pChanInfoType)
7320 {
7321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7322 "%s: VOS MEM Alloc Failure", __func__);
7323 VOS_ASSERT(0);
7324 vos_mem_free(pChanList);
7325 vos_mem_free(pwdiUpdateChReqParam);
7326 return VOS_STATUS_E_NOMEM;
7327 }
7328 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7329 * pChanList->numChan);
7330 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7331
7332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7333 if(NULL == pWdaParams)
7334 {
7335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7336 "%s: VOS MEM Alloc Failure", __func__);
7337 VOS_ASSERT(0);
7338 vos_mem_free(pChanList);
7339 vos_mem_free(pChanInfoType);
7340 vos_mem_free(pwdiUpdateChReqParam);
7341 return VOS_STATUS_E_NOMEM;
7342 }
7343 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7344
7345 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7346 {
7347 pChanInfoType->mhz =
7348 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7349
7350 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7351 pChanInfoType->band_center_freq2 = 0;
7352
7353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7354 "chan[%d] = %u", i, pChanInfoType->mhz);
7355 if (pChanList->chanParam[i].dfsSet)
7356 {
7357 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7359 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7360 pChanList->chanParam[i].dfsSet);
7361 }
7362
7363 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7364 {
7365 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7366 }
7367 else
7368 {
7369 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7370 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7371 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7372 }
7373
7374 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7375 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307376 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007377 pChanInfoType++;
7378 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007379 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7380 pWdaParams->pWdaContext = pWDA;
7381 pWdaParams->wdaMsgParam = (void *)pChanList;
7382 /* store Params pass it to WDI */
7383 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7384 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7385 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7386 if(IS_WDI_STATUS_FAILURE(status))
7387 {
7388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7389 "Failure in Update Channel REQ Params WDI API, free all the memory");
7390 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7391 vos_mem_free(pwdiUpdateChReqParam);
7392 vos_mem_free(pWdaParams->wdaMsgParam);
7393 vos_mem_free(pWdaParams);
7394 }
7395 return CONVERT_WDI2VOS_STATUS(status);
7396}
7397
Jeff Johnson295189b2012-06-20 16:38:30 -07007398/*
7399 * FUNCTION: WDA_AddTSReqCallback
7400 * send ADD TS RSP back to PE
7401 */
7402void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7403{
7404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307405 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 tAddTsParams *pAddTsReqParams;
7407
7408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007409 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 if(NULL == pWdaParams)
7411 {
7412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007413 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 VOS_ASSERT(0) ;
7415 return ;
7416 }
7417 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307418 if (NULL == pWDA)
7419 {
7420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7421 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7423 vos_mem_free(pWdaParams->wdaMsgParam);
7424 vos_mem_free(pWdaParams);
7425
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307426 VOS_ASSERT(0);
7427 return ;
7428 }
7429
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7432 vos_mem_free(pWdaParams);
7433
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007434 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 return ;
7437}
7438
Jeff Johnson295189b2012-06-20 16:38:30 -07007439/*
7440 * FUNCTION: WDA_ProcessAddTSReq
7441 * Request to WDI to Update the ADD TS REQ params.
7442 */
7443VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7444 tAddTsParams *pAddTsReqParams)
7445{
7446 WDI_Status status = WDI_STATUS_SUCCESS ;
7447 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7448 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7449 sizeof(WDI_AddTSReqParamsType)) ;
7450 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007452 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 if(NULL == wdiAddTSReqParam)
7454 {
7455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 VOS_ASSERT(0);
7458 return VOS_STATUS_E_NOMEM;
7459 }
7460 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7461 if(NULL == pWdaParams)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
7466 vos_mem_free(wdiAddTSReqParam);
7467 return VOS_STATUS_E_NOMEM;
7468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7470 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 //TS IE
7472 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7474 pAddTsReqParams->tspec.length;
7475
7476 //TS IE : TS INFO : TRAFFIC
7477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7478 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7480 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7482 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7484 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7486 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7487 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7488 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7490 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7492 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7493
7494 //TS IE : TS INFO : SCHEDULE
7495 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7496 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7497 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7498 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 //TS IE
7500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7501 pAddTsReqParams->tspec.nomMsduSz;
7502 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7503 pAddTsReqParams->tspec.maxMsduSz;
7504 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7505 pAddTsReqParams->tspec.minSvcInterval;
7506 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7507 pAddTsReqParams->tspec.maxSvcInterval;
7508 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7509 pAddTsReqParams->tspec.inactInterval;
7510 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7511 pAddTsReqParams->tspec.suspendInterval;
7512 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7513 pAddTsReqParams->tspec.svcStartTime;
7514 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7515 pAddTsReqParams->tspec.minDataRate;
7516 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7517 pAddTsReqParams->tspec.meanDataRate;
7518 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7519 pAddTsReqParams->tspec.peakDataRate;
7520 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7521 pAddTsReqParams->tspec.maxBurstSz;
7522 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7523 pAddTsReqParams->tspec.delayBound;
7524 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7525 pAddTsReqParams->tspec.minPhyRate;
7526 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7527 pAddTsReqParams->tspec.surplusBw;
7528 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7529 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 /* TODO: tAddTsParams doesn't have the following fields */
7531#if 0
7532 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7533 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7534 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7535 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7536#endif
7537 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7538
7539 pWdaParams->pWdaContext = pWDA;
7540 /* Store ADD TS pointer, as this will be used for response */
7541 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007542 /* store Params pass it to WDI */
7543 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 status = WDI_AddTSReq(wdiAddTSReqParam,
7545 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 if(IS_WDI_STATUS_FAILURE(status))
7547 {
7548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7549 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7551 vos_mem_free(pWdaParams);
7552 pAddTsReqParams->status = eSIR_FAILURE ;
7553 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007556}
7557
Jeff Johnson295189b2012-06-20 16:38:30 -07007558/*
7559 * FUNCTION: WDA_DelTSReqCallback
7560 * send DEL TS RSP back to PE
7561 */
7562void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7563{
7564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007566 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7568 vos_mem_free(pWdaParams->wdaMsgParam) ;
7569 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 /*
7571 * No respone required for WDA_DEL_TS_REQ so just free the request
7572 * param here
7573 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 return ;
7575}
7576
Jeff Johnson295189b2012-06-20 16:38:30 -07007577/*
7578 * FUNCTION: WDA_ProcessDelTSReq
7579 * Request to WDI to Update the DELTS REQ params.
7580 */
7581VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7582 tDelTsParams *pDelTSReqParams)
7583{
7584 WDI_Status status = WDI_STATUS_SUCCESS ;
7585 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7586 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7587 sizeof(WDI_DelTSReqParamsType)) ;
7588 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007591 if(NULL == wdiDelTSReqParam)
7592 {
7593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 VOS_ASSERT(0);
7596 return VOS_STATUS_E_NOMEM;
7597 }
7598 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7599 if(NULL == pWdaParams)
7600 {
7601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007603 VOS_ASSERT(0);
7604 vos_mem_free(wdiDelTSReqParam);
7605 return VOS_STATUS_E_NOMEM;
7606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7608 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7609 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7610 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7611 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 pWdaParams->pWdaContext = pWDA;
7613 /* Store DEL TS pointer, as this will be used for response */
7614 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 /* store Params pass it to WDI */
7616 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007617 status = WDI_DelTSReq(wdiDelTSReqParam,
7618 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007619 if(IS_WDI_STATUS_FAILURE(status))
7620 {
7621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7622 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7624 vos_mem_free(pWdaParams->wdaMsgParam);
7625 vos_mem_free(pWdaParams);
7626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007628}
Jeff Johnson295189b2012-06-20 16:38:30 -07007629/*
7630 * FUNCTION: WDA_UpdateBeaconParamsCallback
7631 * Free the memory. No need to send any response to PE in this case
7632 */
7633void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7634{
7635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007637 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007638 if(NULL == pWdaParams)
7639 {
7640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007641 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007642 VOS_ASSERT(0) ;
7643 return ;
7644 }
7645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7646 vos_mem_free(pWdaParams->wdaMsgParam) ;
7647 vos_mem_free(pWdaParams);
7648 /*
7649 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7650 * param here
7651 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 return ;
7653}
Jeff Johnson295189b2012-06-20 16:38:30 -07007654/*
7655 * FUNCTION: WDA_ProcessUpdateBeaconParams
7656 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7657 */
7658VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7659 tUpdateBeaconParams *pUpdateBeaconParams)
7660{
7661 WDI_Status status = WDI_STATUS_SUCCESS ;
7662 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7663 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7664 sizeof(WDI_UpdateBeaconParamsType)) ;
7665 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007667 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007668 if(NULL == wdiUpdateBeaconParams)
7669 {
7670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007671 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 VOS_ASSERT(0);
7673 return VOS_STATUS_E_NOMEM;
7674 }
7675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7676 if(NULL == pWdaParams)
7677 {
7678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 VOS_ASSERT(0);
7681 vos_mem_free(wdiUpdateBeaconParams);
7682 return VOS_STATUS_E_NOMEM;
7683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7685 pUpdateBeaconParams->bssIdx;
7686 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7687 pUpdateBeaconParams->fShortPreamble;
7688 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7689 pUpdateBeaconParams->fShortSlotTime;
7690 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7691 pUpdateBeaconParams->beaconInterval;
7692 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7693 pUpdateBeaconParams->llaCoexist;
7694 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7695 pUpdateBeaconParams->llbCoexist;
7696 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7697 pUpdateBeaconParams->llgCoexist;
7698 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7699 pUpdateBeaconParams->ht20MhzCoexist;
7700 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7701 pUpdateBeaconParams->llnNonGFCoexist;
7702 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7703 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7704 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7705 pUpdateBeaconParams->fRIFSMode;
7706 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7707 pUpdateBeaconParams->paramChangeBitmap;
7708 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7709
7710 pWdaParams->pWdaContext = pWDA;
7711 /* Store UpdateBeacon Req pointer, as this will be used for response */
7712 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 /* store Params pass it to WDI */
7714 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7716 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7717 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 if(IS_WDI_STATUS_FAILURE(status))
7719 {
7720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7721 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7723 vos_mem_free(pWdaParams->wdaMsgParam);
7724 vos_mem_free(pWdaParams);
7725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007727}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007728#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007729/*
7730 * FUNCTION: WDA_TSMStatsReqCallback
7731 * send TSM Stats RSP back to PE
7732 */
7733void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7734{
7735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7736 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007737 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7738 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007739
7740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007741 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 if(NULL == pWdaParams)
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007745 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 VOS_ASSERT(0) ;
7747 return ;
7748 }
7749 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307750 if (NULL == pWDA)
7751 {
7752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7753 "%s:pWDA is NULL", __func__);
7754 VOS_ASSERT(0);
7755 return ;
7756 }
7757
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007758 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7759
7760 if(NULL == pGetTsmStatsReqParams)
7761 {
7762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7763 "%s: pGetTsmStatsReqParams received NULL", __func__);
7764 VOS_ASSERT(0);
7765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7766 vos_mem_free(pWdaParams);
7767 return;
7768 }
7769
7770 pTsmRspParams =
7771 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 if( NULL == pTsmRspParams )
7773 {
7774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007775 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 VOS_ASSERT( 0 );
7777 return ;
7778 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007779 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7780 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7781 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7782
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7784 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7785 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7786 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7787 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7788 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7789 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7790 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7791 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7792 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007793
7794 /* Assign get tsm stats req req (backup) in to the response */
7795 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7796
7797 /* free WDI command buffer */
7798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7799 vos_mem_free(pWdaParams);
7800
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 return ;
7803}
7804
7805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806/*
7807 * FUNCTION: WDA_ProcessTsmStatsReq
7808 * Request to WDI to get the TSM Stats params.
7809 */
7810VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007811 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007812{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007813 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007815 tWDA_ReqParams *pWdaParams = NULL;
7816 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7817
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7821 sizeof(WDI_TSMStatsReqParamsType));
7822 if(NULL == wdiTSMReqParam)
7823 {
7824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007825 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 VOS_ASSERT(0);
7827 return VOS_STATUS_E_NOMEM;
7828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7830 if(NULL == pWdaParams)
7831 {
7832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 VOS_ASSERT(0);
7835 vos_mem_free(wdiTSMReqParam);
7836 return VOS_STATUS_E_NOMEM;
7837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7839 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7840 pTsmStats->bssId,
7841 sizeof(wpt_macAddr));
7842 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7843
7844 pWdaParams->pWdaContext = pWDA;
7845 /* Store TSM Stats pointer, as this will be used for response */
7846 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007847 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 status = WDI_TSMStatsReq(wdiTSMReqParam,
7849 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 if(IS_WDI_STATUS_FAILURE(status))
7851 {
7852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7853 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007854 vos_mem_free(pWdaParams);
7855
7856 pGetTsmStatsRspParams =
7857 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7858 if(NULL == pGetTsmStatsRspParams)
7859 {
7860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7861 "%s: VOS MEM Alloc Failure", __func__);
7862 VOS_ASSERT(0);
7863 vos_mem_free(pTsmStats);
7864 return VOS_STATUS_E_NOMEM;
7865 }
7866 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7867 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7868 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7869
7870 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 return CONVERT_WDI2VOS_STATUS(status) ;
7873}
7874#endif
7875/*
7876 * FUNCTION: WDA_SendBeaconParamsCallback
7877 * No need to send any response to PE in this case
7878 */
7879void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7880{
7881
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 return ;
7885}
Jeff Johnson295189b2012-06-20 16:38:30 -07007886/*
7887 * FUNCTION: WDA_ProcessSendBeacon
7888 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7889 * start beacon trasmission
7890 */
7891VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7892 tSendbeaconParams *pSendbeaconParams)
7893{
7894 WDI_Status status = WDI_STATUS_SUCCESS ;
7895 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7899 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7900 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7901 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7903 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307904 /* p2pIeOffset should be atleast greater than timIeOffset */
7905 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7906 (pSendbeaconParams->p2pIeOffset <
7907 pSendbeaconParams->timIeOffset))
7908 {
7909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7910 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307911 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307912 VOS_ASSERT( 0 );
7913 return WDI_STATUS_E_FAILURE;
7914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7916 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 /* Copy the beacon template to local buffer */
7918 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7919 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7920 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7921
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7923 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 if(IS_WDI_STATUS_FAILURE(status))
7925 {
7926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7927 "Failure in SEND BEACON REQ Params WDI API" );
7928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 vos_mem_free(pSendbeaconParams);
7930 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007931}
Jeff Johnson295189b2012-06-20 16:38:30 -07007932/*
7933 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7934 * No need to send any response to PE in this case
7935 */
7936void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7937{
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007939 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 return ;
7941}
7942
Jeff Johnson295189b2012-06-20 16:38:30 -07007943/*
7944 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7945 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7946 * send probe response
7947 */
7948VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7949 tSendProbeRespParams *pSendProbeRspParams)
7950{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007951 WDI_Status status = WDI_STATUS_SUCCESS;
7952 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7953 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007955 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007956
7957 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307958 {
7959 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007960 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307961 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007962
Jeff Johnson295189b2012-06-20 16:38:30 -07007963 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007964 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007966 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 /* Copy the Probe Response template to local buffer */
7969 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007970 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 pSendProbeRspParams->pProbeRespTemplate,
7972 pSendProbeRspParams->probeRespTemplateLen);
7973 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007974 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7976 WDI_PROBE_REQ_BITMAP_IE_LEN);
7977
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007978 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007979
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007980 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 if(IS_WDI_STATUS_FAILURE(status))
7983 {
7984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7985 "Failure in SEND Probe RSP Params WDI API" );
7986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007987 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007988 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007990}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007991#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007992/*
7993 * FUNCTION: WDA_SetMaxTxPowerCallBack
7994 * send the response to PE with power value received from WDI
7995 */
7996void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7997 void* pUserData)
7998{
7999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8000 tWDA_CbContext *pWDA = NULL;
8001 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8002
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008004 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 if(NULL == pWdaParams)
8006 {
8007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008008 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 VOS_ASSERT(0) ;
8010 return ;
8011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308013 if (NULL == pWDA)
8014 {
8015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8016 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8018 vos_mem_free(pWdaParams->wdaMsgParam);
8019 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308020 VOS_ASSERT(0);
8021 return ;
8022 }
8023
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 if( NULL == pMaxTxPowerParams )
8026 {
8027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008028 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008029 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8031 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 return ;
8033 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008034
Jeff Johnson295189b2012-06-20 16:38:30 -07008035
8036 /*need to free memory for the pointers used in the
8037 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8039 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008041
Jeff Johnson295189b2012-06-20 16:38:30 -07008042
8043 /* send response to UMAC*/
8044 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8045
8046 return;
8047}
Jeff Johnson295189b2012-06-20 16:38:30 -07008048/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008049 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 * Request to WDI to send set Max Tx Power Request
8051 */
8052 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8053 tMaxTxPowerParams *MaxTxPowerParams)
8054{
8055 WDI_Status status = WDI_STATUS_SUCCESS;
8056 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8057 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008058
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008061
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8063 sizeof(WDI_SetMaxTxPowerParamsType));
8064 if(NULL == wdiSetMaxTxPowerParams)
8065 {
8066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 VOS_ASSERT(0);
8069 return VOS_STATUS_E_NOMEM;
8070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8072 if(NULL == pWdaParams)
8073 {
8074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 vos_mem_free(wdiSetMaxTxPowerParams);
8077 VOS_ASSERT(0);
8078 return VOS_STATUS_E_NOMEM;
8079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 /* Copy.Max.Tx.Power Params to WDI structure */
8081 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8082 MaxTxPowerParams->bssId,
8083 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8085 MaxTxPowerParams->selfStaMacAddr,
8086 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8088 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 pWdaParams->pWdaContext = pWDA;
8091 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 /* store Params pass it to WDI */
8093 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8095 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008096 if(IS_WDI_STATUS_FAILURE(status))
8097 {
8098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8099 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8101 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008102 /* send response to UMAC*/
8103 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 }
8105 return CONVERT_WDI2VOS_STATUS(status);
8106
8107}
Jeff Johnson295189b2012-06-20 16:38:30 -07008108#endif
schang86c22c42013-03-13 18:41:24 -07008109
8110/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008111 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8112 * send the response to PE with power value received from WDI
8113 */
8114void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8115 *pwdiSetMaxTxPowerPerBandRsp,
8116 void* pUserData)
8117{
8118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8119 tWDA_CbContext *pWDA = NULL;
8120 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8121
8122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8123 "<------ %s ", __func__);
8124 if (NULL == pWdaParams)
8125 {
8126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8127 "%s: pWdaParams received NULL", __func__);
8128 VOS_ASSERT(0);
8129 return ;
8130 }
8131 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308132 if (NULL == pWDA)
8133 {
8134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8135 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8137 vos_mem_free(pWdaParams->wdaMsgParam);
8138 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308139 VOS_ASSERT(0);
8140 return ;
8141 }
8142
Arif Hussaina5ebce02013-08-09 15:09:58 -07008143 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8144 if ( NULL == pMxTxPwrPerBandParams )
8145 {
8146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8147 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8148 VOS_ASSERT(0);
8149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8150 vos_mem_free(pWdaParams);
8151 return;
8152 }
8153
8154 /*need to free memory for the pointers used in the
8155 WDA Process.Set Max Tx Power Req function*/
8156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8157 vos_mem_free(pWdaParams);
8158 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8159
8160 /* send response to UMAC*/
8161 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8162 pMxTxPwrPerBandParams, 0);
8163
8164 return;
8165}
8166
8167/*
8168 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8169 * Request to WDI to send set Max Tx Power Per band Request
8170 */
8171 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8172 tMaxTxPowerPerBandParams
8173 *MaxTxPowerPerBandParams)
8174{
8175 WDI_Status status = WDI_STATUS_SUCCESS;
8176 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8177 tWDA_ReqParams *pWdaParams = NULL;
8178
8179 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8180 "------> %s ", __func__);
8181
8182 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8183 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8184
8185 if (NULL == wdiSetMxTxPwrPerBandParams)
8186 {
8187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8188 "%s: VOS MEM Alloc Failure", __func__);
8189 VOS_ASSERT(0);
8190 return VOS_STATUS_E_NOMEM;
8191 }
8192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8193 if (NULL == pWdaParams)
8194 {
8195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8196 "%s: VOS MEM Alloc Failure", __func__);
8197 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8198 VOS_ASSERT(0);
8199 return VOS_STATUS_E_NOMEM;
8200 }
8201 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8202 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8203 MaxTxPowerPerBandParams->bandInfo;
8204 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8205 MaxTxPowerPerBandParams->power;
8206 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8207 pWdaParams->pWdaContext = pWDA;
8208 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8209 /* store Params pass it to WDI */
8210 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8211 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8212 WDA_SetMaxTxPowerPerBandCallBack,
8213 pWdaParams);
8214 if (IS_WDI_STATUS_FAILURE(status))
8215 {
8216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "Failure in SET MAX TX Power REQ Params WDI API,"
8218 " free all the memory");
8219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8220 vos_mem_free(pWdaParams);
8221 /* send response to UMAC*/
8222 WDA_SendMsg(pWDA,
8223 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8224 MaxTxPowerPerBandParams, 0);
8225 }
8226 return CONVERT_WDI2VOS_STATUS(status);
8227}
8228
8229/*
schang86c22c42013-03-13 18:41:24 -07008230 * FUNCTION: WDA_SetTxPowerCallBack
8231 * send the response to PE with power value received from WDI
8232 */
8233void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8234 void* pUserData)
8235{
8236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8237 tWDA_CbContext *pWDA = NULL;
8238 tSirSetTxPowerReq *pTxPowerParams = NULL;
8239
8240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8241 "<------ %s ", __func__);
8242 if(NULL == pWdaParams)
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8245 "%s: pWdaParams received NULL", __func__);
8246 VOS_ASSERT(0) ;
8247 return ;
8248 }
8249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308250 if (NULL == pWDA)
8251 {
8252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8253 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8255 vos_mem_free(pWdaParams->wdaMsgParam);
8256 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308257 VOS_ASSERT(0);
8258 return ;
8259 }
8260
schang86c22c42013-03-13 18:41:24 -07008261 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8262 if(NULL == pTxPowerParams)
8263 {
8264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8265 "%s: pTxPowerParams received NULL " ,__func__);
8266 VOS_ASSERT(0);
8267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8268 vos_mem_free(pWdaParams);
8269 return ;
8270 }
8271
8272 /*need to free memory for the pointers used in the
8273 WDA Process.Set Max Tx Power Req function*/
8274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8275 vos_mem_free(pWdaParams);
8276
8277 /* send response to UMAC*/
8278 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8279 return;
8280}
8281
8282/*
8283 * FUNCTION: WDA_ProcessSetTxPowerReq
8284 * Request to WDI to send set Tx Power Request
8285 */
8286 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8287 tSirSetTxPowerReq *txPowerParams)
8288{
8289 WDI_Status status = WDI_STATUS_SUCCESS;
8290 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8291 tWDA_ReqParams *pWdaParams = NULL;
8292
8293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8294 "------> %s ", __func__);
8295
8296 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8297 sizeof(WDI_SetTxPowerParamsType));
8298 if(NULL == wdiSetTxPowerParams)
8299 {
8300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8301 "%s: VOS MEM Alloc Failure", __func__);
8302 VOS_ASSERT(0);
8303 return VOS_STATUS_E_NOMEM;
8304 }
8305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8306 if(NULL == pWdaParams)
8307 {
8308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8309 "%s: VOS MEM Alloc Failure", __func__);
8310 vos_mem_free(wdiSetTxPowerParams);
8311 VOS_ASSERT(0);
8312 return VOS_STATUS_E_NOMEM;
8313 }
8314 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8315 txPowerParams->bssIdx;
8316 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8317 txPowerParams->mwPower;
8318 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8319 pWdaParams->pWdaContext = pWDA;
8320 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8321 /* store Params pass it to WDI */
8322 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8323 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8324 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8325 if(IS_WDI_STATUS_FAILURE(status))
8326 {
8327 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8328 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8330 vos_mem_free(pWdaParams);
8331 /* send response to UMAC*/
8332 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8333 }
8334 return CONVERT_WDI2VOS_STATUS(status);
8335}
8336
Jeff Johnson295189b2012-06-20 16:38:30 -07008337/*
8338 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8339 * Free the memory. No need to send any response to PE in this case
8340 */
8341void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8342{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8344
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008346 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008347
8348 if(NULL == pWdaParams)
8349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008351 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008352 VOS_ASSERT(0) ;
8353 return ;
8354 }
8355
8356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8357 vos_mem_free(pWdaParams->wdaMsgParam) ;
8358 vos_mem_free(pWdaParams);
8359
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 /*
8361 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8362 * so just free the request param here
8363 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 return ;
8365}
8366
Jeff Johnson295189b2012-06-20 16:38:30 -07008367/*
8368 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8369 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8370 */
8371VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8372 tP2pPsParams *pP2pPsConfigParams)
8373{
8374 WDI_Status status = WDI_STATUS_SUCCESS ;
8375 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8376 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8377 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008378 tWDA_ReqParams *pWdaParams = NULL;
8379
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008381 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 if(NULL == wdiSetP2PGONOAReqParam)
8383 {
8384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008385 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308386 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 VOS_ASSERT(0);
8388 return VOS_STATUS_E_NOMEM;
8389 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008390
8391 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8392 if(NULL == pWdaParams)
8393 {
8394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008395 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008396 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008397 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008398 VOS_ASSERT(0);
8399 return VOS_STATUS_E_NOMEM;
8400 }
8401
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8403 pP2pPsConfigParams->opp_ps;
8404 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8405 pP2pPsConfigParams->ctWindow;
8406 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8407 pP2pPsConfigParams->count;
8408 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8409 pP2pPsConfigParams->duration;
8410 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8411 pP2pPsConfigParams->interval;
8412 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8413 pP2pPsConfigParams->single_noa_duration;
8414 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8415 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008416
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8418 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008419 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8420
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008422 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8423 pWdaParams->pWdaContext = pWDA;
8424
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008426 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8427
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 if(IS_WDI_STATUS_FAILURE(status))
8429 {
8430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8431 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8433 vos_mem_free(pWdaParams->wdaMsgParam);
8434 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008436 return CONVERT_WDI2VOS_STATUS(status);
8437
Jeff Johnson295189b2012-06-20 16:38:30 -07008438}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308439
8440#ifdef FEATURE_WLAN_TDLS
8441/*
8442 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8443 * Free the memory. No need to send any response to PE in this case
8444 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308445void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8446 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308447{
8448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8449 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308450 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308451
8452
8453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8454 "<------ %s " ,__func__);
8455 if(NULL == pWdaParams)
8456 {
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8458 "%s: pWdaParams received NULL", __func__);
8459 VOS_ASSERT(0) ;
8460 return ;
8461 }
8462 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8463
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308464 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308465 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8467 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8469 vos_mem_free(pWdaParams->wdaMsgParam);
8470 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308471 VOS_ASSERT(0);
8472 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308473 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308474
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308475 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8476 if( NULL == pTdlsLinkEstablishParams )
8477 {
8478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8479 "%s: pTdlsLinkEstablishParams "
8480 "received NULL " ,__func__);
8481 VOS_ASSERT(0);
8482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8483 vos_mem_free(pWdaParams);
8484 return ;
8485 }
8486 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8487 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308489 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308490 /* send response to UMAC*/
8491 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8492
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308493 return ;
8494}
8495
8496VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8497 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8498{
8499 WDI_Status status = WDI_STATUS_SUCCESS ;
8500 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8501 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8502 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8503 tWDA_ReqParams *pWdaParams = NULL;
8504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8505 "------> %s " ,__func__);
8506 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8509 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308510 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308511 VOS_ASSERT(0);
8512 return VOS_STATUS_E_NOMEM;
8513 }
8514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8515 if(NULL == pWdaParams)
8516 {
8517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8518 "%s: VOS MEM Alloc Failure", __func__);
8519 vos_mem_free(pTdlsLinkEstablishParams);
8520 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8521 VOS_ASSERT(0);
8522 return VOS_STATUS_E_NOMEM;
8523 }
8524 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308525 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308526 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308527 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308528 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308529 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308530 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308531 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308532 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308533 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308534 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8535 pTdlsLinkEstablishParams->isOffChannelSupported;
8536
8537 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8538 pTdlsLinkEstablishParams->validChannels,
8539 pTdlsLinkEstablishParams->validChannelsLen);
8540
8541 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8542 pTdlsLinkEstablishParams->validChannelsLen;
8543
8544 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8545 pTdlsLinkEstablishParams->validOperClasses,
8546 pTdlsLinkEstablishParams->validOperClassesLen);
8547 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8548 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308549
8550 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8551 /* Store msg pointer from PE, as this will be used for response */
8552 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8553 /* store Params pass it to WDI */
8554 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8555 pWdaParams->pWdaContext = pWDA;
8556
8557 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8558 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8559 WDA_SetTDLSLinkEstablishReqParamsCallback,
8560 pWdaParams);
8561 if(IS_WDI_STATUS_FAILURE(status))
8562 {
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8564 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8566 vos_mem_free(pWdaParams->wdaMsgParam);
8567 vos_mem_free(pWdaParams);
8568 }
8569 return CONVERT_WDI2VOS_STATUS(status);
8570}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308571
8572// tdlsoffchan
8573void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8574 void* pUserData)
8575{
8576 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8577 tWDA_CbContext *pWDA = NULL;
8578 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8579
8580
8581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8582 "<------ %s " ,__func__);
8583 if(NULL == pWdaParams)
8584 {
8585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8586 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308587 VOS_ASSERT(0) ;
8588 return ;
8589 }
8590 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8591
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308592 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308593 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8595 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8597 vos_mem_free(pWdaParams->wdaMsgParam);
8598 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308599 VOS_ASSERT(0);
8600 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308601 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308602
Atul Mittalc0f739f2014-07-31 13:47:47 +05308603 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308604 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308605 {
8606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8607 "%s: pTdlsChanSwitchParams "
8608 "received NULL " ,__func__);
8609 VOS_ASSERT(0);
8610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8611 vos_mem_free(pWdaParams);
8612 return ;
8613 }
8614 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8615 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8617 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308618 /* send response to UMAC*/
8619 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308620
8621 return ;
8622}
8623VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8624 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8625{
8626 WDI_Status status = WDI_STATUS_SUCCESS ;
8627 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8628 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8629 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8630 tWDA_ReqParams *pWdaParams = NULL;
8631
8632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8633 "Enter: %s ",__func__);
8634 if(NULL == wdiSetTDLSChanSwitchReqParam)
8635 {
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8637 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308638 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308639 VOS_ASSERT(0);
8640 return VOS_STATUS_E_NOMEM;
8641 }
8642
8643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8644 if(NULL == pWdaParams)
8645 {
8646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8647 "%s: VOS MEM Alloc Failure", __func__);
8648 vos_mem_free(pTdlsChanSwitchParams);
8649 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8650 VOS_ASSERT(0);
8651 return VOS_STATUS_E_NOMEM;
8652 }
8653 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8654 pTdlsChanSwitchParams->staIdx;
8655 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8656 pTdlsChanSwitchParams->tdlsSwMode;
8657 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8658 pTdlsChanSwitchParams->operClass;
8659 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8660 pTdlsChanSwitchParams->tdlsOffCh;
8661 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8662 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8663
8664
8665 /* Store msg pointer from PE, as this will be used for response */
8666 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8667 /* store Params pass it to WDI */
8668 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8669 pWdaParams->pWdaContext = pWDA;
8670 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8671 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8672 WDA_SetTDLSChanSwitchReqParamsCallback,
8673 pWdaParams);
8674 if(IS_WDI_STATUS_FAILURE(status))
8675 {
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8677 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8679 vos_mem_free(pWdaParams->wdaMsgParam);
8680 vos_mem_free(pWdaParams);
8681 }
8682 return CONVERT_WDI2VOS_STATUS(status);
8683}
8684#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308685
8686
Jeff Johnson295189b2012-06-20 16:38:30 -07008687#ifdef WLAN_FEATURE_VOWIFI_11R
8688/*
8689 * FUNCTION: WDA_AggrAddTSReqCallback
8690 * send ADD AGGREGATED TS RSP back to PE
8691 */
8692void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8693{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008694 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308695 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008696 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008699 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008700 if(NULL == pWdaParams)
8701 {
8702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008704 VOS_ASSERT(0) ;
8705 return ;
8706 }
8707
8708 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308709 if (NULL == pWDA)
8710 {
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8712 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8714 vos_mem_free(pWdaParams->wdaMsgParam);
8715 vos_mem_free(pWdaParams);
8716
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308717 VOS_ASSERT(0);
8718 return ;
8719 }
8720
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008721 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008722
8723 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8724 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008725 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008728
8729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8730 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 return ;
8732}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008733/*
8734 * FUNCTION: WDA_ProcessAddTSReq
8735 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8736 */
8737VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8738 tAggrAddTsParams *pAggrAddTsReqParams)
8739{
8740 WDI_Status status = WDI_STATUS_SUCCESS ;
8741 int i;
8742 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008743 tWDA_ReqParams *pWdaParams = NULL;
8744
8745
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8749 sizeof(WDI_AggrAddTSReqParamsType)) ;
8750 if(NULL == wdiAggrAddTSReqParam)
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__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308754 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 VOS_ASSERT(0);
8756 return VOS_STATUS_E_NOMEM;
8757 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008758
8759
8760 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8761 if(NULL == pWdaParams)
8762 {
8763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008764 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008765 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008766 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008767 VOS_ASSERT(0);
8768 return VOS_STATUS_E_NOMEM;
8769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8771 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8772 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8774 {
8775 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8776 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8777 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8779 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8780 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8781 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8782 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8783 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8784 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8785 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8786 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8787 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8788 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8789 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8790 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8791 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8792 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8793 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8795 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8797 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8798 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8799 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8800 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8801 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8802 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8803 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8804 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8805 pAggrAddTsReqParams->tspec[i].inactInterval;
8806 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8807 pAggrAddTsReqParams->tspec[i].suspendInterval;
8808 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8809 pAggrAddTsReqParams->tspec[i].svcStartTime;
8810 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8811 pAggrAddTsReqParams->tspec[i].minDataRate;
8812 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8813 pAggrAddTsReqParams->tspec[i].meanDataRate;
8814 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8815 pAggrAddTsReqParams->tspec[i].peakDataRate;
8816 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8817 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8818 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8819 pAggrAddTsReqParams->tspec[i].delayBound;
8820 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8821 pAggrAddTsReqParams->tspec[i].minPhyRate;
8822 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8823 pAggrAddTsReqParams->tspec[i].surplusBw;
8824 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8825 pAggrAddTsReqParams->tspec[i].mediumTime;
8826 }
8827
8828 /* TODO: tAggrAddTsParams doesn't have the following fields */
8829#if 0
8830 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8831 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8832 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8833 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8834#endif
8835 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8836
8837 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008838 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008840 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8841
8842 pWdaParams->pWdaContext = pWDA;
8843
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008845 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8846
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 if(IS_WDI_STATUS_FAILURE(status))
8848 {
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8850 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8852 vos_mem_free(pWdaParams);
8853
8854 /* send the failure response back to PE*/
8855 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8856 {
8857 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8858 }
8859
8860 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8861 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 return CONVERT_WDI2VOS_STATUS(status) ;
8864}
8865#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008866/*
Mihir Shetea4306052014-03-25 00:02:54 +05308867 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 * send Enter IMPS RSP back to PE
8869 */
Mihir Shetea4306052014-03-25 00:02:54 +05308870void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008871{
Mihir Shetea4306052014-03-25 00:02:54 +05308872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308873 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308874
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308876 "<------ %s status=%d" ,__func__,status);
8877 if(NULL == pWdaParams)
8878 {
8879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8880 "%s: pWdaParams received NULL", __func__);
8881 VOS_ASSERT(0);
8882 return;
8883 }
8884
8885 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308886 if (NULL == pWDA)
8887 {
8888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8889 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8891 vos_mem_free(pWdaParams->wdaMsgParam);
8892 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308893 VOS_ASSERT(0);
8894 return ;
8895 }
Mihir Shetea4306052014-03-25 00:02:54 +05308896
8897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8898 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308899 if (WDI_STATUS_SUCCESS != status)
8900 {
8901 pWDA->failureCounts.enterImpsFailureCount++;
8902 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8903 pWDA->failureCounts.enterImpsFailureCount)
8904 {
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8906 "%s: Status %d fail count %d", __func__, status,
8907 pWDA->failureCounts.enterImpsFailureCount);
8908 pWDA->failureCounts.enterImpsFailureCount = 0;
8909 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8910 WLAN_LOG_INDICATOR_HOST_DRIVER,
8911 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8912 FALSE, TRUE);
8913 }
8914 }
8915 else
8916 {
8917 pWDA->failureCounts.enterImpsFailureCount = 0;
8918 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008919 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 return ;
8921}
Mihir Shetea4306052014-03-25 00:02:54 +05308922
8923
8924/*
8925 * FUNCTION: WDA_EnterImpsReqCallback
8926 * Free memory and send Enter IMPS RSP back to PE.
8927 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8928 */
8929void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8930{
8931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308932 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308933
8934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8935 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8936
8937 if(NULL == pWdaParams)
8938 {
8939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8940 "%s: pWdaParams received NULL", __func__);
8941 VOS_ASSERT(0);
8942 return;
8943 }
8944
8945 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308946 if (NULL == pWDA)
8947 {
8948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8949 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8951 vos_mem_free(pWdaParams->wdaMsgParam);
8952 vos_mem_free(pWdaParams);
8953
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308954 VOS_ASSERT(0);
8955 return ;
8956 }
8957
Mihir Shetea4306052014-03-25 00:02:54 +05308958
8959 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8960 {
8961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8962 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308963 pWDA->failureCounts.enterImpsFailureCount++;
8964 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8965 pWDA->failureCounts.enterImpsFailureCount)
8966 {
8967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8968 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8969 pWDA->failureCounts.enterImpsFailureCount);
8970 pWDA->failureCounts.enterImpsFailureCount = 0;
8971 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8972 WLAN_LOG_INDICATOR_HOST_DRIVER,
8973 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8974 FALSE, TRUE);
8975 }
Mihir Shetea4306052014-03-25 00:02:54 +05308976 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8977 CONVERT_WDI2SIR_STATUS(wdiStatus));
8978 }
8979
8980 return;
8981}
Jeff Johnson295189b2012-06-20 16:38:30 -07008982/*
8983 * FUNCTION: WDA_ProcessEnterImpsReq
8984 * Request to WDI to Enter IMPS power state.
8985 */
8986VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8987{
8988 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308989 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8990 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308991 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308994
8995
8996 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8997 if (NULL == wdiEnterImpsReqParams)
8998 {
8999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9000 "%s: VOS MEM Alloc Failure", __func__);
9001 VOS_ASSERT(0);
9002 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9003 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9004 return VOS_STATUS_E_NOMEM;
9005 }
9006
9007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9008 if (NULL == pWdaParams)
9009 {
9010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9011 "%s: VOS MEM Alloc Failure", __func__);
9012 VOS_ASSERT(0);
9013 vos_mem_free(wdiEnterImpsReqParams);
9014 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9015 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9016 return VOS_STATUS_E_NOMEM;
9017 }
9018
9019 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9020 wdiEnterImpsReqParams->pUserData = pWdaParams;
9021
9022 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9023 pWdaParams->wdaMsgParam = NULL;
9024 pWdaParams->pWdaContext = pWDA;
9025
9026 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9027 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9028 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 if(IS_WDI_STATUS_FAILURE(status))
9030 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309031 if (! (failcnt & 0xF))
9032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9033 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9034 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309035 vos_mem_free(wdiEnterImpsReqParams);
9036 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009037 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 return CONVERT_WDI2VOS_STATUS(status) ;
9040}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309041
9042/*
9043 * FUNCTION: WDA_ExitImpsRespCallback
9044 * send Exit IMPS RSP back to PE
9045 */
9046void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9047{
9048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9049 tWDA_CbContext *pWDA;
9050
9051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9052 "<------ %s " ,__func__);
9053
9054 if (NULL == pWdaParams)
9055 {
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9057 "%s: pWdaParams received NULL", __func__);
9058 VOS_ASSERT(0);
9059 return;
9060 }
9061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9062
9063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9064 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309065 if (WDI_STATUS_SUCCESS != status)
9066 {
9067 pWDA->failureCounts.exitImpsFailureCount++;
9068 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9069 pWDA->failureCounts.exitImpsFailureCount)
9070 {
9071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9072 "%s: Status %d fail count %d", __func__,
9073 status,
9074 pWDA->failureCounts.exitImpsFailureCount);
9075 pWDA->failureCounts.exitImpsFailureCount = 0;
9076 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9077 WLAN_LOG_INDICATOR_HOST_DRIVER,
9078 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9079 FALSE, TRUE);
9080 }
9081 }
9082 else
9083 {
9084 pWDA->failureCounts.exitImpsFailureCount = 0;
9085 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309086
9087 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9088 return;
9089}
9090
Jeff Johnson295189b2012-06-20 16:38:30 -07009091/*
9092 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 */
9094void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9095{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309097 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009099 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309100 if(NULL == pWdaParams)
9101 {
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9103 "%s: pWdaParams received NULL", __func__);
9104 VOS_ASSERT(0);
9105 return;
9106 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309107 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309108 if (IS_WDI_STATUS_FAILURE(status))
9109 {
9110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9111 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309112
9113 pWDA->failureCounts.exitImpsFailureCount++;
9114 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9115 pWDA->failureCounts.exitImpsFailureCount)
9116 {
9117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9118 "%s: wdiStatus %d fail count %d", __func__,
9119 status,
9120 pWDA->failureCounts.exitImpsFailureCount);
9121 pWDA->failureCounts.exitImpsFailureCount = 0;
9122 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9123 WLAN_LOG_INDICATOR_HOST_DRIVER,
9124 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9125 FALSE, TRUE);
9126 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309127 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9128 {
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9130 FL("reload wlan driver"));
9131 wpalWlanReload();
9132 }
9133 }
9134 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009135}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309136
Jeff Johnson295189b2012-06-20 16:38:30 -07009137/*
9138 * FUNCTION: WDA_ProcessExitImpsReq
9139 * Request to WDI to Exit IMPS power state.
9140 */
9141VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9142{
9143 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309144 tWDA_ReqParams *pWdaParams;
9145 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9146
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009148 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309149 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9150 sizeof(WDI_ExitImpsReqParamsType));
9151 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9154 "%s: VOS MEM Alloc Failure", __func__);
9155 VOS_ASSERT(0);
9156 return VOS_STATUS_E_NOMEM;
9157 }
9158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9159 if(NULL == pWdaParams)
9160 {
9161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9162 "%s: VOS MEM Alloc Failure", __func__);
9163 VOS_ASSERT(0);
9164 vos_mem_free(wdiExitImpsReqParams);
9165 return VOS_STATUS_E_NOMEM;
9166 }
9167 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9168 wdiExitImpsReqParams->pUserData = pWdaParams;
9169
9170 /* Store param pointer as passed in by caller */
9171 /* store Params pass it to WDI */
9172 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9173 pWdaParams->pWdaContext = pWDA;
9174 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9175 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9176 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9177 pWdaParams);
9178 if (IS_WDI_STATUS_FAILURE(status))
9179 {
9180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9181 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9183 vos_mem_free(pWdaParams);
9184 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 return CONVERT_WDI2VOS_STATUS(status) ;
9187}
Jeff Johnson295189b2012-06-20 16:38:30 -07009188/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009189 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 * send Enter BMPS RSP back to PE
9191 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009192void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009193{
9194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309195 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009196 tEnterBmpsParams *pEnterBmpsRspParams;
9197
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009199 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 if(NULL == pWdaParams)
9201 {
9202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009203 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 VOS_ASSERT(0) ;
9205 return ;
9206 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009207
9208 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309209 if (NULL == pWDA)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9212 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309213
9214 if(pWdaParams->wdaWdiApiMsgParam)
9215 {
9216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9217 }
9218 vos_mem_free(pWdaParams);
9219
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309220 VOS_ASSERT(0);
9221 return ;
9222 }
9223
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009224 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9225
9226 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009227 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009228
9229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309231 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9232 {
9233 pWDA->failureCounts.enterBmpsFailureCount++;
9234 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9235 pWDA->failureCounts.enterBmpsFailureCount)
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9238 "%s: wdiStatus %d fail count %d", __func__,
9239 pwdiEnterBmpsRsp->wdiStatus,
9240 pWDA->failureCounts.enterBmpsFailureCount);
9241 pWDA->failureCounts.enterBmpsFailureCount = 0;
9242 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9243 WLAN_LOG_INDICATOR_HOST_DRIVER,
9244 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9245 FALSE, TRUE);
9246 }
9247 }
9248 else
9249 {
9250 pWDA->failureCounts.enterBmpsFailureCount = 0;
9251 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009252 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9253
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 return ;
9255}
Jeff Johnson295189b2012-06-20 16:38:30 -07009256/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009257 * FUNCTION: WDA_EnterBmpsReqCallback
9258 * Free memory and send Enter BMPS RSP back to PE.
9259 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9260 */
9261void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9262{
9263 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309264 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009265 tEnterBmpsParams *pEnterBmpsRspParams;
9266
9267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9268 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9269
9270 if(NULL == pWdaParams)
9271 {
9272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9273 "%s: pWdaParams received NULL", __func__);
9274 VOS_ASSERT(0);
9275 return;
9276 }
9277
9278 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309279 if (NULL == pWDA)
9280 {
9281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9282 "%s:pWDA is NULL", __func__);
9283 VOS_ASSERT(0);
9284 return ;
9285 }
9286
Yue Ma7f44bbe2013-04-12 11:47:39 -07009287 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9288 pEnterBmpsRspParams->status = wdiStatus;
9289
9290 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9291 {
9292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9293 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309294 pWDA->failureCounts.enterBmpsFailureCount++;
9295 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9296 pWDA->failureCounts.enterBmpsFailureCount)
9297 {
9298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9299 "%s: wdiStatus %d fail count %d", __func__,
9300 wdiStatus,
9301 pWDA->failureCounts.enterBmpsFailureCount);
9302 pWDA->failureCounts.enterBmpsFailureCount = 0;
9303 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9304 WLAN_LOG_INDICATOR_HOST_DRIVER,
9305 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9306 FALSE, TRUE);
9307 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009308 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9309 }
9310
9311 return;
9312}
9313/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009314 * FUNCTION: WDA_ProcessEnterBmpsReq
9315 * Request to WDI to Enter BMPS power state.
9316 */
9317VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9318 tEnterBmpsParams *pEnterBmpsReqParams)
9319{
9320 WDI_Status status = WDI_STATUS_SUCCESS;
9321 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9322 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009325 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9326 {
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009328 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 VOS_ASSERT(0);
9330 return VOS_STATUS_E_FAILURE;
9331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9333 if (NULL == wdiEnterBmpsReqParams)
9334 {
9335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 VOS_ASSERT(0);
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 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9343 if (NULL == pWdaParams)
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 VOS_ASSERT(0);
9348 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009349 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9350 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 return VOS_STATUS_E_NOMEM;
9352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9354 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9355 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9356 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009357 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9359 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9360 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009361 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9362 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009363
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 /* Store param pointer as passed in by caller */
9365 /* store Params pass it to WDI */
9366 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009367 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009370 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 if (IS_WDI_STATUS_FAILURE(status))
9372 {
9373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9374 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009376 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009378 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 return CONVERT_WDI2VOS_STATUS(status);
9381}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009382
9383
9384static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9385 WDI_Status wdiStatus,
9386 tExitBmpsParams *pExitBmpsReqParams)
9387{
9388 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9389
9390 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9391}
9392
9393
Jeff Johnson295189b2012-06-20 16:38:30 -07009394/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009395 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 * send Exit BMPS RSP back to PE
9397 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009398void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009399{
9400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309401 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009402 tExitBmpsParams *pExitBmpsRspParams;
9403
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 if(NULL == pWdaParams)
9407 {
9408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009409 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 VOS_ASSERT(0) ;
9411 return ;
9412 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009413
9414 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309415 if (NULL == pWDA)
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9418 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309419
9420 if(pWdaParams->wdaWdiApiMsgParam)
9421 {
9422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9423 }
9424 vos_mem_free(pWdaParams);
9425
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309426 VOS_ASSERT(0);
9427 return ;
9428 }
9429
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009430 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9431
9432 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009433 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309436 vos_mem_free(pWdaParams);
9437
9438 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9439 {
9440 pWDA->failureCounts.exitBmpsFailureCount++;
9441 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9442 pWDA->failureCounts.exitBmpsFailureCount)
9443 {
9444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9445 "%s: Status %d fail count %d", __func__,
9446 pExitBmpsRspParams->status,
9447 pWDA->failureCounts.exitBmpsFailureCount);
9448 pWDA->failureCounts.exitBmpsFailureCount = 0;
9449 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9450 WLAN_LOG_INDICATOR_HOST_DRIVER,
9451 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9452 FALSE, TRUE);
9453 }
9454 }
9455 else
9456 {
9457 pWDA->failureCounts.exitBmpsFailureCount = 0;
9458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009459
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009460 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 return ;
9462}
Jeff Johnson295189b2012-06-20 16:38:30 -07009463/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009464 * FUNCTION: WDA_ExitBmpsReqCallback
9465 * Free memory and send Exit BMPS RSP back to PE.
9466 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9467 */
9468void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9469{
9470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309471 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009472 tExitBmpsParams *pExitBmpsRspParams;
9473
9474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9475 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9476
9477 if(NULL == pWdaParams)
9478 {
9479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9480 "%s: pWdaParams received NULL", __func__);
9481 VOS_ASSERT(0);
9482 return;
9483 }
9484
9485 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309486 if (NULL == pWDA)
9487 {
9488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9489 "%s:pWDA is NULL", __func__);
9490 VOS_ASSERT(0);
9491 return ;
9492 }
9493
Yue Ma7f44bbe2013-04-12 11:47:39 -07009494 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9495 pExitBmpsRspParams->status = wdiStatus;
9496
9497 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9498 {
9499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9500 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309501 pWDA->failureCounts.exitBmpsFailureCount++;
9502 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9503 pWDA->failureCounts.exitBmpsFailureCount)
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9506 "%s: wdiStatus %d fail count %d", __func__,
9507 wdiStatus,
9508 pWDA->failureCounts.exitBmpsFailureCount);
9509 pWDA->failureCounts.exitBmpsFailureCount = 0;
9510 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9511 WLAN_LOG_INDICATOR_HOST_DRIVER,
9512 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9513 FALSE, TRUE);
9514 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009515 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9516 }
9517
9518 return;
9519}
9520/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 * FUNCTION: WDA_ProcessExitBmpsReq
9522 * Request to WDI to Exit BMPS power state.
9523 */
9524VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9525 tExitBmpsParams *pExitBmpsReqParams)
9526{
9527 WDI_Status status = WDI_STATUS_SUCCESS ;
9528 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9529 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9530 sizeof(WDI_ExitBmpsReqParamsType)) ;
9531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 if(NULL == wdiExitBmpsReqParams)
9535 {
9536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009539 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 return VOS_STATUS_E_NOMEM;
9541 }
9542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9543 if(NULL == pWdaParams)
9544 {
9545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 VOS_ASSERT(0);
9548 vos_mem_free(wdiExitBmpsReqParams);
9549 return VOS_STATUS_E_NOMEM;
9550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009551 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009552
9553 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9554
Yue Ma7f44bbe2013-04-12 11:47:39 -07009555 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9556 wdiExitBmpsReqParams->pUserData = pWdaParams;
9557
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 /* Store param pointer as passed in by caller */
9559 /* store Params pass it to WDI */
9560 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9561 pWdaParams->pWdaContext = pWDA;
9562 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009564 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 if(IS_WDI_STATUS_FAILURE(status))
9566 {
9567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9568 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9570 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009571 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 return CONVERT_WDI2VOS_STATUS(status) ;
9574}
Jeff Johnson295189b2012-06-20 16:38:30 -07009575/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 * send Enter UAPSD RSP back to PE
9578 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009580{
9581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309582 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009583 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009585 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 if(NULL == pWdaParams)
9587 {
9588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009590 VOS_ASSERT(0) ;
9591 return ;
9592 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009593
9594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309595 if (NULL == pWDA)
9596 {
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9598 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309599
9600 if(pWdaParams->wdaWdiApiMsgParam)
9601 {
9602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9603 }
9604 vos_mem_free(pWdaParams);
9605
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309606 VOS_ASSERT(0);
9607 return ;
9608 }
9609
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009610 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9611
9612 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009613 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009614
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9616 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009617 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 return ;
9619}
Jeff Johnson295189b2012-06-20 16:38:30 -07009620/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009621 * FUNCTION: WDA_EnterUapsdReqCallback
9622 * Free memory and send Enter UAPSD RSP back to PE.
9623 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9624 */
9625void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9626{
9627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9628 tWDA_CbContext *pWDA;
9629 tUapsdParams *pEnterUapsdRsqParams;
9630
9631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9632 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9633
9634 if(NULL == pWdaParams)
9635 {
9636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9637 "%s: pWdaParams received NULL", __func__);
9638 VOS_ASSERT(0);
9639 return;
9640 }
9641
9642 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309643 if (NULL == pWDA)
9644 {
9645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9646 "%s:pWDA is NULL", __func__);
9647 VOS_ASSERT(0);
9648 return ;
9649 }
9650
Yue Ma7f44bbe2013-04-12 11:47:39 -07009651 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9652 pEnterUapsdRsqParams->status = wdiStatus;
9653
9654 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9655 {
9656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9657 vos_mem_free(pWdaParams);
9658 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9659 }
9660
9661 return;
9662}
9663/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 * FUNCTION: WDA_ProcessEnterUapsdReq
9665 * Request to WDI to Enter UAPSD power state.
9666 */
9667VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9668 tUapsdParams *pEnterUapsdReqParams)
9669{
9670 WDI_Status status = WDI_STATUS_SUCCESS ;
9671 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9672 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9673 sizeof(WDI_EnterUapsdReqParamsType)) ;
9674 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009676 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 if(NULL == wdiEnterUapsdReqParams)
9678 {
9679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009681 VOS_ASSERT(0);
9682 return VOS_STATUS_E_NOMEM;
9683 }
9684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9685 if(NULL == pWdaParams)
9686 {
9687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009689 VOS_ASSERT(0);
9690 vos_mem_free(wdiEnterUapsdReqParams);
9691 return VOS_STATUS_E_NOMEM;
9692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009693 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9694 pEnterUapsdReqParams->beDeliveryEnabled;
9695 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9696 pEnterUapsdReqParams->beTriggerEnabled;
9697 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9698 pEnterUapsdReqParams->bkDeliveryEnabled;
9699 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9700 pEnterUapsdReqParams->bkTriggerEnabled;
9701 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9702 pEnterUapsdReqParams->viDeliveryEnabled;
9703 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9704 pEnterUapsdReqParams->viTriggerEnabled;
9705 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9706 pEnterUapsdReqParams->voDeliveryEnabled;
9707 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9708 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009709 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009710
Yue Ma7f44bbe2013-04-12 11:47:39 -07009711 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9712 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 /* Store param pointer as passed in by caller */
9715 /* store Params pass it to WDI */
9716 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9717 pWdaParams->pWdaContext = pWDA;
9718 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009720 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 if(IS_WDI_STATUS_FAILURE(status))
9722 {
9723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9724 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9725 vos_mem_free(pWdaParams->wdaMsgParam) ;
9726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9727 vos_mem_free(pWdaParams) ;
9728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009729 return CONVERT_WDI2VOS_STATUS(status) ;
9730}
Jeff Johnson295189b2012-06-20 16:38:30 -07009731/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009732 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 * send Exit UAPSD RSP back to PE
9734 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009735void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009736{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009737
9738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9739 tWDA_CbContext *pWDA;
9740 tExitUapsdParams *pExitUapsdRspParams;
9741
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009743 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009744 if(NULL == pWdaParams)
9745 {
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009747 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009748 VOS_ASSERT(0);
9749 return;
9750 }
9751
9752 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9753 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9754
9755 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009756 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009757
9758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9759 vos_mem_free(pWdaParams) ;
9760
9761 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 return ;
9763}
Jeff Johnson295189b2012-06-20 16:38:30 -07009764/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009765 * FUNCTION: WDA_ExitUapsdReqCallback
9766 * Free memory and send Exit UAPSD RSP back to PE.
9767 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9768 */
9769void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9770{
9771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309772 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009773 tExitUapsdParams *pExitUapsdRspParams;
9774
9775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9776 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9777
9778 if(NULL == pWdaParams)
9779 {
9780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9781 "%s: pWdaParams received NULL", __func__);
9782 VOS_ASSERT(0);
9783 return;
9784 }
9785
9786 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309787 if (NULL == pWDA)
9788 {
9789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9790 "%s:pWDA is NULL", __func__);
9791 VOS_ASSERT(0);
9792 return ;
9793 }
9794
Yue Ma7f44bbe2013-04-12 11:47:39 -07009795 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9796 pExitUapsdRspParams->status = wdiStatus;
9797
9798 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9799 {
9800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9801 vos_mem_free(pWdaParams);
9802 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9803 }
9804
9805 return;
9806}
9807/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009808 * FUNCTION: WDA_ProcessExitUapsdReq
9809 * Request to WDI to Exit UAPSD power state.
9810 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009811VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9812 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009813{
9814 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009815 tWDA_ReqParams *pWdaParams ;
9816 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9817 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9818 sizeof(WDI_ExitUapsdReqParamsType)) ;
9819
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009821 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009822
9823 if(NULL == wdiExitUapsdReqParams)
9824 {
9825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009826 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009827 VOS_ASSERT(0);
9828 return VOS_STATUS_E_NOMEM;
9829 }
9830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9831 if(NULL == pWdaParams)
9832 {
9833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009834 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009835 VOS_ASSERT(0);
9836 vos_mem_free(wdiExitUapsdReqParams);
9837 return VOS_STATUS_E_NOMEM;
9838 }
9839
9840 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009841 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9842 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009843
9844 /* Store param pointer as passed in by caller */
9845 /* store Params pass it to WDI */
9846 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9847 pWdaParams->pWdaContext = pWDA;
9848 pWdaParams->wdaMsgParam = pExitUapsdParams;
9849
Yue Ma7f44bbe2013-04-12 11:47:39 -07009850 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 if(IS_WDI_STATUS_FAILURE(status))
9852 {
9853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9854 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009855 vos_mem_free(pWdaParams->wdaMsgParam) ;
9856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9857 vos_mem_free(pWdaParams) ;
9858
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 return CONVERT_WDI2VOS_STATUS(status) ;
9861}
9862
Jeff Johnson295189b2012-06-20 16:38:30 -07009863/*
9864 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9865 *
9866 */
9867void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9868{
9869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 if(NULL == pWdaParams)
9873 {
9874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009875 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 VOS_ASSERT(0) ;
9877 return ;
9878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 if( pWdaParams != NULL )
9880 {
9881 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9882 {
9883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9884 }
9885 if( pWdaParams->wdaMsgParam != NULL )
9886 {
9887 vos_mem_free(pWdaParams->wdaMsgParam) ;
9888 }
9889 vos_mem_free(pWdaParams) ;
9890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 return ;
9892}
Jeff Johnson295189b2012-06-20 16:38:30 -07009893/*
9894 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9895 * Request to WDI to set the power save params at start.
9896 */
9897VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9898 tSirPowerSaveCfg *pPowerSaveCfg)
9899{
9900 WDI_Status status = WDI_STATUS_SUCCESS ;
9901 tHalCfg *tlvStruct = NULL ;
9902 tANI_U8 *tlvStructStart = NULL ;
9903 v_PVOID_t *configParam;
9904 tANI_U32 configParamSize;
9905 tANI_U32 *configDataValue;
9906 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9907 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9911 {
9912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009913 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009915 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 return VOS_STATUS_E_FAILURE;
9917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9919 if (NULL == wdiPowerSaveCfg)
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009924 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 return VOS_STATUS_E_NOMEM;
9926 }
9927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9928 if(NULL == pWdaParams)
9929 {
9930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 VOS_ASSERT(0);
9933 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009934 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 return VOS_STATUS_E_NOMEM;
9936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9938 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 if(NULL == configParam)
9940 {
9941 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009942 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009943 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 vos_mem_free(pWdaParams);
9945 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009946 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 return VOS_STATUS_E_NOMEM;
9948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 vos_mem_set(configParam, configParamSize, 0);
9950 wdiPowerSaveCfg->pConfigBuffer = configParam;
9951 tlvStruct = (tHalCfg *)configParam;
9952 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9954 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9955 tlvStruct->length = sizeof(tANI_U32);
9956 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9957 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9959 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9961 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9962 tlvStruct->length = sizeof(tANI_U32);
9963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9964 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9966 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9968 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9969 tlvStruct->length = sizeof(tANI_U32);
9970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9971 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9973 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9975 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9976 tlvStruct->length = sizeof(tANI_U32);
9977 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9978 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9980 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9982 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9983 tlvStruct->length = sizeof(tANI_U32);
9984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9985 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9987 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9989 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9990 tlvStruct->length = sizeof(tANI_U32);
9991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9992 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9994 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9996 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9997 tlvStruct->length = sizeof(tANI_U32);
9998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9999 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10001 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10003 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10004 tlvStruct->length = sizeof(tANI_U32);
10005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10006 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10007 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10008 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10010 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10011 tlvStruct->length = sizeof(tANI_U32);
10012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10013 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10015 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10017 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10018 tlvStruct->length = sizeof(tANI_U32);
10019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10020 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10022 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10024 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10025 tlvStruct->length = sizeof(tANI_U32);
10026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10027 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 /* store Params pass it to WDI */
10033 pWdaParams->wdaMsgParam = configParam;
10034 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10035 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10037 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010038 if(IS_WDI_STATUS_FAILURE(status))
10039 {
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10041 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10042 vos_mem_free(pWdaParams->wdaMsgParam);
10043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10044 vos_mem_free(pWdaParams);
10045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010047 return CONVERT_WDI2VOS_STATUS(status);
10048}
Jeff Johnson295189b2012-06-20 16:38:30 -070010049/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010050 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 *
10052 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010053void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010054{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10056
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010058 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010059
10060 if(NULL == pWdaParams)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10063 "%s: pWdaParams received NULL", __func__);
10064 VOS_ASSERT(0);
10065 return ;
10066 }
10067
10068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 vos_mem_free(pWdaParams);
10070
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 return ;
10072}
Jeff Johnson295189b2012-06-20 16:38:30 -070010073/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010074 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10075 * Free memory.
10076 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10077 */
10078void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10079{
10080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10081
10082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10083 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10084
10085 if(NULL == pWdaParams)
10086 {
10087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10088 "%s: pWdaParams received NULL", __func__);
10089 VOS_ASSERT(0);
10090 return;
10091 }
10092
10093 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10094 {
10095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10096 vos_mem_free(pWdaParams);
10097 }
10098
10099 return;
10100}
10101/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 * FUNCTION: WDA_SetUapsdAcParamsReq
10103 * Request to WDI to set the UAPSD params for an ac (sta mode).
10104 */
10105VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10106 tUapsdInfo *pUapsdInfo)
10107{
10108 WDI_Status status = WDI_STATUS_SUCCESS;
10109 tWDA_CbContext *pWDA = NULL ;
10110 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10111 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10112 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10113 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010116 if(NULL == wdiUapsdParams)
10117 {
10118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 VOS_ASSERT(0);
10121 return VOS_STATUS_E_NOMEM;
10122 }
10123 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10124 if(NULL == pWdaParams)
10125 {
10126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 VOS_ASSERT(0);
10129 vos_mem_free(wdiUapsdParams);
10130 return VOS_STATUS_E_NOMEM;
10131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010132 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10133 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10134 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10135 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10136 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10137 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010138 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10139 wdiUapsdParams->pUserData = pWdaParams;
10140
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 pWdaParams->pWdaContext = pWDA;
10143 /* Store param pointer as passed in by caller */
10144 pWdaParams->wdaMsgParam = pUapsdInfo;
10145 /* store Params pass it to WDI */
10146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 if(IS_WDI_STATUS_FAILURE(status))
10151 {
10152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10153 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10155 vos_mem_free(pWdaParams);
10156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10158 return VOS_STATUS_SUCCESS;
10159 else
10160 return VOS_STATUS_E_FAILURE;
10161
Jeff Johnson295189b2012-06-20 16:38:30 -070010162}
10163/*
10164 * FUNCTION: WDA_ClearUapsdAcParamsReq
10165 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10166 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10167 * and again enter the UPASD with the modified params. Hence the disable
10168 * function was kept empty.
10169 *
10170 */
10171VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10172{
10173 /* do nothing */
10174 return VOS_STATUS_SUCCESS;
10175}
Jeff Johnson295189b2012-06-20 16:38:30 -070010176/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010177 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 *
10179 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010180void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010181{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10183
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010185 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010186
10187 if(NULL == pWdaParams)
10188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010190 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010191 VOS_ASSERT(0) ;
10192 return ;
10193 }
10194
10195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10196 vos_mem_free(pWdaParams->wdaMsgParam);
10197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010198
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 //print a msg, nothing else to do
10200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010201 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 return ;
10203}
Jeff Johnson295189b2012-06-20 16:38:30 -070010204/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010205 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10206 * Free memory.
10207 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10208 */
10209void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10210{
10211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10212
10213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10214 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10215
10216 if(NULL == pWdaParams)
10217 {
10218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10219 "%s: pWdaParams received NULL", __func__);
10220 VOS_ASSERT(0);
10221 return;
10222 }
10223
10224 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10225 {
10226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10227 vos_mem_free(pWdaParams->wdaMsgParam);
10228 vos_mem_free(pWdaParams);
10229 }
10230
10231 return;
10232}
10233/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 * FUNCTION: WDA_UpdateUapsdParamsReq
10235 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10236 */
10237VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10238 tUpdateUapsdParams* pUpdateUapsdInfo)
10239{
10240 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010241 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10243 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10244 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010245 tWDA_ReqParams *pWdaParams = NULL;
10246
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 if(NULL == wdiUpdateUapsdParams)
10250 {
10251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 VOS_ASSERT(0);
10254 return VOS_STATUS_E_NOMEM;
10255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10257 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10258 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010259 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10260 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010261
10262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10263 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 {
10265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010268 vos_mem_free(pUpdateUapsdInfo);
10269 vos_mem_free(wdiUpdateUapsdParams);
10270 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010273 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10276 pWdaParams->pWdaContext = pWDA;
10277
Jeff Johnson43971f52012-07-17 12:26:56 -070010278 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010279 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010280 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281
Jeff Johnson43971f52012-07-17 12:26:56 -070010282 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 {
10284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10285 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010286 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10288 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010289 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010291 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010292}
Jeff Johnson295189b2012-06-20 16:38:30 -070010293/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010294 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 *
10296 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010297void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010298{
10299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010301 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 if(WDI_STATUS_SUCCESS != wdiStatus)
10303 {
10304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010305 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 if(NULL == pWdaParams)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010310 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 VOS_ASSERT(0) ;
10312 return ;
10313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10315 vos_mem_free(pWdaParams->wdaMsgParam);
10316 vos_mem_free(pWdaParams);
10317 return ;
10318}
Jeff Johnson295189b2012-06-20 16:38:30 -070010319/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010320 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10321 * Free memory.
10322 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10323 */
10324void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10325{
10326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10327
10328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10329 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10330
10331 if(NULL == pWdaParams)
10332 {
10333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10334 "%s: pWdaParams received NULL", __func__);
10335 VOS_ASSERT(0);
10336 return;
10337 }
10338
10339 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10340 {
10341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10342 vos_mem_free(pWdaParams->wdaMsgParam);
10343 vos_mem_free(pWdaParams);
10344 }
10345
10346 return;
10347}
10348/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10350 *
10351 */
10352VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10353 tSirWlanSetRxpFilters *pWlanSuspendParam)
10354{
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010356 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010357 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010359 /* Sanity Check
10360 * This is very unlikely and add assert to collect more info next time */
10361 if(NULL == pWlanSuspendParam)
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10364 "%s: pWlanSuspendParam received NULL", __func__);
10365 VOS_ASSERT(0) ;
10366 return VOS_STATUS_E_FAULT;
10367 }
10368 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10369 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 if(NULL == wdiRxpFilterParams)
10373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 VOS_ASSERT(0);
10377 vos_mem_free(pWlanSuspendParam);
10378 return VOS_STATUS_E_NOMEM;
10379 }
10380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10381 if(NULL == pWdaParams)
10382 {
10383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 VOS_ASSERT(0);
10386 vos_mem_free(wdiRxpFilterParams);
10387 vos_mem_free(pWlanSuspendParam);
10388 return VOS_STATUS_E_NOMEM;
10389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10391 pWlanSuspendParam->setMcstBcstFilter;
10392 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10393 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10394
Yue Ma7f44bbe2013-04-12 11:47:39 -070010395 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10396 wdiRxpFilterParams->pUserData = pWdaParams;
10397
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 pWdaParams->pWdaContext = pWDA;
10399 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10400 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010401 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010402 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010404 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 {
10406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10407 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010408 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10410 vos_mem_free(pWdaParams->wdaMsgParam);
10411 vos_mem_free(pWdaParams);
10412 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010413 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010415
10416/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010417 * FUNCTION: WDA_ProcessGetFrameLogReq
10418 * Request to WDI to get the Frame Log.
10419 */
10420VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10421 tAniGetFrameLogReq *pGetFrameLog)
10422{
10423 VOS_STATUS status = VOS_STATUS_SUCCESS;
10424 WDI_Status wstatus;
10425 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10426 tWDA_ReqParams *pWdaParams ;
10427
10428 /* Sanity Check*/
10429 if(NULL == pGetFrameLog)
10430 {
10431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010432 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010433 VOS_ASSERT(0) ;
10434 return VOS_STATUS_E_FAULT;
10435 }
10436
10437 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10438 sizeof(WDI_GetFrameLogReqInfoType));
10439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10440 "------> %s " ,__func__);
10441
10442 if(NULL == wdiGetFrameLogInfo)
10443 {
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10445 "%s: VOS MEM Alloc Failure", __func__);
10446 VOS_ASSERT(0);
10447 vos_mem_free(pGetFrameLog);
10448 return VOS_STATUS_E_NOMEM;
10449 }
10450
10451 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10452 if(NULL == pWdaParams)
10453 {
10454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10455 "%s: VOS MEM Alloc Failure", __func__);
10456 VOS_ASSERT(0);
10457 vos_mem_free(wdiGetFrameLogInfo);
10458 vos_mem_free(pGetFrameLog);
10459 return VOS_STATUS_E_NOMEM;
10460 }
10461
10462 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10463
10464 pWdaParams->pWdaContext = pWDA;
10465 pWdaParams->wdaMsgParam = pGetFrameLog;
10466 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10467
10468 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10469 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10470 pWdaParams);
10471 if(IS_WDI_STATUS_FAILURE(wstatus))
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10474 "Failure in get frame log REQ WDI API, free all the memory" );
10475 status = CONVERT_WDI2VOS_STATUS(wstatus);
10476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10477 vos_mem_free(pWdaParams->wdaMsgParam);
10478 vos_mem_free(pWdaParams);
10479 }
10480 return status;
10481}
10482
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010483
10484/*
10485 * FUNCTION: WDA_FatalEventLogsRspCallback
10486 * recieves Flush Logs response from FW
10487 */
10488
10489void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10490 void* pUserData)
10491{
10492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10493
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10495 "<------ %s,wdiStatus:%d " ,
10496 __func__, wdiRsp->wdiStatus);
10497 if(NULL == pWdaParams)
10498 {
10499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10500 "%s: pWdaParams received NULL", __func__);
10501 VOS_ASSERT(0);
10502 return ;
10503 }
10504
10505 if(NULL == pWdaParams->wdaMsgParam)
10506 {
10507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10508 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10509 VOS_ASSERT(0);
10510 vos_mem_free(pWdaParams);
10511 return ;
10512 }
10513
10514 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10515 {
10516 /*
10517 * If it is failure, it means JOb is already posted by FW
10518 * for logging, so for failure scenario also we will get the
10519 * done indication
10520 */
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10522 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10523 __func__, wdiRsp->wdiStatus);
10524 }
10525
10526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10527 vos_mem_free(pWdaParams->wdaMsgParam);
10528 vos_mem_free(pWdaParams);
10529
10530 return;
10531
10532}
10533
10534/*
10535 * FUNCTION: WDA_ProcessFatalEventLogsReq
10536 * Request to WDI to send the fatal Event Logs Req.
10537 */
10538
10539VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10540 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10541{
10542 VOS_STATUS status = VOS_STATUS_SUCCESS;
10543 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10544 tWDA_ReqParams *pWdaParams ;
10545 WDI_Status wstatus;
10546
10547
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10549 "------> %s " ,__func__);
10550 if (NULL == pFatalEventLogsReqParam)
10551 {
10552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10553 "%s: pMgmtLoggingInitParam received NULL", __func__);
10554 VOS_ASSERT(0) ;
10555 return VOS_STATUS_E_FAULT;
10556 }
10557 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10558 sizeof(WDI_FatalEventLogsReqInfoType));
10559 if(NULL == wdiFatalEventLogsReqInfo)
10560 {
10561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10562 "%s: VOS MEM Alloc Failure", __func__);
10563 VOS_ASSERT(0);
10564 vos_mem_free(pFatalEventLogsReqParam);
10565 return VOS_STATUS_E_NOMEM;
10566 }
10567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10568 if(NULL == pWdaParams)
10569 {
10570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10571 "%s: VOS MEM Alloc Failure", __func__);
10572 VOS_ASSERT(0);
10573 vos_mem_free(wdiFatalEventLogsReqInfo);
10574 vos_mem_free(pFatalEventLogsReqParam);
10575 return VOS_STATUS_E_NOMEM;
10576 }
10577 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10578 pWdaParams->pWdaContext = pWDA;
10579 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10580 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10581
10582 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10583 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10584 pWdaParams);
10585 if(IS_WDI_STATUS_FAILURE(wstatus))
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10588 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10589 status = CONVERT_WDI2VOS_STATUS(wstatus);
10590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10591 vos_mem_free(pWdaParams->wdaMsgParam);
10592 vos_mem_free(pWdaParams);
10593 }
10594
10595 return status;
10596
10597}
10598
Siddharth Bhal64246172015-02-27 01:04:37 +053010599/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010600 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010601 *
10602 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010603VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10604 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010605{
10606 VOS_STATUS status = VOS_STATUS_SUCCESS;
10607 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010608 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010609 tWDA_ReqParams *pWdaParams ;
10610
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10612 "------> %s " ,__func__);
10613
10614 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010615 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010616 {
10617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010618 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010619 VOS_ASSERT(0) ;
10620 return VOS_STATUS_E_FAULT;
10621 }
10622
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010623 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10624 sizeof(WDI_FWLoggingInitReqInfoType));
10625 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010626 {
10627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10628 "%s: VOS MEM Alloc Failure", __func__);
10629 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010630 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010631 return VOS_STATUS_E_NOMEM;
10632 }
10633
10634 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10635 if(NULL == pWdaParams)
10636 {
10637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10638 "%s: VOS MEM Alloc Failure", __func__);
10639 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010640 vos_mem_free(wdiFWLoggingInitInfo);
10641 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010642 return VOS_STATUS_E_NOMEM;
10643 }
10644
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010645 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10646 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10647 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10648 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10649 wdiFWLoggingInitInfo->continuousFrameLogging =
10650 pFWLoggingInitParam->continuousFrameLogging;
10651 wdiFWLoggingInitInfo->minLogBufferSize=
10652 pFWLoggingInitParam->minLogBufferSize;
10653 wdiFWLoggingInitInfo->maxLogBufferSize=
10654 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010655
10656 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010657 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10658 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010659
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010660 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10661 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010662 pWdaParams);
10663 if(IS_WDI_STATUS_FAILURE(wstatus))
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10667 status = CONVERT_WDI2VOS_STATUS(wstatus);
10668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10669 vos_mem_free(pWdaParams->wdaMsgParam);
10670 vos_mem_free(pWdaParams);
10671 }
10672
10673 return status;
10674}
10675
Jeff Johnson295189b2012-06-20 16:38:30 -070010676/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010677 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10678 *
10679 */
10680VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10681 tSirRssiMonitorReq *pRssiMonitorReqParam)
10682{
10683 VOS_STATUS status = VOS_STATUS_SUCCESS;
10684 WDI_Status wstatus;
10685 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10686 tWDA_ReqParams *pWdaParams ;
10687
10688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10689 "------> %s " ,__func__);
10690
10691 /* Sanity Check*/
10692 if(NULL == pRssiMonitorReqParam)
10693 {
10694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10695 "%s: pRssiMonitorReqParam received NULL", __func__);
10696 VOS_ASSERT(0) ;
10697 return VOS_STATUS_E_FAULT;
10698 }
10699
10700 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10701 sizeof(WDI_RssiMonitorReqInfoType));
10702 if(NULL == wdiRssiMonitorInfo)
10703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10705 "%s: VOS MEM Alloc Failure", __func__);
10706 VOS_ASSERT(0);
10707 vos_mem_free(pRssiMonitorReqParam);
10708 return VOS_STATUS_E_NOMEM;
10709 }
10710
10711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10712 if(NULL == pWdaParams)
10713 {
10714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10715 "%s: VOS MEM Alloc Failure", __func__);
10716 VOS_ASSERT(0);
10717 vos_mem_free(wdiRssiMonitorInfo);
10718 vos_mem_free(pRssiMonitorReqParam);
10719 return VOS_STATUS_E_NOMEM;
10720 }
10721
10722 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10723 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10724 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10725 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10726 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10727
10728 pWdaParams->pWdaContext = pWDA;
10729 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10730 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10731
10732 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10733 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10734 pWdaParams);
10735 if(IS_WDI_STATUS_FAILURE(wstatus))
10736 {
10737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10738 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10739 status = CONVERT_WDI2VOS_STATUS(wstatus);
10740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10741 vos_mem_free(pWdaParams->wdaMsgParam);
10742 vos_mem_free(pWdaParams);
10743 }
10744
10745 return status;
10746}
10747
10748/*
10749 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10750 *
10751 */
10752VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10753 tSirRssiMonitorReq *pRssiMonitorReqParam)
10754{
10755 VOS_STATUS status = VOS_STATUS_SUCCESS;
10756 WDI_Status wstatus;
10757 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10758 tWDA_ReqParams *pWdaParams ;
10759
10760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10761 "------> %s " ,__func__);
10762
10763 /* Sanity Check*/
10764 if(NULL == pRssiMonitorReqParam)
10765 {
10766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10767 "%s: pRssiMonitorReqParam received NULL", __func__);
10768 VOS_ASSERT(0) ;
10769 return VOS_STATUS_E_FAULT;
10770 }
10771
10772 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10773 sizeof(WDI_RssiMonitorReqInfoType));
10774 if(NULL == wdiRssiMonitorInfo)
10775 {
10776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10777 "%s: VOS MEM Alloc Failure", __func__);
10778 VOS_ASSERT(0);
10779 vos_mem_free(pRssiMonitorReqParam);
10780 return VOS_STATUS_E_NOMEM;
10781 }
10782
10783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10784 if(NULL == pWdaParams)
10785 {
10786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10787 "%s: VOS MEM Alloc Failure", __func__);
10788 VOS_ASSERT(0);
10789 vos_mem_free(wdiRssiMonitorInfo);
10790 vos_mem_free(pRssiMonitorReqParam);
10791 return VOS_STATUS_E_NOMEM;
10792 }
10793
10794 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10795 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10796 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10797
10798 pWdaParams->pWdaContext = pWDA;
10799 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10801
10802 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10803 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10804 pWdaParams);
10805 if(IS_WDI_STATUS_FAILURE(wstatus))
10806 {
10807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10808 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10809 status = CONVERT_WDI2VOS_STATUS(wstatus);
10810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10811 vos_mem_free(pWdaParams->wdaMsgParam);
10812 vos_mem_free(pWdaParams);
10813 }
10814
10815 return status;
10816}
10817
10818
10819/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010820 * FUNCTION: WDA_WdiIndicationCallback
10821 *
10822 */
10823void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10824 void* pUserData)
10825{
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010828}
Jeff Johnson295189b2012-06-20 16:38:30 -070010829/*
10830 * FUNCTION: WDA_ProcessWlanSuspendInd
10831 *
10832 */
10833VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10834 tSirWlanSuspendParam *pWlanSuspendParam)
10835{
10836 WDI_Status wdiStatus;
10837 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010839 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10841 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10842 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10843 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10846 if(WDI_STATUS_PENDING == wdiStatus)
10847 {
10848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010849 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 }
10851 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010854 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 vos_mem_free(pWlanSuspendParam);
10857 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10858}
10859
Chet Lanctot186b5732013-03-18 10:26:30 -070010860#ifdef WLAN_FEATURE_11W
10861/*
10862 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10863 *
10864 */
10865VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10866 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10867{
10868 WDI_Status wdiStatus;
10869 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10871 "------> %s ", __func__);
10872
10873 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10874 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10875 sizeof(tSirMacAddr));
10876
10877 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10878 wdiExclUnencryptParams.pUserData = pWDA;
10879
10880 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10881 if(WDI_STATUS_PENDING == wdiStatus)
10882 {
10883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10884 "Pending received for %s:%d ", __func__, __LINE__ );
10885 }
10886 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10887 {
10888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10889 "Failure in %s:%d ", __func__, __LINE__ );
10890 }
10891 vos_mem_free(pExclUnencryptParam);
10892 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10893}
10894#endif
10895
Jeff Johnson295189b2012-06-20 16:38:30 -070010896/*
10897 * FUNCTION: WDA_ProcessWlanResumeCallback
10898 *
10899 */
10900void WDA_ProcessWlanResumeCallback(
10901 WDI_SuspendResumeRspParamsType *resumeRspParams,
10902 void* pUserData)
10903{
10904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 if(NULL == pWdaParams)
10908 {
10909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010910 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 VOS_ASSERT(0) ;
10912 return ;
10913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10915 {
10916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010917 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10920 vos_mem_free(pWdaParams->wdaMsgParam);
10921 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 return ;
10923}
Jeff Johnson295189b2012-06-20 16:38:30 -070010924/*
10925 * FUNCTION: WDA_ProcessWlanResumeReq
10926 *
10927 */
10928VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10929 tSirWlanResumeParam *pWlanResumeParam)
10930{
10931 WDI_Status wdiStatus;
10932 WDI_ResumeParamsType *wdiResumeParams =
10933 (WDI_ResumeParamsType *)vos_mem_malloc(
10934 sizeof(WDI_ResumeParamsType) ) ;
10935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 if(NULL == wdiResumeParams)
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 VOS_ASSERT(0);
10943 return VOS_STATUS_E_NOMEM;
10944 }
10945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10946 if(NULL == pWdaParams)
10947 {
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010950 VOS_ASSERT(0);
10951 vos_mem_free(wdiResumeParams);
10952 return VOS_STATUS_E_NOMEM;
10953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10955 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010957 wdiResumeParams->wdiReqStatusCB = NULL;
10958 pWdaParams->wdaMsgParam = pWlanResumeParam;
10959 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10960 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10962 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10963 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10965 {
10966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10967 "Failure in Host Resume REQ WDI API, free all the memory " );
10968 VOS_ASSERT(0);
10969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10970 vos_mem_free(pWdaParams->wdaMsgParam);
10971 vos_mem_free(pWdaParams);
10972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10974}
10975
Jeff Johnson295189b2012-06-20 16:38:30 -070010976/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010977 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 *
10979 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010980void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010981{
10982 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 if(NULL == pWdaParams)
10986 {
10987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010988 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010989 VOS_ASSERT(0) ;
10990 return ;
10991 }
10992
10993 vos_mem_free(pWdaParams->wdaMsgParam) ;
10994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10995 vos_mem_free(pWdaParams) ;
10996 /*
10997 * No respone required for SetBeaconFilter req so just free the request
10998 * param here
10999 */
11000
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 return ;
11002}
Jeff Johnson295189b2012-06-20 16:38:30 -070011003/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011004 * FUNCTION: WDA_SetBeaconFilterReqCallback
11005 * Free memory.
11006 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11007 */
11008void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11009{
11010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11011
11012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11013 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11014
11015 if(NULL == pWdaParams)
11016 {
11017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11018 "%s: pWdaParams received NULL", __func__);
11019 VOS_ASSERT(0);
11020 return;
11021 }
11022
11023 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11024 {
11025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11026 vos_mem_free(pWdaParams->wdaMsgParam);
11027 vos_mem_free(pWdaParams);
11028 }
11029
11030 return;
11031}
11032/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 * FUNCTION: WDA_SetBeaconFilterReq
11034 * Request to WDI to send the beacon filtering related information.
11035 */
11036VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11037 tBeaconFilterMsg* pBeaconFilterInfo)
11038{
11039 WDI_Status status = WDI_STATUS_SUCCESS;
11040 tANI_U8 *dstPtr, *srcPtr;
11041 tANI_U8 filterLength;
11042 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11043 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11044 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11045 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 if(NULL == wdiBeaconFilterInfo)
11049 {
11050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 VOS_ASSERT(0);
11053 return VOS_STATUS_E_NOMEM;
11054 }
11055 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11056 if(NULL == pWdaParams)
11057 {
11058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011059 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 VOS_ASSERT(0);
11061 vos_mem_free(wdiBeaconFilterInfo);
11062 return VOS_STATUS_E_NOMEM;
11063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11065 pBeaconFilterInfo->beaconInterval;
11066 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11067 pBeaconFilterInfo->capabilityInfo;
11068 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11069 pBeaconFilterInfo->capabilityMask;
11070 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011071
11072 //Fill the BssIdx
11073 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11074
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 //Fill structure with info contained in the beaconFilterTable
11076 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11077 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11078 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11079 if(WDI_BEACON_FILTER_LEN < filterLength)
11080 {
11081 filterLength = WDI_BEACON_FILTER_LEN;
11082 }
11083 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011084 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11085 wdiBeaconFilterInfo->pUserData = pWdaParams;
11086
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 /* Store param pointer as passed in by caller */
11088 /* store Params pass it to WDI */
11089 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11090 pWdaParams->pWdaContext = pWDA;
11091 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11092
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011094 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011095 if(IS_WDI_STATUS_FAILURE(status))
11096 {
11097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11098 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11099 vos_mem_free(pWdaParams->wdaMsgParam) ;
11100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11101 vos_mem_free(pWdaParams) ;
11102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 return CONVERT_WDI2VOS_STATUS(status) ;
11104}
Jeff Johnson295189b2012-06-20 16:38:30 -070011105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011106 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 *
11108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011110{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11112
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011114 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011115
11116 if(NULL == pWdaParams)
11117 {
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011119 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011120 VOS_ASSERT(0) ;
11121 return ;
11122 }
11123
11124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11125 vos_mem_free(pWdaParams->wdaMsgParam);
11126 vos_mem_free(pWdaParams);
11127
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 //print a msg, nothing else to do
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011130 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 return ;
11132}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011133/*
11134 * FUNCTION: WDA_RemBeaconFilterReqCallback
11135 * Free memory.
11136 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11137 */
11138void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11139{
11140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11141
11142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11143 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11144
11145 if(NULL == pWdaParams)
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "%s: pWdaParams received NULL", __func__);
11149 VOS_ASSERT(0);
11150 return;
11151 }
11152
11153 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11154 {
11155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11156 vos_mem_free(pWdaParams->wdaMsgParam);
11157 vos_mem_free(pWdaParams);
11158 }
11159
11160 return;
11161}
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 // TODO: PE does not have this feature for now implemented,
11163 // but the support for removing beacon filter exists between
11164 // HAL and FW. This function can be called whenever PE defines
11165 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011166/*
11167 * FUNCTION: WDA_RemBeaconFilterReq
11168 * Request to WDI to send the removal of beacon filtering related information.
11169 */
11170VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11171 tRemBeaconFilterMsg* pBeaconFilterInfo)
11172{
11173 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011174 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11176 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11177 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011178 tWDA_ReqParams *pWdaParams ;
11179
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 if(NULL == wdiBeaconFilterInfo)
11183 {
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011186 VOS_ASSERT(0);
11187 return VOS_STATUS_E_NOMEM;
11188 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11190 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 {
11192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011195 vos_mem_free(wdiBeaconFilterInfo);
11196 vos_mem_free(pBeaconFilterInfo);
11197 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011199
11200 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11201 pBeaconFilterInfo->ucIeCount;
11202 //Fill structure with info contained in the ucRemIeId
11203 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11204 pBeaconFilterInfo->ucRemIeId,
11205 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11206 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11207 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011208
11209 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011210 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11213
11214 pWdaParams->pWdaContext = pWDA;
11215
Jeff Johnson43971f52012-07-17 12:26:56 -070011216 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011217 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011218 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 {
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11221 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011222 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11224 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011225 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011227 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011228}
Jeff Johnson295189b2012-06-20 16:38:30 -070011229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011230 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 *
11232 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011233void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011234{
11235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 if(NULL == pWdaParams)
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 VOS_ASSERT(0) ;
11243 return ;
11244 }
11245
11246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11247 vos_mem_free(pWdaParams) ;
11248
Jeff Johnson295189b2012-06-20 16:38:30 -070011249 return ;
11250}
Jeff Johnson295189b2012-06-20 16:38:30 -070011251/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011252 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11253 * Free memory.
11254 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11255 */
11256void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11257{
11258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11259
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11261 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11262
11263 if(NULL == pWdaParams)
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "%s: pWdaParams received NULL", __func__);
11267 VOS_ASSERT(0);
11268 return;
11269 }
11270
11271 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11272 {
11273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11274 vos_mem_free(pWdaParams);
11275 }
11276
11277 return;
11278}
11279/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 * FUNCTION: WDA_SetRSSIThresholdsReq
11281 * Request to WDI to set the RSSI thresholds (sta mode).
11282 */
11283VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11284{
11285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011286 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 tWDA_CbContext *pWDA = NULL ;
11288 v_PVOID_t pVosContext = NULL;
11289 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11290 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11291 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11292 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 if(NULL == wdiRSSIThresholdsInfo)
11296 {
11297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 VOS_ASSERT(0);
11300 return VOS_STATUS_E_NOMEM;
11301 }
11302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11303 if(NULL == pWdaParams)
11304 {
11305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 VOS_ASSERT(0);
11308 vos_mem_free(wdiRSSIThresholdsInfo);
11309 return VOS_STATUS_E_NOMEM;
11310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11313 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11314 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011315 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11316 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11317 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11319 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11320 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011321 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11322 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011323 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11324 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11325
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 /* Store param pointer as passed in by caller */
11327 /* store Params pass it to WDI */
11328 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11329 pWdaParams->pWdaContext = pWDA;
11330 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011331 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011332 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011333 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 {
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11336 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011337 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11339 vos_mem_free(pWdaParams) ;
11340 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011341 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011342
11343}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011344/*
Yue Madb90ac12013-04-04 13:39:13 -070011345 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011346 *
11347 */
Yue Madb90ac12013-04-04 13:39:13 -070011348void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011349{
11350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11351
11352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011353 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 if(NULL == pWdaParams)
11355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011357 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 VOS_ASSERT(0) ;
11359 return ;
11360 }
11361
11362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11363 vos_mem_free(pWdaParams->wdaMsgParam);
11364 vos_mem_free(pWdaParams) ;
11365
11366 //print a msg, nothing else to do
11367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011368 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 return ;
11370}
Jeff Johnson295189b2012-06-20 16:38:30 -070011371/*
Yue Madb90ac12013-04-04 13:39:13 -070011372 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011373 * Free memory.
11374 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011375 */
11376void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11377{
11378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11379
11380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11381 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11382
11383 if(NULL == pWdaParams)
11384 {
11385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11386 "%s: Invalid pWdaParams pointer", __func__);
11387 VOS_ASSERT(0);
11388 return;
11389 }
11390
11391 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11392 {
11393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11394 vos_mem_free(pWdaParams->wdaMsgParam);
11395 vos_mem_free(pWdaParams);
11396 }
11397
11398 return;
11399}
11400/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 * FUNCTION: WDA_ProcessHostOffloadReq
11402 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11403 * to broadcast traffic (sta mode).
11404 */
11405VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11406 tSirHostOffloadReq *pHostOffloadParams)
11407{
11408 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011409 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11411 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11412 sizeof(WDI_HostOffloadReqParamsType)) ;
11413 tWDA_ReqParams *pWdaParams ;
11414
11415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011416 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011417
11418 if(NULL == wdiHostOffloadInfo)
11419 {
11420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422 VOS_ASSERT(0);
11423 return VOS_STATUS_E_NOMEM;
11424 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11426 if(NULL == pWdaParams)
11427 {
11428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 VOS_ASSERT(0);
11431 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011432 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 return VOS_STATUS_E_NOMEM;
11434 }
11435
11436 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11437 pHostOffloadParams->offloadType;
11438 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11439 pHostOffloadParams->enableOrDisable;
11440
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011441 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11442 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11443
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11445 {
11446 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11447 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11448 pHostOffloadParams->params.hostIpv4Addr,
11449 4);
11450 break;
11451 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11452 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11453 pHostOffloadParams->params.hostIpv6Addr,
11454 16);
11455 break;
11456 case SIR_IPV6_NS_OFFLOAD:
11457 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11458 pHostOffloadParams->params.hostIpv6Addr,
11459 16);
11460
11461#ifdef WLAN_NS_OFFLOAD
11462 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11463 {
11464 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11465 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11466 16);
11467 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11468 }
11469 else
11470 {
11471 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11472 }
11473
11474 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11475 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11476 16);
11477 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11478 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11479 6);
11480
11481 //Only two are supported so let's go through them without a loop
11482 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11483 {
11484 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11485 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11486 16);
11487 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11488 }
11489 else
11490 {
11491 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11492 }
11493
11494 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11495 {
11496 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11497 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11498 16);
11499 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11500 }
11501 else
11502 {
11503 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11504 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011505 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11506 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 break;
11508#endif //WLAN_NS_OFFLOAD
11509 default:
11510 {
11511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11512 "No Handling for Offload Type %x in WDA "
11513 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11514 //WDA_VOS_ASSERT(0) ;
11515 }
11516 }
Yue Madb90ac12013-04-04 13:39:13 -070011517 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11518 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011519
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011521 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 /* store Params pass it to WDI */
11523 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11524 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011525
Jeff Johnson295189b2012-06-20 16:38:30 -070011526
Jeff Johnson43971f52012-07-17 12:26:56 -070011527 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011528 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529
Jeff Johnson43971f52012-07-17 12:26:56 -070011530 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 {
11532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011533 "Failure in host offload REQ WDI API, free all the memory %d",
11534 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011535 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11537 vos_mem_free(pWdaParams->wdaMsgParam);
11538 vos_mem_free(pWdaParams) ;
11539 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011540 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011541
11542}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011544 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 *
11546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011547void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011548{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11550
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011552 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011553
11554 if(NULL == pWdaParams)
11555 {
11556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011557 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011558 VOS_ASSERT(0) ;
11559 return ;
11560 }
11561
11562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11563 vos_mem_free(pWdaParams->wdaMsgParam);
11564 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011565
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 //print a msg, nothing else to do
11567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011568 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 return ;
11570}
Jeff Johnson295189b2012-06-20 16:38:30 -070011571/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011572 * FUNCTION: WDA_KeepAliveReqCallback
11573 * Free memory.
11574 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11575 */
11576void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11577{
11578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11579
11580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11581 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11582
11583 if(NULL == pWdaParams)
11584 {
11585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11586 "%s: pWdaParams received NULL", __func__);
11587 VOS_ASSERT(0);
11588 return;
11589 }
11590
11591 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11592 {
11593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11594 vos_mem_free(pWdaParams->wdaMsgParam);
11595 vos_mem_free(pWdaParams);
11596 }
11597
11598 return;
11599}
11600/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011601 * FUNCTION: WDA_ProcessKeepAliveReq
11602 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11603 * wakeup due to broadcast traffic (sta mode).
11604 */
11605VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11606 tSirKeepAliveReq *pKeepAliveParams)
11607{
11608 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011609 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11611 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11612 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011613 tWDA_ReqParams *pWdaParams;
11614
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 if(NULL == wdiKeepAliveInfo)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011622 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 return VOS_STATUS_E_NOMEM;
11624 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011625
11626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11627 if(NULL == pWdaParams)
11628 {
11629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011630 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011631 VOS_ASSERT(0);
11632 vos_mem_free(wdiKeepAliveInfo);
11633 vos_mem_free(pKeepAliveParams);
11634 return VOS_STATUS_E_NOMEM;
11635 }
11636
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11638 pKeepAliveParams->packetType;
11639 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11640 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011641
11642 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11643 pKeepAliveParams->bssId,
11644 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011645
11646 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11647 {
11648 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11649 pKeepAliveParams->hostIpv4Addr,
11650 SIR_IPV4_ADDR_LEN);
11651 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11652 pKeepAliveParams->destIpv4Addr,
11653 SIR_IPV4_ADDR_LEN);
11654 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11655 pKeepAliveParams->destMacAddr,
11656 SIR_MAC_ADDR_LEN);
11657 }
11658 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11659 {
11660 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11661 SIR_IPV4_ADDR_LEN,
11662 0);
11663 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11664 SIR_IPV4_ADDR_LEN,
11665 0);
11666 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11667 SIR_MAC_ADDR_LEN,
11668 0);
11669 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011670 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11671 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011672
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011674 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011676 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11677 pWdaParams->pWdaContext = pWDA;
11678
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11680 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11681 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11682 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11683 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11686 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11687 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11690 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11691 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11692 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11693 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11694 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11695 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11696 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11698 "TimePeriod %d PacketType %d",
11699 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11700 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011701 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011702 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011703
Jeff Johnson43971f52012-07-17 12:26:56 -070011704 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 {
11706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11707 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011708 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11710 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011711 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011713 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714
11715}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011716/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011717 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 *
11719 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011720void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011721 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11722 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011723{
11724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 if(NULL == pWdaParams)
11728 {
11729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 VOS_ASSERT(0) ;
11732 return ;
11733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11735 vos_mem_free(pWdaParams->wdaMsgParam);
11736 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 return ;
11738}
Jeff Johnson295189b2012-06-20 16:38:30 -070011739/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011740 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11741 * Free memory.
11742 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11743 */
11744void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11745{
11746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11747
11748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11749 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11750
11751 if(NULL == pWdaParams)
11752 {
11753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11754 "%s: pWdaParams received NULL", __func__);
11755 VOS_ASSERT(0);
11756 return;
11757 }
11758
11759 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11760 {
11761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11762 vos_mem_free(pWdaParams->wdaMsgParam);
11763 vos_mem_free(pWdaParams);
11764 }
11765
11766 return;
11767}
11768
11769/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11771 * Request to WDI to add WOWL Bcast pattern
11772 */
11773VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11774 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11775{
11776 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011777 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11779 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11780 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11781 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011783 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011784 if(NULL == wdiWowlAddBcPtrnInfo)
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 VOS_ASSERT(0);
11789 return VOS_STATUS_E_NOMEM;
11790 }
11791 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11792 if(NULL == pWdaParams)
11793 {
11794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011796 VOS_ASSERT(0);
11797 vos_mem_free(wdiWowlAddBcPtrnInfo);
11798 return VOS_STATUS_E_NOMEM;
11799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11801 pWowlAddBcPtrnParams->ucPatternId;
11802 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11803 pWowlAddBcPtrnParams->ucPatternByteOffset;
11804 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11805 pWowlAddBcPtrnParams->ucPatternMaskSize;
11806 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11807 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011808 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11809 {
11810 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11811 pWowlAddBcPtrnParams->ucPattern,
11812 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11813 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11814 pWowlAddBcPtrnParams->ucPatternMask,
11815 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11816 }
11817 else
11818 {
11819 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11820 pWowlAddBcPtrnParams->ucPattern,
11821 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11822 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11823 pWowlAddBcPtrnParams->ucPatternMask,
11824 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11825
11826 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11827 pWowlAddBcPtrnParams->ucPatternExt,
11828 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11829 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11830 pWowlAddBcPtrnParams->ucPatternMaskExt,
11831 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11832 }
11833
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011834 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11835 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11836
Yue Ma7f44bbe2013-04-12 11:47:39 -070011837 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11838 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 /* Store param pointer as passed in by caller */
11840 /* store Params pass it to WDI */
11841 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11842 pWdaParams->pWdaContext = pWDA;
11843 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011844 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011845 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011846 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 {
11848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11849 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011850 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 vos_mem_free(pWdaParams->wdaMsgParam) ;
11852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11853 vos_mem_free(pWdaParams) ;
11854 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011855 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011856
11857}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011858/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011859 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 *
11861 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011862void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011863 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11864 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011865{
11866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 if(NULL == pWdaParams)
11870 {
11871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 VOS_ASSERT(0) ;
11874 return ;
11875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11877 vos_mem_free(pWdaParams->wdaMsgParam);
11878 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 return ;
11880}
Jeff Johnson295189b2012-06-20 16:38:30 -070011881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011882 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11883 * Free memory.
11884 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11885 */
11886void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11887{
11888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11889
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11891 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11892
11893 if(NULL == pWdaParams)
11894 {
11895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11896 "%s: pWdaParams received NULL", __func__);
11897 VOS_ASSERT(0);
11898 return;
11899 }
11900
11901 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11902 {
11903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11904 vos_mem_free(pWdaParams->wdaMsgParam);
11905 vos_mem_free(pWdaParams);
11906 }
11907
11908 return;
11909}
11910/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011911 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11912 * Request to WDI to delete WOWL Bcast pattern
11913 */
11914VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11915 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11916{
11917 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011918 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11920 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11921 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11922 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011925 if(NULL == wdiWowlDelBcPtrnInfo)
11926 {
11927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 VOS_ASSERT(0);
11930 return VOS_STATUS_E_NOMEM;
11931 }
11932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11933 if(NULL == pWdaParams)
11934 {
11935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011937 VOS_ASSERT(0);
11938 vos_mem_free(wdiWowlDelBcPtrnInfo);
11939 return VOS_STATUS_E_NOMEM;
11940 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11942 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011943
11944 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11945 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11946
Yue Ma7f44bbe2013-04-12 11:47:39 -070011947 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11948 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 /* Store param pointer as passed in by caller */
11950 /* store Params pass it to WDI */
11951 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11952 pWdaParams->pWdaContext = pWDA;
11953 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011954 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011955 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011956 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011957 {
11958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11959 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011960 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011961 vos_mem_free(pWdaParams->wdaMsgParam) ;
11962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11963 vos_mem_free(pWdaParams) ;
11964 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011965 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011966
11967}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011968/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011969 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 *
11971 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011972void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011973{
11974 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011975 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011978 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 if(NULL == pWdaParams)
11980 {
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011983 VOS_ASSERT(0) ;
11984 return ;
11985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011987 if (NULL == pWDA)
11988 {
11989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11990 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011991
11992 if(pWdaParams->wdaWdiApiMsgParam)
11993 {
11994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11995 }
11996 vos_mem_free(pWdaParams);
11997
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011998 VOS_ASSERT(0);
11999 return ;
12000 }
12001
Jeff Johnson295189b2012-06-20 16:38:30 -070012002 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12003
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012004 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12005
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12007 vos_mem_free(pWdaParams) ;
12008
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012009 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012010 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012012 return ;
12013}
Jeff Johnson295189b2012-06-20 16:38:30 -070012014/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012015 * FUNCTION: WDA_WowlEnterReqCallback
12016 * Free memory and send WOWL Enter RSP back to PE.
12017 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12018 */
12019void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12020{
12021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012022 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012023 tSirHalWowlEnterParams *pWowlEnterParams;
12024
12025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12026 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12027
12028 if(NULL == pWdaParams)
12029 {
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12031 "%s: pWdaParams received NULL", __func__);
12032 VOS_ASSERT(0);
12033 return;
12034 }
12035
12036 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012037 if (NULL == pWDA)
12038 {
12039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12040 "%s:pWDA is NULL", __func__);
12041 VOS_ASSERT(0);
12042 return ;
12043 }
12044
Yue Ma7f44bbe2013-04-12 11:47:39 -070012045 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12046 pWowlEnterParams->status = wdiStatus;
12047
12048 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12049 {
12050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12051 vos_mem_free(pWdaParams);
12052 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12053 }
12054
12055 return;
12056}
12057/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012058 * FUNCTION: WDA_ProcessWowlEnterReq
12059 * Request to WDI to enter WOWL
12060 */
12061VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12062 tSirHalWowlEnterParams *pWowlEnterParams)
12063{
12064 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012065 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12067 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12068 sizeof(WDI_WowlEnterReqParamsType)) ;
12069 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012071 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 if(NULL == wdiWowlEnterInfo)
12073 {
12074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012076 VOS_ASSERT(0);
12077 return VOS_STATUS_E_NOMEM;
12078 }
12079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12080 if(NULL == pWdaParams)
12081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012083 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 VOS_ASSERT(0);
12085 vos_mem_free(wdiWowlEnterInfo);
12086 return VOS_STATUS_E_NOMEM;
12087 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012088
12089 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12090
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12092 pWowlEnterParams->magicPtrn,
12093 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12095 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12097 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12099 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12101 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12103 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12105 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12107 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12109 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012110#ifdef WLAN_WAKEUP_EVENTS
12111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12112 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12113
12114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12115 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12116
12117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12118 pWowlEnterParams->ucWowNetScanOffloadMatch;
12119
12120 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12121 pWowlEnterParams->ucWowGTKRekeyError;
12122
12123 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12124 pWowlEnterParams->ucWoWBSSConnLoss;
12125#endif // WLAN_WAKEUP_EVENTS
12126
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012127 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12128 pWowlEnterParams->bssIdx;
12129
Yue Ma7f44bbe2013-04-12 11:47:39 -070012130 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12131 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 /* Store param pointer as passed in by caller */
12133 /* store Params pass it to WDI */
12134 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12135 pWdaParams->pWdaContext = pWDA;
12136 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012138 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012139 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 {
12141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12142 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012143 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 vos_mem_free(pWdaParams->wdaMsgParam) ;
12145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12146 vos_mem_free(pWdaParams) ;
12147 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012148 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012149
12150}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012151/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012152 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 *
12154 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012155void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012156{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012158 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012159 tSirHalWowlExitParams *pWowlExitParams;
12160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012161 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012162 if(NULL == pWdaParams)
12163 {
12164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012165 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012166 VOS_ASSERT(0) ;
12167 return ;
12168 }
12169 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012170 if (NULL == pWDA)
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12173 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012174
12175 if(pWdaParams->wdaWdiApiMsgParam)
12176 {
12177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12178 }
12179 vos_mem_free(pWdaParams);
12180
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012181 VOS_ASSERT(0);
12182 return ;
12183 }
12184
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012185 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12186
12187 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012188 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012189
12190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12191 vos_mem_free(pWdaParams) ;
12192
Jeff Johnson295189b2012-06-20 16:38:30 -070012193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012194 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012195 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012196 return ;
12197}
Jeff Johnson295189b2012-06-20 16:38:30 -070012198/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012199 * FUNCTION: WDA_WowlExitReqCallback
12200 * Free memory and send WOWL Exit RSP back to PE.
12201 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12202 */
12203void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12204{
12205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012206 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012207 tSirHalWowlExitParams *pWowlExitParams;
12208
12209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12210 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12211
12212 if(NULL == pWdaParams)
12213 {
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12215 "%s: pWdaParams received NULL", __func__);
12216 VOS_ASSERT(0);
12217 return;
12218 }
12219
12220 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012221 if (NULL == pWDA)
12222 {
12223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12224 "%s:pWDA is NULL", __func__);
12225 VOS_ASSERT(0);
12226 return ;
12227 }
12228
Yue Ma7f44bbe2013-04-12 11:47:39 -070012229 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12230 pWowlExitParams->status = wdiStatus;
12231
12232 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12233 {
12234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12235 vos_mem_free(pWdaParams);
12236 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12237 }
12238
12239 return;
12240}
12241/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 * FUNCTION: WDA_ProcessWowlExitReq
12243 * Request to WDI to add WOWL Bcast pattern
12244 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012245VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12246 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012247{
12248 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012249 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012250 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12251 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12252 sizeof(WDI_WowlExitReqParamsType)) ;
12253 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012255 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012256 if(NULL == wdiWowlExitInfo)
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012259 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012260 VOS_ASSERT(0);
12261 return VOS_STATUS_E_NOMEM;
12262 }
12263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12264 if(NULL == pWdaParams)
12265 {
12266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012267 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012268 VOS_ASSERT(0);
12269 vos_mem_free(wdiWowlExitInfo);
12270 return VOS_STATUS_E_NOMEM;
12271 }
12272
12273 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12274 pWowlExitParams->bssIdx;
12275
Yue Ma7f44bbe2013-04-12 11:47:39 -070012276 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12277 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012278
12279 /* Store param pointer as passed in by caller */
12280 /* store Params pass it to WDI */
12281 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12282 pWdaParams->pWdaContext = pWDA;
12283 pWdaParams->wdaMsgParam = pWowlExitParams;
12284
12285 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012286 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012287
Jeff Johnson43971f52012-07-17 12:26:56 -070012288 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 {
12290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12291 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012292 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12294 vos_mem_free(pWdaParams->wdaMsgParam);
12295 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012297 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012298}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012299/*
12300 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12301 * Request to WDI to determine whether a given station is capable of
12302 * using HW-based frame translation
12303 */
12304v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12305 tANI_U8 staIdx)
12306{
12307 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12308}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012309
12310/*
12311 * FUNCTION: WDA_IsSelfSTA
12312 * Request to WDI to determine whether a given STAID is self station
12313 * index.
12314 */
12315v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12316{
12317
12318 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12319
Girish Gowli05cf44e2014-06-12 21:53:37 +053012320 if (NULL != pWDA)
12321 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12322 else
12323 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012324}
Jeff Johnson295189b2012-06-20 16:38:30 -070012325/*
12326 * FUNCTION: WDA_NvDownloadReqCallback
12327 * send NV Download RSP back to PE
12328 */
12329void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12330 void* pUserData)
12331{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012332
12333 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012334 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012335
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012337 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012338
12339 if(NULL == pWdaParams)
12340 {
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012342 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012343 VOS_ASSERT(0) ;
12344 return ;
12345 }
12346
12347 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012348 if (NULL == pWDA)
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12351 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012352
12353 if(pWdaParams->wdaWdiApiMsgParam)
12354 {
12355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12356 }
12357 vos_mem_free(pWdaParams);
12358
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012359 VOS_ASSERT(0);
12360 return ;
12361 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012362
Jeff Johnson295189b2012-06-20 16:38:30 -070012363 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12365 vos_mem_free(pWdaParams);
12366
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 return ;
12369}
Jeff Johnson295189b2012-06-20 16:38:30 -070012370/*
12371 * FUNCTION: WDA_ProcessNvDownloadReq
12372 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12373 */
12374VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12375{
12376 /* Initialize the local Variables*/
12377 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12378 v_VOID_t *pNvBuffer=NULL;
12379 v_SIZE_t bufferSize = 0;
12380 WDI_Status status = WDI_STATUS_E_FAILURE;
12381 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012382 tWDA_ReqParams *pWdaParams ;
12383
Jeff Johnson295189b2012-06-20 16:38:30 -070012384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012385 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012386 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012387 {
12388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012389 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012390 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 return VOS_STATUS_E_FAILURE;
12392 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012393
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012395 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12396
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12398 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 if(NULL == wdiNvDownloadReqParam)
12400 {
12401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012403 VOS_ASSERT(0);
12404 return VOS_STATUS_E_NOMEM;
12405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012406 /* Copy Params to wdiNvDownloadReqParam*/
12407 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12408 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012409
12410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12411 if(NULL == pWdaParams)
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012414 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012415 VOS_ASSERT(0);
12416 vos_mem_free(wdiNvDownloadReqParam);
12417 return VOS_STATUS_E_NOMEM;
12418 }
12419
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012421 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12422 pWdaParams->wdaMsgParam = NULL;
12423 pWdaParams->pWdaContext = pWDA;
12424
12425
Jeff Johnson295189b2012-06-20 16:38:30 -070012426 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012427
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012429 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12430
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 if(IS_WDI_STATUS_FAILURE(status))
12432 {
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12434 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12436 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012439}
12440/*
12441 * FUNCTION: WDA_FlushAcReqCallback
12442 * send Flush AC RSP back to TL
12443 */
12444void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12445{
12446 vos_msg_t wdaMsg = {0} ;
12447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12448 tFlushACReq *pFlushACReqParams;
12449 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012451 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 if(NULL == pWdaParams)
12453 {
12454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012455 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 VOS_ASSERT(0) ;
12457 return ;
12458 }
12459
12460 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12461 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12462 if(NULL == pFlushACRspParams)
12463 {
12464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012467 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 return ;
12469 }
12470 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12471 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12472 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12473 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12474 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012475 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 vos_mem_free(pWdaParams->wdaMsgParam) ;
12477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12478 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012479 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12480 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12481 // POST message to TL
12482 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12483
Jeff Johnson295189b2012-06-20 16:38:30 -070012484 return ;
12485}
Jeff Johnson295189b2012-06-20 16:38:30 -070012486/*
12487 * FUNCTION: WDA_ProcessFlushAcReq
12488 * Request to WDI to Update the DELBA REQ params.
12489 */
12490VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12491 tFlushACReq *pFlushAcReqParams)
12492{
12493 WDI_Status status = WDI_STATUS_SUCCESS ;
12494 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12495 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12496 sizeof(WDI_FlushAcReqParamsType)) ;
12497 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 if(NULL == wdiFlushAcReqParam)
12499 {
12500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012502 VOS_ASSERT(0);
12503 return VOS_STATUS_E_NOMEM;
12504 }
12505 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12506 if(NULL == pWdaParams)
12507 {
12508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 VOS_ASSERT(0);
12511 vos_mem_free(wdiFlushAcReqParam);
12512 return VOS_STATUS_E_NOMEM;
12513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012515 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12517 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12518 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12519 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012520 /* Store Flush AC pointer, as this will be used for response */
12521 /* store Params pass it to WDI */
12522 pWdaParams->pWdaContext = pWDA;
12523 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12524 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12526 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 if(IS_WDI_STATUS_FAILURE(status))
12528 {
12529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12530 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12531 vos_mem_free(pWdaParams->wdaMsgParam) ;
12532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12533 vos_mem_free(pWdaParams) ;
12534 //TODO: respond to TL with failure
12535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012536 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012537}
Jeff Johnson295189b2012-06-20 16:38:30 -070012538/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012539 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 *
12541 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012542void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012543{
12544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012545 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012546 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012547
12548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012549 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012550 if(NULL == pWdaParams)
12551 {
12552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012553 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 VOS_ASSERT(0) ;
12555 return ;
12556 }
12557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012558 if (NULL == pWDA)
12559 {
12560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12561 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012562 vos_mem_free(pWdaParams->wdaMsgParam) ;
12563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12564 vos_mem_free(pWdaParams) ;
12565
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012566 VOS_ASSERT(0);
12567 return ;
12568 }
12569
Jeff Johnson295189b2012-06-20 16:38:30 -070012570 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12571 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12572 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12573 {
12574 pWDA->wdaAmpSessionOn = VOS_FALSE;
12575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012576 vos_mem_free(pWdaParams->wdaMsgParam) ;
12577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12578 vos_mem_free(pWdaParams) ;
12579 /*
12580 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12581 * param here
12582 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012583 return ;
12584}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012585/*
12586 * FUNCTION: WDA_BtAmpEventReqCallback
12587 * Free memory.
12588 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12589 */
12590void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12591{
12592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012593 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012594 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012595
Yue Ma7f44bbe2013-04-12 11:47:39 -070012596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12597 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12598
12599 if(NULL == pWdaParams)
12600 {
12601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12602 "%s: pWdaParams received NULL", __func__);
12603 VOS_ASSERT(0);
12604 return;
12605 }
12606
12607 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012608 if (NULL == pWDA)
12609 {
12610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12611 "%s:pWDA is NULL", __func__);
12612 VOS_ASSERT(0);
12613 return ;
12614 }
12615
Yue Ma7f44bbe2013-04-12 11:47:39 -070012616 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12617
12618 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12619 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12620 {
12621 pWDA->wdaAmpSessionOn = VOS_FALSE;
12622 }
12623
12624 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12625 {
12626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12627 vos_mem_free(pWdaParams->wdaMsgParam);
12628 vos_mem_free(pWdaParams);
12629 }
12630
12631 return;
12632}
Jeff Johnson295189b2012-06-20 16:38:30 -070012633/*
12634 * FUNCTION: WDA_ProcessBtAmpEventReq
12635 * Request to WDI to Update with BT AMP events.
12636 */
12637VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12638 tSmeBtAmpEvent *pBtAmpEventParams)
12639{
12640 WDI_Status status = WDI_STATUS_SUCCESS ;
12641 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12642 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12643 sizeof(WDI_BtAmpEventParamsType)) ;
12644 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012646 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012647 if(NULL == wdiBtAmpEventParam)
12648 {
12649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012651 VOS_ASSERT(0);
12652 return VOS_STATUS_E_NOMEM;
12653 }
12654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12655 if(NULL == pWdaParams)
12656 {
12657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 VOS_ASSERT(0);
12660 vos_mem_free(wdiBtAmpEventParam);
12661 return VOS_STATUS_E_NOMEM;
12662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12664 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012665 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12666 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 /* Store BT AMP event pointer, as this will be used for response */
12668 /* store Params pass it to WDI */
12669 pWdaParams->pWdaContext = pWDA;
12670 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12671 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012673 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 if(IS_WDI_STATUS_FAILURE(status))
12675 {
12676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12677 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12678 vos_mem_free(pWdaParams->wdaMsgParam) ;
12679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12680 vos_mem_free(pWdaParams) ;
12681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12683 {
12684 pWDA->wdaAmpSessionOn = VOS_TRUE;
12685 }
12686 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012687}
12688
Jeff Johnson295189b2012-06-20 16:38:30 -070012689/*
12690 * FUNCTION: WDA_FTMCommandReqCallback
12691 * Handle FTM CMD response came from HAL
12692 * Route responce to HDD FTM
12693 */
12694void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12695 void *usrData)
12696{
12697 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12699 {
12700 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012701 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012702 return;
12703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 /* Release Current FTM Command Request */
12705 vos_mem_free(pWDA->wdaFTMCmdReq);
12706 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 /* Post FTM Responce to HDD FTM */
12708 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 return;
12710}
Jeff Johnson295189b2012-06-20 16:38:30 -070012711/*
12712 * FUNCTION: WDA_ProcessFTMCommand
12713 * Send FTM command to WDI
12714 */
12715VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12716 tPttMsgbuffer *pPTTFtmCmd)
12717{
12718 WDI_Status status = WDI_STATUS_SUCCESS;
12719 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 ftmCMDReq = (WDI_FTMCommandReqType *)
12721 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12722 if(NULL == ftmCMDReq)
12723 {
12724 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12725 "WDA FTM Command buffer alloc fail");
12726 return VOS_STATUS_E_NOMEM;
12727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012728 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12729 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 /* Send command to WDI */
12732 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 return status;
12734}
Jeff Johnsone7245742012-09-05 17:12:55 -070012735#ifdef FEATURE_OEM_DATA_SUPPORT
12736/*
12737 * FUNCTION: WDA_StartOemDataReqCallback
12738 *
12739 */
12740void WDA_StartOemDataReqCallback(
12741 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12742 void* pUserData)
12743{
12744 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012746 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012747 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012748
Jeff Johnsone7245742012-09-05 17:12:55 -070012749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012750 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012751
12752 if(NULL == pWdaParams)
12753 {
12754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012755 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012756 VOS_ASSERT(0) ;
12757 return ;
12758 }
12759 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12760
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012761 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012762 {
12763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012764 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012765 VOS_ASSERT(0);
12766 return ;
12767 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012768
Jeff Johnsone7245742012-09-05 17:12:55 -070012769 /*
12770 * Allocate memory for response params sent to PE
12771 */
12772 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12773
12774 // Check if memory is allocated for OemdataMeasRsp Params.
12775 if(NULL == pOemDataRspParams)
12776 {
12777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12778 "OEM DATA WDA callback alloc fail");
12779 VOS_ASSERT(0) ;
12780 return;
12781 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012782
Jeff Johnsone7245742012-09-05 17:12:55 -070012783 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12785 vos_mem_free(pWdaParams->wdaMsgParam);
12786 vos_mem_free(pWdaParams) ;
12787
Jeff Johnsone7245742012-09-05 17:12:55 -070012788 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012789 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012790 * Also, here success always means that we have atleast one BSSID.
12791 */
12792 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12793
12794 //enable Tx
12795 status = WDA_ResumeDataTx(pWDA);
12796 if(status != VOS_STATUS_SUCCESS)
12797 {
12798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12799 }
12800 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12801 return ;
12802}
12803/*
12804 * FUNCTION: WDA_ProcessStartOemDataReq
12805 * Send Start Oem Data Req to WDI
12806 */
12807VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12808 tStartOemDataReq *pOemDataReqParams)
12809{
12810 WDI_Status status = WDI_STATUS_SUCCESS;
12811 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012812 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012813
12814 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12815
12816 if(NULL == wdiOemDataReqParams)
12817 {
12818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012820 VOS_ASSERT(0);
12821 return VOS_STATUS_E_NOMEM;
12822 }
12823
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012824 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12825 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12826 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12827 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012828
12829 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12830
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12832 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012833 {
12834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012836 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012837 vos_mem_free(pOemDataReqParams);
12838 VOS_ASSERT(0);
12839 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012840 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012841
Bernald44a1ae2013-01-09 08:30:39 -080012842 pWdaParams->pWdaContext = (void*)pWDA;
12843 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12844 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012845
12846 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12847 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012848
12849 if(IS_WDI_STATUS_FAILURE(status))
12850 {
12851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12852 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12854 vos_mem_free(pWdaParams->wdaMsgParam);
12855 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012856 }
12857 return CONVERT_WDI2VOS_STATUS(status) ;
12858}
12859#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012860/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012861 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 *
12863 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012864void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012865{
12866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012868 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 if(NULL == pWdaParams)
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012873 VOS_ASSERT(0) ;
12874 return ;
12875 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012876
12877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12878 vos_mem_free(pWdaParams->wdaMsgParam);
12879 vos_mem_free(pWdaParams);
12880
12881 return ;
12882}
12883/*
12884 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12885 * Free memory.
12886 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12887 */
12888void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12889{
12890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12891
12892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12893 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12894
12895 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12898 "%s: pWdaParams received NULL", __func__);
12899 VOS_ASSERT(0);
12900 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012902
12903 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012904 {
12905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012906 vos_mem_free(pWdaParams->wdaMsgParam);
12907 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012908 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909
12910 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012911}
Jeff Johnson295189b2012-06-20 16:38:30 -070012912#ifdef WLAN_FEATURE_GTK_OFFLOAD
12913/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012914 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012915 *
12916 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012917void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012918 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012919{
12920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12921
12922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012923 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012924 if(NULL == pWdaParams)
12925 {
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12927 "%s: pWdaParams received NULL", __func__);
12928 VOS_ASSERT(0);
12929 return;
12930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012931
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 vos_mem_free(pWdaParams->wdaMsgParam) ;
12933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12934 vos_mem_free(pWdaParams) ;
12935
12936 //print a msg, nothing else to do
12937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012938 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012939
12940 return ;
12941}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012942/*
12943 * FUNCTION: WDA_GTKOffloadReqCallback
12944 * Free memory.
12945 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12946 */
12947void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12948{
12949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012950
Yue Ma7f44bbe2013-04-12 11:47:39 -070012951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12952 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12953
12954 if(NULL == pWdaParams)
12955 {
12956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12957 "%s: pWdaParams received NULL", __func__);
12958 VOS_ASSERT(0);
12959 return;
12960 }
12961
12962 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12963 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012964 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12965 sizeof(WDI_GtkOffloadReqMsg));
12966 vos_mem_zero(pWdaParams->wdaMsgParam,
12967 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12969 vos_mem_free(pWdaParams->wdaMsgParam);
12970 vos_mem_free(pWdaParams);
12971 }
12972
12973 return;
12974}
Jeff Johnson295189b2012-06-20 16:38:30 -070012975/*
12976 * FUNCTION: WDA_ProcessGTKOffloadReq
12977 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12978 * to broadcast traffic (sta mode).
12979 */
12980VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12981 tpSirGtkOffloadParams pGtkOffloadParams)
12982{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012983 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012984 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12985 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12986 sizeof(WDI_GtkOffloadReqMsg)) ;
12987 tWDA_ReqParams *pWdaParams ;
12988
12989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012991
12992 if(NULL == wdiGtkOffloadReqMsg)
12993 {
12994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 VOS_ASSERT(0);
12997 return VOS_STATUS_E_NOMEM;
12998 }
12999
13000 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13001 if(NULL == pWdaParams)
13002 {
13003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 VOS_ASSERT(0);
13006 vos_mem_free(wdiGtkOffloadReqMsg);
13007 return VOS_STATUS_E_NOMEM;
13008 }
13009
13010 //
13011 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13012 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013013
13014 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013015 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013016
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13018 // Copy KCK
13019 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13020 // Copy KEK
13021 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13022 // Copy KeyReplayCounter
13023 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13024 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13025
Yue Ma7f44bbe2013-04-12 11:47:39 -070013026 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13027 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013028
Jeff Johnson295189b2012-06-20 16:38:30 -070013029
13030 /* Store Params pass it to WDI */
13031 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13032 pWdaParams->pWdaContext = pWDA;
13033 /* Store param pointer as passed in by caller */
13034 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13035
Yue Ma7f44bbe2013-04-12 11:47:39 -070013036 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013037
13038 if(IS_WDI_STATUS_FAILURE(status))
13039 {
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13041 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013042 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13043 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13045 vos_mem_free(pWdaParams->wdaMsgParam);
13046 vos_mem_free(pWdaParams);
13047 }
13048
13049 return CONVERT_WDI2VOS_STATUS(status) ;
13050}
13051
13052/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013053 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 *
13055 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013056void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013057 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013058{
13059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13060 tWDA_CbContext *pWDA;
13061 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013062 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013063 vos_msg_t vosMsg;
13064
13065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013066 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013067
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013068 if(NULL == pWdaParams)
13069 {
13070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13071 "%s: pWdaParams received NULL", __func__);
13072 VOS_ASSERT(0);
13073 return;
13074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013075
Nirav Shah374de6e2014-02-13 16:40:01 +053013076 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13077 if(NULL == pGtkOffloadGetInfoRsp)
13078 {
13079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13080 "%s: vos_mem_malloc failed ", __func__);
13081 VOS_ASSERT(0);
13082 return;
13083 }
13084
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13086 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13087
13088 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13089 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13090
13091 /* Message Header */
13092 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013093 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013094
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013095 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13096 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13097 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13098 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13099 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013101 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13102 pwdiGtkOffloadGetInfoRsparams->bssId,
13103 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 /* VOS message wrapper */
13105 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13106 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13107 vosMsg.bodyval = 0;
13108
13109 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13110 {
13111 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013112 vos_mem_zero(pGtkOffloadGetInfoRsp,
13113 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13115 }
13116
13117 vos_mem_free(pWdaParams->wdaMsgParam) ;
13118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13119 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013120
13121 return;
13122}
13123/*
13124 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13125 * Free memory and send RSP back to SME.
13126 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13127 */
13128void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13129{
13130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13131 vos_msg_t vosMsg;
13132
13133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13134 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13135
13136 if(NULL == pWdaParams)
13137 {
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13139 "%s: pWdaParams received NULL", __func__);
13140 VOS_ASSERT(0);
13141 return;
13142 }
13143
13144 /* VOS message wrapper */
13145 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13146 vosMsg.bodyptr = NULL;
13147 vosMsg.bodyval = 0;
13148
13149 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13150 {
13151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13152 vos_mem_free(pWdaParams->wdaMsgParam);
13153 vos_mem_free(pWdaParams);
13154 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13155 }
13156
13157 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013158}
13159#endif
13160
13161/*
13162 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13163 * Request to WDI to set Tx Per Tracking configurations
13164 */
13165VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13166{
13167 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013168 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13170 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13171 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13172 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 if(NULL == pwdiSetTxPerTrackingReqParams)
13176 {
13177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 vos_mem_free(pTxPerTrackingParams);
13180 VOS_ASSERT(0);
13181 return VOS_STATUS_E_NOMEM;
13182 }
13183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13184 if(NULL == pWdaParams)
13185 {
13186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13189 vos_mem_free(pTxPerTrackingParams);
13190 VOS_ASSERT(0);
13191 return VOS_STATUS_E_NOMEM;
13192 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13194 pTxPerTrackingParams->ucTxPerTrackingEnable;
13195 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13196 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13197 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13198 pTxPerTrackingParams->ucTxPerTrackingRatio;
13199 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13200 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013201 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13202 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013203 /* Store param pointer as passed in by caller */
13204 /* store Params pass it to WDI
13205 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13206 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13207 pWdaParams->pWdaContext = pWDA;
13208 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013209 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013210 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013211 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 {
13213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13214 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013215 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 vos_mem_free(pWdaParams->wdaMsgParam) ;
13217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13218 vos_mem_free(pWdaParams) ;
13219 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013220 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013221
13222}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013223/*
13224 * FUNCTION: WDA_HALDumpCmdCallback
13225 * Send the VOS complete .
13226 */
13227void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13228 void* pUserData)
13229{
13230 tANI_U8 *buffer = NULL;
13231 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013232 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 if(NULL == pWdaParams)
13234 {
13235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013236 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013237 VOS_ASSERT(0) ;
13238 return ;
13239 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013240
13241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13242 "%s: WDA HAL DUMP Resp Received",__func__);
13243
Jeff Johnson295189b2012-06-20 16:38:30 -070013244 pWDA = pWdaParams->pWdaContext;
13245 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013246 if(wdiRspParams->usBufferLen > 0)
13247 {
13248 /*Copy the Resp data to UMAC supplied buffer*/
13249 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13250 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013251
13252 if (!pWdaParams->wdaHALDumpAsync)
13253 {/* Indicate VOSS about the start complete */
13254 vos_WDAComplete_cback(pWDA->pVosContext);
13255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 return ;
13259}
13260
Jeff Johnson295189b2012-06-20 16:38:30 -070013261/*
13262 * FUNCTION: WDA_ProcessHALDumpCmdReq
13263 * Send Dump command to WDI
13264 */
13265VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13266 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013267 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013268{
13269 WDI_Status status = WDI_STATUS_SUCCESS;
13270 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13271 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013272 tWDA_HalDumpReqParams *pWdaParams ;
13273
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 pVosContextType pVosContext = NULL;
13275 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13277 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013278 if(pVosContext)
13279 {
13280 if (pVosContext->isLogpInProgress)
13281 {
13282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13283 "%s:LOGP in Progress. Ignore!!!", __func__);
13284 return VOS_STATUS_E_BUSY;
13285 }
13286 }
13287 else
13288 {
13289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13290 "%s: VOS Context Null", __func__);
13291 return VOS_STATUS_E_RESOURCES;
13292 }
13293
Siddharth Bhal68115602015-01-18 20:44:55 +053013294 if (NULL == pVosContext->pWDAContext)
13295 {
13296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13297 "%s: WDA Context Null", __func__);
13298 return VOS_STATUS_E_RESOURCES;
13299 }
13300 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 if(NULL == pWdaParams)
13302 {
13303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013305 return VOS_STATUS_E_NOMEM;
13306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013307 /* Allocate memory WDI request structure*/
13308 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13309 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13310 if(NULL == wdiHALDumpCmdReqParam)
13311 {
13312 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13313 "WDA HAL DUMP Command buffer alloc fail");
13314 vos_mem_free(pWdaParams);
13315 return WDI_STATUS_E_FAILURE;
13316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 /* Extract the arguments */
13319 wdiHalDumpCmdInfo->command = cmd;
13320 wdiHalDumpCmdInfo->argument1 = arg1;
13321 wdiHalDumpCmdInfo->argument2 = arg2;
13322 wdiHalDumpCmdInfo->argument3 = arg3;
13323 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013326 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013327
13328 /* Response message will be passed through the buffer */
13329 pWdaParams->wdaMsgParam = (void *)pBuffer;
13330
13331 /* store Params pass it to WDI */
13332 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013333
13334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13335 "%s: WDA HAL DUMP Command sent",__func__);
13336
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013338 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13339 pWdaParams);
13340 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13341 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013342 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013343 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13344 WDA_DUMPCMD_WAIT_TIMEOUT );
13345 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013346 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013347 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13348 {
13349 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13350 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13351 }
13352 else
13353 {
13354 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13355 "%s: WDA_HALDUMP reporting other error",__func__);
13356 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013357 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013358 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013359 }
13360 return status;
13361}
Jeff Johnson295189b2012-06-20 16:38:30 -070013362#ifdef WLAN_FEATURE_GTK_OFFLOAD
13363/*
13364 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13365 * Request to WDI to get GTK Offload Information
13366 */
13367VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13368 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13369{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013370 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13372 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13373 tWDA_ReqParams *pWdaParams ;
13374
13375 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13376 {
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 VOS_ASSERT(0);
13380 return VOS_STATUS_E_NOMEM;
13381 }
13382
13383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13384 if(NULL == pWdaParams)
13385 {
13386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 VOS_ASSERT(0);
13389 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13390 return VOS_STATUS_E_NOMEM;
13391 }
13392
Yue Ma7f44bbe2013-04-12 11:47:39 -070013393 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13394 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013395
Jeff Johnson295189b2012-06-20 16:38:30 -070013396 /* Store Params pass it to WDI */
13397 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13398 pWdaParams->pWdaContext = pWDA;
13399 /* Store param pointer as passed in by caller */
13400 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13401
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013402 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013403 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013404
Yue Ma7f44bbe2013-04-12 11:47:39 -070013405 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013406
13407 if(IS_WDI_STATUS_FAILURE(status))
13408 {
13409 /* failure returned by WDI API */
13410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13411 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13413 vos_mem_free(pWdaParams) ;
13414 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13415 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13416 }
13417
13418 return CONVERT_WDI2VOS_STATUS(status) ;
13419}
13420#endif // WLAN_FEATURE_GTK_OFFLOAD
13421
13422/*
Yue Mab9c86f42013-08-14 15:59:08 -070013423 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13424 *
13425 */
13426VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13427 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13428{
13429 WDI_Status wdiStatus;
13430 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13431
13432 addPeriodicTxPtrnParams =
13433 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13434
13435 if (NULL == addPeriodicTxPtrnParams)
13436 {
13437 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13438 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13439 __func__);
13440
13441 return VOS_STATUS_E_NOMEM;
13442 }
13443
13444 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13445 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13446
13447 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13448 addPeriodicTxPtrnParams->pUserData = pWDA;
13449
13450 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13451
13452 if (WDI_STATUS_PENDING == wdiStatus)
13453 {
13454 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13455 "Pending received for %s:%d", __func__, __LINE__ );
13456 }
13457 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13458 {
13459 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13460 "Failure in %s:%d", __func__, __LINE__ );
13461 }
13462
13463 vos_mem_free(addPeriodicTxPtrnParams);
13464
13465 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13466}
13467
13468/*
13469 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13470 *
13471 */
13472VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13473 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13474{
13475 WDI_Status wdiStatus;
13476 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13477
13478 delPeriodicTxPtrnParams =
13479 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13480
13481 if (NULL == delPeriodicTxPtrnParams)
13482 {
13483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13484 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13485 __func__);
13486
13487 return VOS_STATUS_E_NOMEM;
13488 }
13489
13490 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13491 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13492
13493 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13494 delPeriodicTxPtrnParams->pUserData = pWDA;
13495
13496 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13497
13498 if (WDI_STATUS_PENDING == wdiStatus)
13499 {
13500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13501 "Pending received for %s:%d", __func__, __LINE__ );
13502 }
13503 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13504 {
13505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13506 "Failure in %s:%d", __func__, __LINE__ );
13507 }
13508
13509 vos_mem_free(delPeriodicTxPtrnParams);
13510
13511 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13512}
13513
Abhishek Singh00b71972016-01-07 10:51:04 +053013514/*
13515 * FUNCTION: WDA_ProcessRateUpdateInd
13516 *
13517 */
13518VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13519 tSirRateUpdateInd *pRateUpdateParams)
13520{
13521 WDI_Status wdiStatus;
13522 WDI_RateUpdateIndParams rateUpdateParams;
13523
13524 vos_mem_copy(rateUpdateParams.bssid,
13525 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13526
13527 rateUpdateParams.ucastDataRateTxFlag =
13528 pRateUpdateParams->ucastDataRateTxFlag;
13529 rateUpdateParams.rmcDataRateTxFlag =
13530 pRateUpdateParams->rmcDataRateTxFlag;
13531 rateUpdateParams.mcastDataRate24GHzTxFlag =
13532 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13533 rateUpdateParams.mcastDataRate5GHzTxFlag =
13534 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13535
13536 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13537 rateUpdateParams.rmcDataRate =
13538 pRateUpdateParams->rmcDataRate;
13539 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13540 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13541
13542 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13543 rateUpdateParams.pUserData = pWDA;
13544
13545 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13546
13547 if (WDI_STATUS_PENDING == wdiStatus)
13548 {
13549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13550 "Pending received for %s:%d", __func__, __LINE__ );
13551 }
13552 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13553 {
13554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13555 "Failure in %s:%d", __func__, __LINE__ );
13556 }
13557
13558 vos_mem_free(pRateUpdateParams);
13559
13560 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13561}
13562
13563
Rajeev79dbe4c2013-10-05 11:03:42 +053013564#ifdef FEATURE_WLAN_BATCH_SCAN
13565/*
13566 * FUNCTION: WDA_ProcessStopBatchScanInd
13567 *
13568 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13569 *
13570 * PARAM:
13571 * pWDA: pointer to WDA context
13572 * pReq: pointer to stop batch scan request
13573 */
13574VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13575 tSirStopBatchScanInd *pReq)
13576{
13577 WDI_Status wdiStatus;
13578 WDI_StopBatchScanIndType wdiReq;
13579
13580 wdiReq.param = pReq->param;
13581
13582 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13583
13584 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13585 {
13586 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13587 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13588 }
13589
13590 vos_mem_free(pReq);
13591
13592 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13593}
13594/*==========================================================================
13595 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13596
13597 DESCRIPTION
13598 API to pull batch scan result from FW
13599
13600 PARAMETERS
13601 pWDA: Pointer to WDA context
13602 pGetBatchScanReq: Pointer to get batch scan result indication
13603
13604 RETURN VALUE
13605 NONE
13606
13607===========================================================================*/
13608VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13609 tSirTriggerBatchScanResultInd *pReq)
13610{
13611 WDI_Status wdiStatus;
13612 WDI_TriggerBatchScanResultIndType wdiReq;
13613
13614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13615 "------> %s " ,__func__);
13616
13617 wdiReq.param = pReq->param;
13618
13619 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13620
13621 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13622 {
13623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13624 "Trigger batch scan result ind failed %s:%d",
13625 __func__, wdiStatus);
13626 }
13627
13628 vos_mem_free(pReq);
13629
13630 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13631}
13632
13633/*==========================================================================
13634 FUNCTION WDA_SetBatchScanRespCallback
13635
13636 DESCRIPTION
13637 API to process set batch scan response from FW
13638
13639 PARAMETERS
13640 pRsp: Pointer to set batch scan response
13641 pUserData: Pointer to user data
13642
13643 RETURN VALUE
13644 NONE
13645
13646===========================================================================*/
13647void WDA_SetBatchScanRespCallback
13648(
13649 WDI_SetBatchScanRspType *pRsp,
13650 void* pUserData
13651)
13652{
13653 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13654 tpAniSirGlobal pMac;
13655 void *pCallbackContext;
13656 tWDA_CbContext *pWDA = NULL ;
13657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13658
13659
13660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13661 "<------ %s " ,__func__);
13662 if (NULL == pWdaParams)
13663 {
13664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13665 "%s: pWdaParams received NULL", __func__);
13666 VOS_ASSERT(0) ;
13667 return ;
13668 }
13669
13670 /*extract WDA context*/
13671 pWDA = pWdaParams->pWdaContext;
13672 if (NULL == pWDA)
13673 {
13674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13675 "%s:pWDA is NULL can't invole HDD callback",
13676 __func__);
13677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13678 vos_mem_free(pWdaParams->wdaMsgParam);
13679 vos_mem_free(pWdaParams);
13680 VOS_ASSERT(0);
13681 return;
13682 }
13683
13684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13685 vos_mem_free(pWdaParams->wdaMsgParam);
13686 vos_mem_free(pWdaParams);
13687
13688 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13689 if (NULL == pMac)
13690 {
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13692 "%s:pMac is NULL", __func__);
13693 VOS_ASSERT(0);
13694 return;
13695 }
13696
13697 pHddSetBatchScanRsp =
13698 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13699 if (NULL == pHddSetBatchScanRsp)
13700 {
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13702 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13703 VOS_ASSERT(0);
13704 return;
13705 }
13706
13707 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13708
13709 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13710 /*call hdd callback with set batch scan response data*/
13711 if(pMac->pmc.setBatchScanReqCallback)
13712 {
13713 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13714 }
13715 else
13716 {
13717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13718 "%s:HDD callback is null", __func__);
13719 VOS_ASSERT(0);
13720 }
13721
13722 vos_mem_free(pHddSetBatchScanRsp);
13723 return ;
13724}
13725
13726/*==========================================================================
13727 FUNCTION WDA_ProcessSetBatchScanReq
13728
13729 DESCRIPTION
13730 API to send set batch scan request to WDI
13731
13732 PARAMETERS
13733 pWDA: Pointer to WDA context
13734 pSetBatchScanReq: Pointer to set batch scan req
13735
13736 RETURN VALUE
13737 NONE
13738
13739===========================================================================*/
13740VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13741 tSirSetBatchScanReq *pSetBatchScanReq)
13742{
13743 WDI_Status status;
13744 tWDA_ReqParams *pWdaParams ;
13745 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13746
13747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13748 "------> %s " ,__func__);
13749
13750 pWdiSetBatchScanReq =
13751 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13752 if (NULL == pWdiSetBatchScanReq)
13753 {
13754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13755 "%s: VOS MEM Alloc Failure", __func__);
13756 vos_mem_free(pSetBatchScanReq);
13757 VOS_ASSERT(0);
13758 return VOS_STATUS_E_NOMEM;
13759 }
13760
13761 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13762 if (NULL == pWdaParams)
13763 {
13764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13765 "%s: VOS MEM Alloc Failure", __func__);
13766 VOS_ASSERT(0);
13767 vos_mem_free(pSetBatchScanReq);
13768 vos_mem_free(pWdiSetBatchScanReq);
13769 return VOS_STATUS_E_NOMEM;
13770 }
13771
13772 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13773 pWdiSetBatchScanReq->numberOfScansToBatch =
13774 pSetBatchScanReq->numberOfScansToBatch;
13775 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13776 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13777 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13778
13779 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13780 pWdaParams->pWdaContext = pWDA;
13781 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13782
13783 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13784 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13785 if (IS_WDI_STATUS_FAILURE(status))
13786 {
13787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13788 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13790 vos_mem_free(pWdaParams->wdaMsgParam);
13791 vos_mem_free(pWdaParams);
13792 }
13793 return CONVERT_WDI2VOS_STATUS(status);
13794}
13795
13796#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013797/*
13798 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13799 *
13800 * DESCRIPTION: This function sends start/update OBSS scan
13801 * inidcation message to WDI
13802 *
13803 * PARAM:
13804 * pWDA: pointer to WDA context
13805 * pReq: pointer to start OBSS scan request
13806 */
13807VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13808 tSirHT40OBSSScanInd *pReq)
13809{
13810 WDI_Status status;
13811 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13812 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013813
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13815 "------> %s " ,__func__);
13816 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13817 wdiOBSSScanParams.pUserData = pWDA;
13818
13819 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13820 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13821 pWdiOBSSScanInd->scanType = pReq->scanType;
13822 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13823 pReq->OBSSScanActiveDwellTime;
13824 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13825 pReq->OBSSScanPassiveDwellTime;
13826 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13827 pReq->BSSChannelWidthTriggerScanInterval;
13828 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13829 pReq->BSSWidthChannelTransitionDelayFactor;
13830 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13831 pReq->OBSSScanActiveTotalPerChannel;
13832 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13833 pReq->OBSSScanPassiveTotalPerChannel;
13834 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13835 pReq->OBSSScanActivityThreshold;
13836 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13837 vos_mem_copy(pWdiOBSSScanInd->channels,
13838 pReq->channels,
13839 pReq->channelCount);
13840 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13841 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13842 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13843 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13844 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13845
13846 vos_mem_copy(pWdiOBSSScanInd->ieField,
13847 pReq->ieField,
13848 pReq->ieFieldLen);
13849
13850 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13851 if (WDI_STATUS_PENDING == status)
13852 {
13853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13854 "Pending received for %s:%d ",__func__,__LINE__ );
13855 }
13856 else if (WDI_STATUS_SUCCESS_SYNC != status)
13857 {
13858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13859 "Failure in %s:%d ",__func__,__LINE__ );
13860 }
13861 return CONVERT_WDI2VOS_STATUS(status) ;
13862}
13863/*
13864 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13865 *
13866 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13867 *
13868 * PARAM:
13869 * pWDA: pointer to WDA context
13870 * pReq: pointer to stop batch scan request
13871 */
13872VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13873 tANI_U8 *bssIdx)
13874{
13875 WDI_Status status;
13876
13877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13878 "------> %s " ,__func__);
13879
13880 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13881 if (WDI_STATUS_PENDING == status)
13882 {
13883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13884 "Pending received for %s:%d ",__func__,__LINE__ );
13885 }
13886 else if (WDI_STATUS_SUCCESS_SYNC != status)
13887 {
13888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13889 "Failure in %s:%d ",__func__,__LINE__ );
13890 }
13891 return CONVERT_WDI2VOS_STATUS(status) ;
13892}
Yue Mab9c86f42013-08-14 15:59:08 -070013893/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013894 * -------------------------------------------------------------------------
13895 * DATA interface with WDI for Mgmt Frames
13896 * -------------------------------------------------------------------------
13897 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013898/*
13899 * FUNCTION: WDA_TxComplete
13900 * Callback function for the WDA_TxPacket
13901 */
13902VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13903 VOS_STATUS status )
13904{
13905
13906 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13907 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013908 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013909
Mihir Shete63341222015-03-24 15:39:18 +053013910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13911
Jeff Johnson295189b2012-06-20 16:38:30 -070013912 if(NULL == wdaContext)
13913 {
13914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13915 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013916 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013918 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013919 return VOS_STATUS_E_FAILURE;
13920 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013921
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013922 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013923 /*Check if frame was timed out or not*/
13924 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13925 (v_PVOID_t)&uUserData);
13926
13927 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13928 {
13929 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13931 "%s: MGMT Frame Tx timed out",
13932 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013933 vos_pkt_return_packet(pData);
13934 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013935 return VOS_STATUS_SUCCESS;
13936 }
13937
Jeff Johnson295189b2012-06-20 16:38:30 -070013938 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13939 if( NULL!=wdaContext->pTxCbFunc)
13940 {
13941 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013942 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 {
13944 wdaContext->pTxCbFunc(pMac, pData);
13945 }
13946 else
13947 {
13948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013949 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013950 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013951 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013952 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013953 return status;
13954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013955 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013956 else {
13957 wdaContext->mgmt_pktfree_fail++;
13958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13959 "%s:packet (%p) userData (%lx) is not freed",
13960 __func__, pData, uUserData);
13961 }
13962 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070013963
13964 /*
13965 * Trigger the event to bring the HAL TL Tx complete function to come
13966 * out of wait
13967 * Let the coe above to complete the packet first. When this event is set,
13968 * the thread waiting for the event may run and set Vospacket_freed causing the original
13969 * packet not being freed.
13970 */
13971 status = vos_event_set(&wdaContext->txFrameEvent);
13972 if(!VOS_IS_STATUS_SUCCESS(status))
13973 {
13974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013975 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013976 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 return status;
13978}
Jeff Johnson295189b2012-06-20 16:38:30 -070013979/*
13980 * FUNCTION: WDA_TxPacket
13981 * Forward TX management frame to WDI
13982 */
13983VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13984 void *pFrmBuf,
13985 tANI_U16 frmLen,
13986 eFrameType frmType,
13987 eFrameTxDir txDir,
13988 tANI_U8 tid,
13989 pWDATxRxCompFunc pCompFunc,
13990 void *pData,
13991 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013992 tANI_U32 txFlag,
13993 tANI_U32 txBdToken
13994 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013995{
13996 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13997 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13998 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13999 tANI_U8 eventIdx = 0;
14000 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14001 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014002 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014003 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014004
Jeff Johnson295189b2012-06-20 16:38:30 -070014005 if((NULL == pWDA)||(NULL == pFrmBuf))
14006 {
14007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014008 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014009 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 VOS_ASSERT(0);
14011 return VOS_STATUS_E_FAILURE;
14012 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014013
Jeff Johnson295189b2012-06-20 16:38:30 -070014014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014015 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14016 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14018 if(NULL == pMac)
14019 {
14020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014021 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014022 VOS_ASSERT(0);
14023 return VOS_STATUS_E_FAILURE;
14024 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014025
Jeff Johnson295189b2012-06-20 16:38:30 -070014026 /* store the call back function in WDA context */
14027 pWDA->pTxCbFunc = pCompFunc;
14028 /* store the call back for the function of ackTxComplete */
14029 if( pAckTxComp )
14030 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014031 if( NULL != pWDA->pAckTxCbFunc )
14032 {
14033 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014035 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014036 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014037 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014038
Jeff Johnsone7245742012-09-05 17:12:55 -070014039 if( VOS_STATUS_SUCCESS !=
14040 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14041 {
14042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14043 "Tx Complete timeout Timer Stop Failed ");
14044 }
14045 else
14046 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014048 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014049 }
14050 }
14051
14052 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14053 pWDA->pAckTxCbFunc = pAckTxComp;
14054 if( VOS_STATUS_SUCCESS !=
14055 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14056 {
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14058 "Tx Complete Timer Start Failed ");
14059 pWDA->pAckTxCbFunc = NULL;
14060 return eHAL_STATUS_FAILURE;
14061 }
14062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014063 /* Reset the event to be not signalled */
14064 status = vos_event_reset(&pWDA->txFrameEvent);
14065 if(!VOS_IS_STATUS_SUCCESS(status))
14066 {
14067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014068 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14070 if( pAckTxComp )
14071 {
14072 pWDA->pAckTxCbFunc = NULL;
14073 if( VOS_STATUS_SUCCESS !=
14074 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14075 {
14076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14077 "Tx Complete timeout Timer Stop Failed ");
14078 }
14079 }
14080 return VOS_STATUS_E_FAILURE;
14081 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014082
14083 /* If Peer Sta mask is set don't overwrite to self sta */
14084 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014085 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014086 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014088 else
14089 {
Ganesh K08bce952012-12-13 15:04:41 -080014090 /* Get system role, use the self station if in unknown role or STA role */
14091 systemRole = wdaGetGlobalSystemRole(pMac);
14092 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14093 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014094#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014095 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014096#endif
Ganesh K08bce952012-12-13 15:04:41 -080014097 ))
14098 {
14099 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14100 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014102
Jeff Johnsone7245742012-09-05 17:12:55 -070014103 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14104 disassoc frame reaches the HW, HAL has already deleted the peer station */
14105 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014106 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014107 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014108 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014109 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 /*Send Probe request frames on self sta idx*/
14111 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 /* Since we donot want probe responses to be retried, send probe responses
14114 through the NO_ACK queues */
14115 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14116 {
14117 //probe response is sent out using self station and no retries options.
14118 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14119 }
14120 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14121 {
14122 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14123 }
14124 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014125#ifdef FEATURE_WLAN_TDLS
14126 /* TDLS Management frames are sent using Peer Sta mask */
14127 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14128 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14129 {
14130 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14131
14132 }
14133#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014134 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014135
14136 /*Set frame tag to 0
14137 We will use the WDA user data in order to tag a frame as expired*/
14138 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14139 (v_PVOID_t)0);
14140
14141
14142 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014143 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14144 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014145 {
14146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014147 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014149 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 -070014150 if( pAckTxComp )
14151 {
14152 pWDA->pAckTxCbFunc = NULL;
14153 if( VOS_STATUS_SUCCESS !=
14154 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14155 {
14156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14157 "Tx Complete timeout Timer Stop Failed ");
14158 }
14159 }
14160 return VOS_STATUS_E_FAILURE;
14161 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014162 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 /*
14164 * Wait for the event to be set by the TL, to get the response of TX
14165 * complete, this event should be set by the Callback function called by TL
14166 */
14167 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14168 &eventIdx);
14169 if(!VOS_IS_STATUS_SUCCESS(status))
14170 {
14171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14172 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014173 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014174 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014175 /*Tag Frame as timed out for later deletion*/
14176 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14177 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14179 after the packet gets completed(packet freed once)*/
14180
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014181 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14182
14183 /*
14184 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14185 * TX completion call back
14186 */
14187 VOS_SMP_MB;
14188 vos_lock_release(&pWDA->mgmt_pkt_lock);
14189
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014190 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014191 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014192
Bhargav Shahcc1315d2016-06-01 16:28:36 +053014193 /* Send Flush command to FW */
14194 vos_fwDumpReq(274, 0, 0, 0, 0, 1);
Abhishek Singh849366d2015-11-26 16:53:47 +053014195
Abhishek Singh837adf22015-10-01 17:37:37 +053014196 if (vos_isFatalEventEnabled())
14197 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14198 WLAN_LOG_INDICATOR_HOST_DRIVER,
14199 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14200 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014201
Jeff Johnson295189b2012-06-20 16:38:30 -070014202 if( pAckTxComp )
14203 {
14204 pWDA->pAckTxCbFunc = NULL;
14205 if( VOS_STATUS_SUCCESS !=
14206 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14207 {
14208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14209 "Tx Complete timeout Timer Stop Failed ");
14210 }
14211 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014212 pWDA->mgmtTxfailureCnt++;
14213
14214 /* SSR if timeout continously for
14215 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14216 */
14217 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14218 pWDA->mgmtTxfailureCnt)
14219 {
14220 vos_wlanRestart();
14221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 status = VOS_STATUS_E_FAILURE;
14223 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014224
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014225#ifdef WLAN_DUMP_MGMTFRAMES
14226 if (VOS_IS_STATUS_SUCCESS(status))
14227 {
14228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14229 "%s() TX packet : SubType %d", __func__,pFc->subType);
14230 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14231 pData, frmLen);
14232 }
14233#endif
14234
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014235 if (VOS_IS_STATUS_SUCCESS(status))
14236 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014237 pWDA->mgmtTxfailureCnt = 0;
14238 if ((vos_timer_get_system_time() - time_snapshot) >=
14239 WDA_TX_TIME_THRESHOLD)
14240 {
14241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14242 "Tx Complete took %lu ms",
14243 vos_timer_get_system_time() - time_snapshot);
14244 }
14245
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014246 if (pMac->fEnableDebugLog & 0x1)
14247 {
14248 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14249 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14250 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14251 {
14252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14253 pFc->type, pFc->subType);
14254 }
14255 }
14256 }
14257
14258
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 return status;
14260}
Jeff Johnson295189b2012-06-20 16:38:30 -070014261/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014262 * FUNCTION: WDA_ProcessDHCPStartInd
14263 * Forward DHCP Start to WDI
14264 */
14265static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14266 tAniDHCPInd *dhcpStartInd)
14267{
14268 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014269 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014270
c_hpothu0b0cab72014-02-13 21:52:40 +053014271 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14272 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014273 sizeof(tSirMacAddr));
14274
c_hpothu0b0cab72014-02-13 21:52:40 +053014275 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014276
c_hpothu0b0cab72014-02-13 21:52:40 +053014277 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)
14283 {
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14286 }
14287
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014288 vos_mem_free(dhcpStartInd);
14289 return CONVERT_WDI2VOS_STATUS(status) ;
14290}
14291
14292 /*
14293 * FUNCTION: WDA_ProcessDHCPStopInd
14294 * Forward DHCP Stop to WDI
14295 */
14296 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14297 tAniDHCPInd *dhcpStopInd)
14298 {
14299 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014300 WDI_DHCPInd wdiDHCPInd;
14301
14302 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14303 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14304
14305 status = WDI_dhcpStopInd(&wdiDHCPInd);
14306
14307 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014308 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14310 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014311 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014312 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014313 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14315 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014316 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014317
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014318 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014319
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014320 return CONVERT_WDI2VOS_STATUS(status) ;
14321 }
14322
Abhishek Singh00b71972016-01-07 10:51:04 +053014323#ifdef WLAN_FEATURE_RMC
14324
14325void
14326WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14327{
14328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14329 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14330
14331 switch (wdiRmcResponse->cmd)
14332 {
14333 case eWDI_BECOME_RULER_CMD :
14334 {
14335 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14336
14337 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14338 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14339
14340 if (NULL == pRmcBecomeRulerInd)
14341 {
14342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14343 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14344 break;
14345 }
14346
14347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14348 "Received eWDI_BECOME_RULER_CMD from WDI");
14349
14350 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14351
14352 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14353 wdiRmcResponse->mcastTransmitter,
14354 sizeof(tSirMacAddr));
14355 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14356 wdiRmcResponse->mcastGroup,
14357 sizeof(tSirMacAddr));
14358
14359 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14360 (void *)pRmcBecomeRulerInd, 0) ;
14361 break;
14362 }
14363 case eWDI_SUGGEST_RULER_CMD :
14364 {
14365 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14366
14367 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14368 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14369
14370 if (NULL == pRmcRulerSelectInd)
14371 {
14372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14373 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14374 break;
14375 }
14376
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14378 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14379
14380 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14381
14382 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14383 wdiRmcResponse->mcastTransmitter,
14384 sizeof(tSirMacAddr));
14385 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14386 wdiRmcResponse->mcastGroup,
14387 sizeof(tSirMacAddr));
14388 vos_mem_copy(pRmcRulerSelectInd->ruler,
14389 wdiRmcResponse->ruler,
14390 sizeof(pRmcRulerSelectInd->ruler));
14391
14392 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14393 (void *)pRmcRulerSelectInd, 0) ;
14394 break;
14395 }
14396 }
14397
14398 /* free the config structure */
14399 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14400 {
14401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14402 }
14403 vos_mem_free(pWdaParams->wdaMsgParam);
14404 vos_mem_free(pWdaParams);
14405
14406}
14407
14408void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14409{
14410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14411
14412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14413 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14414
14415 if (NULL == pWdaParams)
14416 {
14417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14418 "%s: pWdaParams received NULL", __func__);
14419 VOS_ASSERT(0);
14420 return;
14421 }
14422
14423 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14424 {
14425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14426 vos_mem_free(pWdaParams->wdaMsgParam);
14427 vos_mem_free(pWdaParams);
14428 }
14429
14430 return;
14431}
14432
14433static VOS_STATUS
14434WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14435 tSirRmcRulerReq *rmcRulerReq)
14436{
14437 WDI_Status status;
14438 WDI_RmcRulerReqParams *wdiRulerReq;
14439 tWDA_ReqParams *pWdaParams;
14440
14441 wdiRulerReq = (WDI_RmcRulerReqParams *)
14442 vos_mem_malloc(sizeof(*wdiRulerReq));
14443
14444 if (NULL == wdiRulerReq)
14445 {
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14447 "%s: VOS MEM Alloc Failure", __func__);
14448 VOS_ASSERT(0);
14449 vos_mem_free(rmcRulerReq);
14450 return VOS_STATUS_E_NOMEM;
14451 }
14452
14453 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14454 if (NULL == pWdaParams)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: VOS MEM Alloc Failure", __func__);
14458 VOS_ASSERT(0);
14459 vos_mem_free(rmcRulerReq);
14460 vos_mem_free(wdiRulerReq);
14461 return VOS_STATUS_E_NOMEM;
14462 }
14463
14464 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14465 /* Store param pointer as passed in by caller */
14466 pWdaParams->wdaMsgParam = rmcRulerReq;
14467 pWdaParams->pWdaContext = pWDA;
14468
14469 wdiRulerReq->cmd = rmcRulerReq->cmd;
14470
14471 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14472 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14473 vos_mem_copy(wdiRulerReq->mcastGroup,
14474 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14475 vos_mem_copy(wdiRulerReq->blacklist,
14476 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14477
14478 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14479
14480 status = WDI_RmcRulerReq(wdiRulerReq,
14481 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14482 (void *)pWdaParams);
14483 if (IS_WDI_STATUS_FAILURE(status))
14484 {
14485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14486 vos_mem_free(pWdaParams->wdaMsgParam);
14487 vos_mem_free(pWdaParams) ;
14488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14489 "Ruler Request failed");
14490 }
14491 return CONVERT_WDI2VOS_STATUS(status) ;
14492}
14493
14494/*
14495 * FUNCTION: WDA_ProcessRMCUpdateInd
14496 * Forward Update Indication to WDI
14497*/
14498static VOS_STATUS
14499WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14500 tSirRmcUpdateInd *rmcUpdateInd)
14501{
14502 WDI_Status status;
14503 WDI_RmcUpdateIndParams wdiUpdateInd;
14504
14505 /* Copy the paramters for Update_Ind */
14506
14507 wdiUpdateInd.indication = rmcUpdateInd->indication;
14508 wdiUpdateInd.role = rmcUpdateInd->role;
14509
14510 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14511 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14512
14513 vos_mem_copy(wdiUpdateInd.mcastGroup,
14514 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14515
14516 vos_mem_copy(wdiUpdateInd.mcastRuler,
14517 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14518
14519 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14520 wdiUpdateInd.pUserData = pWDA;
14521 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14522
14523 if (WDI_STATUS_PENDING == status)
14524 {
14525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14526 "Pending received for %s:%d ",__func__,__LINE__ );
14527 }
14528 else if (WDI_STATUS_SUCCESS_SYNC != status)
14529 {
14530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14531 "Failure in %s:%d ",__func__,__LINE__ );
14532 }
14533
14534 vos_mem_free(rmcUpdateInd);
14535
14536 return CONVERT_WDI2VOS_STATUS(status) ;
14537}
14538
14539void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14540 ,void* pUserData)
14541{
14542
14543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14544 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14545 tWDA_CbContext *pWDA;
14546 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14547 vos_msg_t vosMsg;
14548 v_U32_t wdaCnt = 0;
14549
14550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14551 "<------ %s " ,__func__);
14552 if (NULL == pWdaParams)
14553 {
14554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14555 "%s: pWdaParams received NULL", __func__);
14556 VOS_ASSERT(0);
14557 return;
14558 }
14559
14560 if (NULL == peerInfoRspParams)
14561 {
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14563 "%s: peerInfoRspParams received NULL", __func__);
14564 if(pWdaParams->wdaMsgParam)
14565 vos_mem_free(pWdaParams->wdaMsgParam);
14566 if(pWdaParams->wdaWdiApiMsgParam)
14567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14568 vos_mem_free(pWdaParams);
14569
14570 VOS_ASSERT(0);
14571 return;
14572 }
14573
14574 pIbssPeerInfoParams =
14575 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14576
14577 pIbssGetPeerInfoRsp =
14578 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14579
14580 if(NULL == pIbssGetPeerInfoRsp)
14581 {
14582 if(pWdaParams->wdaMsgParam)
14583 vos_mem_free(pWdaParams->wdaMsgParam);
14584 if(pWdaParams->wdaWdiApiMsgParam)
14585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14586 vos_mem_free(pWdaParams);
14587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14588 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14589 __func__);
14590 VOS_ASSERT(0);
14591 return;
14592
14593 }
14594
14595 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14596
14597
14598 if (peerInfoRspParams->wdiNumPeers > 32)
14599 {
14600 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14601 /* free the mem and return */
14602 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14603 if(pWdaParams->wdaMsgParam)
14604 vos_mem_free(pWdaParams->wdaMsgParam);
14605 if(pWdaParams->wdaWdiApiMsgParam)
14606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14607 vos_mem_free(pWdaParams);
14608
14609 return;
14610 }
14611
14612 /* Message Header */
14613 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14614 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14615 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14616 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14617
14618 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14619 {
14620 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14621 tSirIbssPeerInfoParams *pSmeTmp =
14622 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14623
14624 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14625 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14626 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14627 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14628 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14629 }
14630
14631 /* VOS message wrapper */
14632 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14633 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14634 vosMsg.bodyval = 0;
14635
14636 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14637 {
14638 /* free the mem and return */
14639 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14640 }
14641
14642 if(NULL != pWdaParams)
14643 {
14644 if(pWdaParams->wdaMsgParam)
14645 vos_mem_free(pWdaParams->wdaMsgParam);
14646 if(pWdaParams->wdaWdiApiMsgParam)
14647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14648 vos_mem_free(pWdaParams);
14649 }
14650
14651 return;
14652}
14653
14654static VOS_STATUS
14655WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14656 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14657{
14658 WDI_Status status;
14659 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14660 tWDA_ReqParams *pWdaParams;
14661
14662 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14663 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14664 if (NULL == wdiPeerInfoReq)
14665 {
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14667 "%s: VOS MEM Alloc Failure", __func__);
14668 VOS_ASSERT(0);
14669 vos_mem_free(ibssPeerInfoReqParams);
14670 return VOS_STATUS_E_NOMEM;
14671 }
14672
14673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14674 if (NULL == pWdaParams)
14675 {
14676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14677 "%s: VOS MEM Alloc Failure", __func__);
14678 VOS_ASSERT(0);
14679 vos_mem_free(wdiPeerInfoReq);
14680 vos_mem_free(ibssPeerInfoReqParams);
14681 return VOS_STATUS_E_NOMEM;
14682 }
14683
14684 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14685 /* Store param pointer as passed in by caller */
14686 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14687 pWdaParams->pWdaContext = pWDA;
14688
14689 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14690 ibssPeerInfoReqParams->allPeerInfoReqd;
14691 wdiPeerInfoReq->wdiStaIdx =
14692 ibssPeerInfoReqParams->staIdx;
14693
14694 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14695 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14696 (void *)pWdaParams);
14697 if (IS_WDI_STATUS_FAILURE(status))
14698 {
14699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14700 vos_mem_free(pWdaParams->wdaMsgParam);
14701 vos_mem_free(pWdaParams) ;
14702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14703 "IBSS Peer Info Request failed");
14704 }
14705 return CONVERT_WDI2VOS_STATUS(status) ;
14706
14707}
14708
14709/*
14710 * FUNCTION: WDA_ProcessTXFailMonitorInd
14711 * Forward TX Fail Monitor to WDI
14712 */
14713static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14714 tWDA_CbContext *pWDA,
14715 tAniTXFailMonitorInd *txFailMonitorInd)
14716{
14717 WDI_Status status;
14718 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14719 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14720
14721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14722 "<------ %s " ,__func__);
14723
14724 if (NULL == wdiTXFailMonitorInd)
14725 {
14726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14727 "%s: VOS MEM Alloc Failure", __func__);
14728 VOS_ASSERT(0);
14729 vos_mem_free(txFailMonitorInd);
14730 return VOS_STATUS_E_NOMEM;
14731 }
14732
14733 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14734
14735 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14736 wdiTXFailMonitorInd->pUserData = pWDA;
14737
14738 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14739
14740 if (WDI_STATUS_PENDING == status)
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14743 "TX Fail Monitor Indication Pending");
14744 }
14745 else if (WDI_STATUS_SUCCESS_SYNC == status)
14746 {
14747 if (0 == txFailMonitorInd->tx_fail_count)
14748 pWDA->txFailIndCallback = NULL;
14749 else
14750 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14751 }
14752 else
14753 {
14754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14755 "TX Fail Monitor Indication Failed");
14756 }
14757
14758 vos_mem_free(wdiTXFailMonitorInd);
14759 vos_mem_free(txFailMonitorInd);
14760
14761 return CONVERT_WDI2VOS_STATUS(status) ;
14762}
14763#endif /* WLAN_FEATURE_RMC */
14764
Kapil Gupta04ab1992016-06-26 13:36:51 +053014765#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14766VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
14767 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
14768{
14769 WDI_Status status;
14770 tWDA_ReqParams *pWdaParams ;
14771 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
14772 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
14773 sizeof(WDI_PERRoamTriggerScanInfo));
14774
14775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14776 "------> %s " ,__func__);
14777
14778 if (NULL == pwdiPERRoamTriggerScanInfo)
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14781 "%s: VOS MEM Alloc Failure", __func__);
14782 VOS_ASSERT(0);
14783 return VOS_STATUS_E_NOMEM;
14784 }
14785
14786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14787 if (NULL == pWdaParams)
14788 {
14789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14790 "%s: VOS MEM Alloc Failure", __func__);
14791 VOS_ASSERT(0);
14792 vos_mem_free(pwdiPERRoamTriggerScanInfo);
14793 return VOS_STATUS_E_NOMEM;
14794 }
14795
14796 pwdiPERRoamTriggerScanInfo->roamScanReq =
14797 pPERRoamTriggerScanReqParams->start;
14798
14799 /* Store Params pass it to WDI */
14800 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
14801 pWdaParams->pWdaContext = pWDA;
14802
14803 /* Store param pointer as passed in by caller */
14804 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
14805 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
14806 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
14807 pWdaParams);
14808
14809 if(IS_WDI_STATUS_FAILURE(status))
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14812 "Failure in Start Roam Candidate trigger Req WDI API" );
14813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14814 vos_mem_free(pWdaParams->wdaMsgParam);
14815 pWdaParams->wdaWdiApiMsgParam = NULL;
14816 pWdaParams->wdaMsgParam = NULL;
14817 }
14818 return CONVERT_WDI2VOS_STATUS(status) ;
14819}
14820#endif
14821
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014822/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014823 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14824 *
14825 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14826 *
14827 * PARAM:
14828 * pWDA: pointer to WDA context
14829 * pReq: pointer to stop batch scan request
14830 */
14831VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14832 tpSpoofMacAddrReqParams pReq)
14833{
14834 WDI_Status wdiStatus;
14835 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14836 tWDA_ReqParams *pWdaParams;
14837
14838 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14839 sizeof(WDI_SpoofMacAddrInfoType));
14840 if(NULL == WDI_SpoofMacAddrInfoParams) {
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14842 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14843 VOS_ASSERT(0);
14844 return VOS_STATUS_E_NOMEM;
14845 }
14846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14847 if(NULL == pWdaParams) {
14848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14849 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014850 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014851 VOS_ASSERT(0);
14852 return VOS_STATUS_E_NOMEM;
14853 }
14854
14855 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14856 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14857
14858 pWdaParams->pWdaContext = pWDA;
14859 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014860 pWdaParams->wdaMsgParam = (void *)pReq;
14861
14862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14863 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14864
Siddharth Bhal171788a2014-09-29 21:02:40 +053014865 /* store Params pass it to WDI */
14866 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14867
14868 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014869 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14870 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014871
14872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14873 {
14874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14875 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14877 vos_mem_free(pWdaParams->wdaMsgParam);
14878 vos_mem_free(pWdaParams);
14879 }
14880
14881 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14882}
14883
c_manjeecfd1efb2015-09-25 19:32:34 +053014884
14885/*
14886 * FUNCTION: WDA_FwrMemDumpRespCallback
14887 * recieves Mgmt Logging init response from FW
14888 */
14889 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14890 void* pUserData)
14891{
14892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14893 tAniFwrDumpReq *pFwrMemDumpReq;
14894 tAniFwrDumpRsp *pFwrMemDumpRsp;
14895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14896 "<------ %s " ,__func__);
14897
14898 if(NULL == pWdaParams)
14899 {
14900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14901 "%s: pWdaParams received NULL", __func__);
14902 VOS_ASSERT(0);
14903 return ;
14904 }
14905
14906 if(NULL == pWdaParams->wdaMsgParam)
14907 {
14908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14909 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14910 VOS_ASSERT(0);
14911 vos_mem_free(pWdaParams);
14912 return ;
14913 }
14914
14915 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14916 if(pFwrMemDumpRsp == NULL)
14917 {
14918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14919 "%s: pFwrMemDumpRsp is NULL", __func__);
14920 VOS_ASSERT(0);
14921 vos_mem_free(pWdaParams);
14922 return ;
14923 }
14924
14925 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14926 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14927
14928 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14929 {
14930 pFwrMemDumpReq->fwMemDumpReqCallback(
14931 pFwrMemDumpReq->fwMemDumpReqContext,
14932 pFwrMemDumpRsp);
14933 }
14934 else
14935 {
14936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14937 "%s: FwrMemDump callback is NULL", __func__);
14938 }
14939
14940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14941 vos_mem_free(pWdaParams->wdaMsgParam);
14942 vos_mem_free(pWdaParams);
14943 vos_mem_free(pFwrMemDumpRsp);
14944
14945 return ;
14946}
14947
14948VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14949 tAniFwrDumpReq* pFwrMemDumpReq)
14950{
14951 VOS_STATUS status = VOS_STATUS_SUCCESS;
14952 WDI_Status wstatus;
14953 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14954 tWDA_ReqParams *pWdaParams ;
14955
14956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14957 "------> %s " ,__func__);
14958 /* Sanity Check*/
14959 if(NULL == pFwrMemDumpReq)
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "%s: pFwrMemDumpReq received NULL", __func__);
14963 VOS_ASSERT(0) ;
14964 return VOS_STATUS_E_FAULT;
14965 }
14966
14967 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14968 if(NULL == pWdiFwrMemDumpReq)
14969 {
14970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14971 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14972 VOS_ASSERT(0);
14973 return VOS_STATUS_E_NOMEM;
14974 }
14975
14976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14977 if(NULL == pWdaParams)
14978 {
14979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14980 "%s: pWdaParams Alloc Failure", __func__);
14981 VOS_ASSERT(0);
14982 vos_mem_free(pWdiFwrMemDumpReq);
14983 return VOS_STATUS_E_NOMEM;
14984 }
14985
14986 /* Store Params pass it to WDI */
14987 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14988 pWdaParams->pWdaContext = pWDA;
14989 /* Store param pointer as passed in by caller */
14990 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14991
14992 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14993 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14994 pWdaParams);
14995
14996 if(IS_WDI_STATUS_FAILURE(wstatus))
14997 {
14998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14999 FL("Fwr Mem Dump Req failed, free all the memory"));
15000 status = CONVERT_WDI2VOS_STATUS(wstatus);
15001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15002 vos_mem_free(pWdaParams->wdaMsgParam);
15003 vos_mem_free(pWdaParams);
15004 pWdaParams->wdaWdiApiMsgParam = NULL;
15005 pWdaParams->wdaMsgParam = NULL;
15006 }
15007
15008 return status;
15009
15010}
15011
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015012/**
15013 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15014 *
15015 * @pWDA: WDA Call back context
15016 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15017 * that holds allowed action frames bitmask
15018 *
15019 * This function sets the allowed action frames that the FW needs to
15020 * handover to host.The Action frames other than the requested ones
15021 * can be dropped in FW
15022 *
15023 * Return: VOS_STATUS enumeration
15024 */
15025VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15026 struct sir_allowed_action_frames *allowed_action_frames)
15027{
15028 WDI_Status status;
15029 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15031 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015032
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015033 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15034 vos_mem_malloc(sizeof
15035 (*wdi_allowed_action_frames));
15036 if (!wdi_allowed_action_frames) {
15037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15038 "%s: VOS MEM Alloc Failure", __func__);
15039 vos_mem_free(allowed_action_frames);
15040 return VOS_STATUS_E_NOMEM;
15041 }
15042
15043 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15044 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15045
15046 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15047 if (WDI_STATUS_PENDING == status) {
15048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15049 FL("pending status received"));
15050 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15051 (WDI_STATUS_SUCCESS != status)) {
15052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15053 FL("Failure in allowed_action_frames API %d"), status);
15054 }
15055
15056 vos_mem_free(wdi_allowed_action_frames);
15057 vos_mem_free(allowed_action_frames);
15058 return CONVERT_WDI2VOS_STATUS(status) ;
15059}
c_manjeecfd1efb2015-09-25 19:32:34 +053015060
Siddharth Bhal171788a2014-09-29 21:02:40 +053015061/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015062 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15063 * Request to WDI.
15064 */
15065VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15066{
15067 v_U8_t staId;
15068
15069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15070
15071 staId = (v_U8_t)params;
15072
15073 /* Pause TL for Sta ID */
15074 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15075}
15076
15077/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015078 * FUNCTION: WDA_McProcessMsg
15079 * Trigger DAL-AL to start CFG download
15080 */
15081VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15082{
15083 VOS_STATUS status = VOS_STATUS_SUCCESS;
15084 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015085 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015086 {
15087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015088 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 VOS_ASSERT(0);
15090 return VOS_STATUS_E_FAILURE;
15091 }
15092
15093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015094 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015095
15096 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15097 if(NULL == pWDA )
15098 {
15099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015100 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015102 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015103 return VOS_STATUS_E_FAILURE;
15104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 /* Process all the WDA messages.. */
15106 switch( pMsg->type )
15107 {
15108 case WNI_CFG_DNLD_REQ:
15109 {
15110 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015111 /* call WDA complete event if config download success */
15112 if( VOS_IS_STATUS_SUCCESS(status) )
15113 {
15114 vos_WDAComplete_cback(pVosContext);
15115 }
15116 else
15117 {
15118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15119 "WDA Config Download failure" );
15120 }
15121 break ;
15122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015123 /*
15124 * Init SCAN request from PE, convert it into DAL format
15125 * and send it to DAL
15126 */
15127 case WDA_INIT_SCAN_REQ:
15128 {
15129 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15130 break ;
15131 }
15132 /* start SCAN request from PE */
15133 case WDA_START_SCAN_REQ:
15134 {
15135 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15136 break ;
15137 }
15138 /* end SCAN request from PE */
15139 case WDA_END_SCAN_REQ:
15140 {
15141 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15142 break ;
15143 }
15144 /* end SCAN request from PE */
15145 case WDA_FINISH_SCAN_REQ:
15146 {
15147 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15148 break ;
15149 }
15150 /* join request from PE */
15151 case WDA_CHNL_SWITCH_REQ:
15152 {
15153 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15154 {
15155 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15156 }
15157 else
15158 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015159 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15160 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15161 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15164 "call ProcessChannelSwitchReq_V1" );
15165 WDA_ProcessChannelSwitchReq_V1(pWDA,
15166 (tSwitchChannelParams*)pMsg->bodyptr) ;
15167 }
15168 else
15169 {
15170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15171 "call ProcessChannelSwitchReq" );
15172 WDA_ProcessChannelSwitchReq(pWDA,
15173 (tSwitchChannelParams*)pMsg->bodyptr) ;
15174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015175 }
15176 break ;
15177 }
15178 /* ADD BSS request from PE */
15179 case WDA_ADD_BSS_REQ:
15180 {
15181 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15182 break ;
15183 }
15184 case WDA_ADD_STA_REQ:
15185 {
15186 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15187 break ;
15188 }
15189 case WDA_DELETE_BSS_REQ:
15190 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015191 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15192 break ;
15193 }
15194 case WDA_DELETE_STA_REQ:
15195 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015196 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15197 break ;
15198 }
15199 case WDA_CONFIG_PARAM_UPDATE_REQ:
15200 {
15201 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15202 break ;
15203 }
15204 case WDA_SET_BSSKEY_REQ:
15205 {
15206 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15207 break ;
15208 }
15209 case WDA_SET_STAKEY_REQ:
15210 {
15211 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15212 break ;
15213 }
15214 case WDA_SET_STA_BCASTKEY_REQ:
15215 {
15216 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15217 break ;
15218 }
15219 case WDA_REMOVE_BSSKEY_REQ:
15220 {
15221 WDA_ProcessRemoveBssKeyReq(pWDA,
15222 (tRemoveBssKeyParams *)pMsg->bodyptr);
15223 break ;
15224 }
15225 case WDA_REMOVE_STAKEY_REQ:
15226 {
15227 WDA_ProcessRemoveStaKeyReq(pWDA,
15228 (tRemoveStaKeyParams *)pMsg->bodyptr);
15229 break ;
15230 }
15231 case WDA_REMOVE_STA_BCASTKEY_REQ:
15232 {
15233 /* TODO: currently UMAC is not sending this request, Add the code for
15234 handling this request when UMAC supports */
15235 break;
15236 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015237#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015238 case WDA_TSM_STATS_REQ:
15239 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015240 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015241 break;
15242 }
15243#endif
15244 case WDA_UPDATE_EDCA_PROFILE_IND:
15245 {
15246 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15247 break;
15248 }
15249 case WDA_ADD_TS_REQ:
15250 {
15251 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15252 break;
15253 }
15254 case WDA_DEL_TS_REQ:
15255 {
15256 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15257 break;
15258 }
15259 case WDA_ADDBA_REQ:
15260 {
15261 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15262 break;
15263 }
15264 case WDA_DELBA_IND:
15265 {
15266 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15267 break;
15268 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015269 case WDA_UPDATE_CHAN_LIST_REQ:
15270 {
15271 WDA_ProcessUpdateChannelList(pWDA,
15272 (tSirUpdateChanList *)pMsg->bodyptr);
15273 break;
15274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015275 case WDA_SET_LINK_STATE:
15276 {
15277 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15278 break;
15279 }
15280 case WDA_GET_STATISTICS_REQ:
15281 {
15282 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15283 break;
15284 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015285#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015286 case WDA_GET_ROAM_RSSI_REQ:
15287 {
15288 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15289 break;
15290 }
15291#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 case WDA_PWR_SAVE_CFG:
15293 {
15294 if(pWDA->wdaState == WDA_READY_STATE)
15295 {
15296 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15297 }
15298 else
15299 {
15300 if(NULL != pMsg->bodyptr)
15301 {
15302 vos_mem_free(pMsg->bodyptr);
15303 }
15304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15305 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15306 }
15307 break;
15308 }
15309 case WDA_ENTER_IMPS_REQ:
15310 {
15311 if(pWDA->wdaState == WDA_READY_STATE)
15312 {
15313 WDA_ProcessEnterImpsReq(pWDA);
15314 }
15315 else
15316 {
15317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15318 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15319 }
15320 break;
15321 }
15322 case WDA_EXIT_IMPS_REQ:
15323 {
15324 if(pWDA->wdaState == WDA_READY_STATE)
15325 {
15326 WDA_ProcessExitImpsReq(pWDA);
15327 }
15328 else
15329 {
15330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15331 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15332 }
15333 break;
15334 }
15335 case WDA_ENTER_BMPS_REQ:
15336 {
15337 if(pWDA->wdaState == WDA_READY_STATE)
15338 {
15339 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15340 }
15341 else
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15344 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15345 }
15346 break;
15347 }
15348 case WDA_EXIT_BMPS_REQ:
15349 {
15350 if(pWDA->wdaState == WDA_READY_STATE)
15351 {
15352 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15353 }
15354 else
15355 {
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15357 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15358 }
15359 break;
15360 }
15361 case WDA_ENTER_UAPSD_REQ:
15362 {
15363 if(pWDA->wdaState == WDA_READY_STATE)
15364 {
15365 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15366 }
15367 else
15368 {
15369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15370 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15371 }
15372 break;
15373 }
15374 case WDA_EXIT_UAPSD_REQ:
15375 {
15376 if(pWDA->wdaState == WDA_READY_STATE)
15377 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015378 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015379 }
15380 else
15381 {
15382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15383 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15384 }
15385 break;
15386 }
15387 case WDA_UPDATE_UAPSD_IND:
15388 {
15389 if(pWDA->wdaState == WDA_READY_STATE)
15390 {
15391 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15392 }
15393 else
15394 {
15395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15396 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15397 }
15398 break;
15399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015400 case WDA_REGISTER_PE_CALLBACK :
15401 {
15402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15403 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15404 /*TODO: store the PE callback */
15405 /* Do Nothing? MSG Body should be freed at here */
15406 if(NULL != pMsg->bodyptr)
15407 {
15408 vos_mem_free(pMsg->bodyptr);
15409 }
15410 break;
15411 }
15412 case WDA_SYS_READY_IND :
15413 {
15414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15415 "Handling msg type WDA_SYS_READY_IND " );
15416 pWDA->wdaState = WDA_READY_STATE;
15417 if(NULL != pMsg->bodyptr)
15418 {
15419 vos_mem_free(pMsg->bodyptr);
15420 }
15421 break;
15422 }
15423 case WDA_BEACON_FILTER_IND :
15424 {
15425 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15426 break;
15427 }
15428 case WDA_BTC_SET_CFG:
15429 {
15430 /*TODO: handle this while dealing with BTC */
15431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15432 "Handling msg type WDA_BTC_SET_CFG " );
15433 /* Do Nothing? MSG Body should be freed at here */
15434 if(NULL != pMsg->bodyptr)
15435 {
15436 vos_mem_free(pMsg->bodyptr);
15437 }
15438 break;
15439 }
15440 case WDA_SIGNAL_BT_EVENT:
15441 {
15442 /*TODO: handle this while dealing with BTC */
15443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15444 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15445 /* Do Nothing? MSG Body should be freed at here */
15446 if(NULL != pMsg->bodyptr)
15447 {
15448 vos_mem_free(pMsg->bodyptr);
15449 }
15450 break;
15451 }
15452 case WDA_CFG_RXP_FILTER_REQ:
15453 {
15454 WDA_ProcessConfigureRxpFilterReq(pWDA,
15455 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15456 break;
15457 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015458 case WDA_MGMT_LOGGING_INIT_REQ:
15459 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015460 WDA_ProcessFWLoggingInitReq(pWDA,
15461 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015462 break;
15463 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015464 case WDA_GET_FRAME_LOG_REQ:
15465 {
15466 WDA_ProcessGetFrameLogReq(pWDA,
15467 (tAniGetFrameLogReq *)pMsg->bodyptr);
15468 break;
15469 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015470 case WDA_START_RSSI_MONITOR_REQ:
15471 {
15472 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15473 break;
15474 }
15475 case WDA_STOP_RSSI_MONITOR_REQ:
15476 {
15477 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15478 break;
15479 }
Karthick Sa35b0692015-08-21 15:57:05 +053015480 case WDA_SEND_LOG_DONE_IND:
15481 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015482 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015483 break;
15484 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015485 case WDA_FATAL_EVENT_LOGS_REQ:
15486 {
15487 WDA_ProcessFatalEventLogsReq(pWDA,
15488 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15489 break;
15490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015491 case WDA_SET_HOST_OFFLOAD:
15492 {
15493 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15494 break;
15495 }
15496 case WDA_SET_KEEP_ALIVE:
15497 {
15498 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15499 break;
15500 }
15501#ifdef WLAN_NS_OFFLOAD
15502 case WDA_SET_NS_OFFLOAD:
15503 {
15504 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15505 break;
15506 }
15507#endif //WLAN_NS_OFFLOAD
15508 case WDA_ADD_STA_SELF_REQ:
15509 {
15510 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15511 break;
15512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015513 case WDA_DEL_STA_SELF_REQ:
15514 {
15515 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15516 break;
15517 }
15518 case WDA_WOWL_ADD_BCAST_PTRN:
15519 {
15520 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15521 break;
15522 }
15523 case WDA_WOWL_DEL_BCAST_PTRN:
15524 {
15525 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15526 break;
15527 }
15528 case WDA_WOWL_ENTER_REQ:
15529 {
15530 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15531 break;
15532 }
15533 case WDA_WOWL_EXIT_REQ:
15534 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015535 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 break;
15537 }
15538 case WDA_TL_FLUSH_AC_REQ:
15539 {
15540 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15541 break;
15542 }
15543 case WDA_SIGNAL_BTAMP_EVENT:
15544 {
15545 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15546 break;
15547 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015548 case WDA_FW_STATS_GET_REQ:
15549 {
15550 WDA_ProcessFWStatsGetReq(pWDA,
15551 (tSirFWStatsGetReq *)pMsg->bodyptr);
15552 break;
15553 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015554#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15555 case WDA_LINK_LAYER_STATS_SET_REQ:
15556 {
15557 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15558 break;
15559 }
15560 case WDA_LINK_LAYER_STATS_GET_REQ:
15561 {
15562 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15563 break;
15564 }
15565 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15566 {
15567 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15568 break;
15569 }
15570#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015571#ifdef WLAN_FEATURE_EXTSCAN
15572 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15573 {
15574 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15575 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15576 break;
15577 }
15578 case WDA_EXTSCAN_START_REQ:
15579 {
15580 WDA_ProcessEXTScanStartReq(pWDA,
15581 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15582 break;
15583 }
15584 case WDA_EXTSCAN_STOP_REQ:
15585 {
15586 WDA_ProcessEXTScanStopReq(pWDA,
15587 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15588 break;
15589 }
15590 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15591 {
15592 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15593 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15594 break;
15595 }
15596 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15597 {
15598 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15599 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15600 break;
15601 }
15602 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15603 {
15604 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15605 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15606 break;
15607 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015608 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15609 {
15610 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15611 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15612 break;
15613 }
15614 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15615 {
15616 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15617 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15618 break;
15619 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015620 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15621 {
15622 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15623 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15624 break;
15625 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015626#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015627#ifdef WDA_UT
15628 case WDA_WDI_EVENT_MSG:
15629 {
15630 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15631 break ;
15632 }
15633#endif
15634 case WDA_UPDATE_BEACON_IND:
15635 {
15636 WDA_ProcessUpdateBeaconParams(pWDA,
15637 (tUpdateBeaconParams *)pMsg->bodyptr);
15638 break;
15639 }
15640 case WDA_SEND_BEACON_REQ:
15641 {
15642 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15643 break;
15644 }
15645 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15646 {
15647 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15648 (tSendProbeRespParams *)pMsg->bodyptr);
15649 break;
15650 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015651#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015652 case WDA_SET_MAX_TX_POWER_REQ:
15653 {
15654 WDA_ProcessSetMaxTxPowerReq(pWDA,
15655 (tMaxTxPowerParams *)pMsg->bodyptr);
15656 break;
15657 }
15658#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015659 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15660 {
15661 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15662 pMsg->bodyptr);
15663 break;
15664 }
schang86c22c42013-03-13 18:41:24 -070015665 case WDA_SET_TX_POWER_REQ:
15666 {
15667 WDA_ProcessSetTxPowerReq(pWDA,
15668 (tSirSetTxPowerReq *)pMsg->bodyptr);
15669 break;
15670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015671 case WDA_SET_P2P_GO_NOA_REQ:
15672 {
15673 WDA_ProcessSetP2PGONOAReq(pWDA,
15674 (tP2pPsParams *)pMsg->bodyptr);
15675 break;
15676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015677 /* timer related messages */
15678 case WDA_TIMER_BA_ACTIVITY_REQ:
15679 {
15680 WDA_BaCheckActivity(pWDA) ;
15681 break ;
15682 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015683
15684 /* timer related messages */
15685 case WDA_TIMER_TRAFFIC_STATS_IND:
15686 {
15687 WDA_TimerTrafficStatsInd(pWDA);
15688 break;
15689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015690#ifdef WLAN_FEATURE_VOWIFI_11R
15691 case WDA_AGGR_QOS_REQ:
15692 {
15693 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15694 break;
15695 }
15696#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015697 case WDA_FTM_CMD_REQ:
15698 {
15699 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15700 break ;
15701 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015702#ifdef FEATURE_OEM_DATA_SUPPORT
15703 case WDA_START_OEM_DATA_REQ:
15704 {
15705 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15706 break;
15707 }
15708#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 /* Tx Complete Time out Indication */
15710 case WDA_TX_COMPLETE_TIMEOUT_IND:
15711 {
15712 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15713 break;
15714 }
15715 case WDA_WLAN_SUSPEND_IND:
15716 {
15717 WDA_ProcessWlanSuspendInd(pWDA,
15718 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15719 break;
15720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015721 case WDA_WLAN_RESUME_REQ:
15722 {
15723 WDA_ProcessWlanResumeReq(pWDA,
15724 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15725 break;
15726 }
15727
15728 case WDA_UPDATE_CF_IND:
15729 {
15730 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15731 pMsg->bodyptr = NULL;
15732 break;
15733 }
15734#ifdef FEATURE_WLAN_SCAN_PNO
15735 case WDA_SET_PNO_REQ:
15736 {
15737 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15738 break;
15739 }
15740 case WDA_UPDATE_SCAN_PARAMS_REQ:
15741 {
15742 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15743 break;
15744 }
15745 case WDA_SET_RSSI_FILTER_REQ:
15746 {
15747 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15748 break;
15749 }
15750#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015751#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015752 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015753 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015754 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015755 break;
15756 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053015757 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
15758 {
15759 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
15760 break;
15761 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015762#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015763 case WDA_SET_TX_PER_TRACKING_REQ:
15764 {
15765 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15766 break;
15767 }
15768
15769#ifdef WLAN_FEATURE_PACKET_FILTERING
15770 case WDA_8023_MULTICAST_LIST_REQ:
15771 {
15772 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15773 break;
15774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015775 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15776 {
15777 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15778 break;
15779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015780 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15781 {
15782 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15783 break;
15784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15786 {
15787 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15788 break;
15789 }
15790#endif // WLAN_FEATURE_PACKET_FILTERING
15791
15792
15793 case WDA_TRANSMISSION_CONTROL_IND:
15794 {
15795 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15796 break;
15797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 case WDA_SET_POWER_PARAMS_REQ:
15799 {
15800 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15801 break;
15802 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015803 case WDA_FW_MEM_DUMP_REQ:
15804 {
15805 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15806 break;
15807 }
15808
Jeff Johnson295189b2012-06-20 16:38:30 -070015809#ifdef WLAN_FEATURE_GTK_OFFLOAD
15810 case WDA_GTK_OFFLOAD_REQ:
15811 {
15812 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15813 break;
15814 }
15815
15816 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15817 {
15818 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15819 break;
15820 }
15821#endif //WLAN_FEATURE_GTK_OFFLOAD
15822
15823 case WDA_SET_TM_LEVEL_REQ:
15824 {
15825 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15826 break;
15827 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015828
Mohit Khanna4a70d262012-09-11 16:30:12 -070015829 case WDA_UPDATE_OP_MODE:
15830 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015831 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15832 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15833 {
15834 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15835 }
15836 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015837 {
15838 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15839 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15840 else
15841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015842 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015843 }
15844 else
15845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015846 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015847 break;
15848 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015849#ifdef WLAN_FEATURE_11W
15850 case WDA_EXCLUDE_UNENCRYPTED_IND:
15851 {
15852 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15853 break;
15854 }
15855#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015856#ifdef FEATURE_WLAN_TDLS
15857 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15858 {
15859 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15860 break;
15861 }
15862#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015863 case WDA_DHCP_START_IND:
15864 {
15865 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15866 break;
15867 }
15868 case WDA_DHCP_STOP_IND:
15869 {
15870 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15871 break;
15872 }
Leo Chang9056f462013-08-01 19:21:11 -070015873#ifdef FEATURE_WLAN_LPHB
15874 case WDA_LPHB_CONF_REQ:
15875 {
15876 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15877 break;
15878 }
15879#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015880 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15881 {
15882 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15883 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15884 break;
15885 }
15886 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15887 {
15888 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15889 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15890 break;
15891 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015892 case WDA_RATE_UPDATE_IND:
15893 {
15894 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15895 break;
15896 }
15897#ifdef WLAN_FEATURE_RMC
15898 case WDA_RMC_RULER_REQ:
15899 {
15900 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15901 break;
15902 }
15903 case WDA_RMC_UPDATE_IND:
15904 {
15905 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15906 break;
15907 }
15908 case WDA_GET_IBSS_PEER_INFO_REQ:
15909 {
15910 WDA_ProcessIbssPeerInfoReq(pWDA,
15911 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15912 break;
15913 }
15914 case WDA_TX_FAIL_MONITOR_IND:
15915 {
15916 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15917 break;
15918 }
15919#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053015920#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15921 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
15922 {
15923 WDA_ProcessPERRoamScanTriggerReq(pWDA,
15924 (tPERRoamScanStart *)pMsg->bodyptr);
15925 break;
15926 }
15927#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053015928#ifdef FEATURE_WLAN_BATCH_SCAN
15929 case WDA_SET_BATCH_SCAN_REQ:
15930 {
15931 WDA_ProcessSetBatchScanReq(pWDA,
15932 (tSirSetBatchScanReq *)pMsg->bodyptr);
15933 break;
15934 }
15935 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15936 {
15937 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15938 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15939 break;
15940 }
15941 case WDA_STOP_BATCH_SCAN_IND:
15942 {
15943 WDA_ProcessStopBatchScanInd(pWDA,
15944 (tSirStopBatchScanInd *)pMsg->bodyptr);
15945 break;
15946 }
c_hpothu92367912014-05-01 15:18:17 +053015947 case WDA_GET_BCN_MISS_RATE_REQ:
15948 WDA_ProcessGetBcnMissRateReq(pWDA,
15949 (tSirBcnMissRateReq *)pMsg->bodyptr);
15950 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015951#endif
15952
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015953 case WDA_HT40_OBSS_SCAN_IND:
15954 {
15955 WDA_ProcessHT40OBSSScanInd(pWDA,
15956 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15957 break;
15958 }
15959 case WDA_HT40_OBSS_STOP_SCAN_IND:
15960 {
15961 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15962 (tANI_U8*)pMsg->bodyptr);
15963 break;
15964 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015965// tdlsoffchan
15966#ifdef FEATURE_WLAN_TDLS
15967 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15968 {
15969 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15970 break;
15971 }
15972#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015973 case WDA_SPOOF_MAC_ADDR_REQ:
15974 {
15975 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15976 break;
15977 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015978 case WDA_ENCRYPT_MSG_REQ:
15979 {
15980 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15981 break;
15982 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015983
15984 case WDA_NAN_REQUEST:
15985 {
15986 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15987 break;
15988 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015989 case WDA_SET_RTS_CTS_HTVHT:
15990 {
15991 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15992 break;
15993 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015994
15995 case WDA_MON_START_REQ:
15996 {
15997 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15998 break;
15999 }
16000 case WDA_MON_STOP_REQ:
16001 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016002 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016003 break;
16004 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016005 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16006 {
16007 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16008 break;
16009 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016010 case WDA_WIFI_CONFIG_REQ:
16011 {
16012 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16013 break;
16014 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016015#ifdef FEATURE_OEM_DATA_SUPPORT
16016 case WDA_START_OEM_DATA_REQ_IND_NEW:
16017 {
16018 WDA_ProcessStartOemDataReqIndNew(pWDA,
16019 (tOemDataReqNewConfig *)pMsg->bodyptr);
16020 break;
16021 }
16022#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016023 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16024 {
16025 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16026 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16027 break;
16028 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016029 case WDA_MODIFY_ROAM_PARAMS_IND:
16030 {
16031 WDA_ProcessBcnMissPenaltyCount(pWDA,
16032 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16033 break;
16034 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016035
16036 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16037 wda_process_set_allowed_action_frames_ind(pWDA,
16038 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16039 break;
16040
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016041 case WDA_PAUSE_TL_IND:
16042 {
16043 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16044 break;
16045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016046 default:
16047 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016049 "No Handling for msg type %x in WDA "
16050 ,pMsg->type);
16051 /* Do Nothing? MSG Body should be freed at here */
16052 if(NULL != pMsg->bodyptr)
16053 {
16054 vos_mem_free(pMsg->bodyptr);
16055 }
16056 //WDA_VOS_ASSERT(0) ;
16057 }
16058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016059 return status ;
16060}
16061
Jeff Johnson295189b2012-06-20 16:38:30 -070016062/*
16063 * FUNCTION: WDA_LowLevelIndCallback
16064 * IND API callback from WDI, send Ind to PE
16065 */
16066void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16067 void* pUserData )
16068{
16069 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16070#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16071 tSirRSSINotification rssiNotification;
16072#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016073 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016074 {
16075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016076 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016077 VOS_ASSERT(0);
16078 return ;
16079 }
16080
16081 switch(wdiLowLevelInd->wdiIndicationType)
16082 {
16083 case WDI_RSSI_NOTIFICATION_IND:
16084 {
16085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16086 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016087#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16088 rssiNotification.bReserved =
16089 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16090 rssiNotification.bRssiThres1NegCross =
16091 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16092 rssiNotification.bRssiThres1PosCross =
16093 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16094 rssiNotification.bRssiThres2NegCross =
16095 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16096 rssiNotification.bRssiThres2PosCross =
16097 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16098 rssiNotification.bRssiThres3NegCross =
16099 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16100 rssiNotification.bRssiThres3PosCross =
16101 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016102 rssiNotification.avgRssi = (v_S7_t)
16103 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 WLANTL_BMPSRSSIRegionChangedNotification(
16105 pWDA->pVosContext,
16106 &rssiNotification);
16107#endif
16108 break ;
16109 }
16110 case WDI_MISSED_BEACON_IND:
16111 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016112 tpSirSmeMissedBeaconInd pMissBeacInd =
16113 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16115 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016116 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016117 if(NULL == pMissBeacInd)
16118 {
16119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16120 "%s: VOS MEM Alloc Failure", __func__);
16121 break;
16122 }
16123 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16124 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16125 pMissBeacInd->bssIdx =
16126 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16127 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016128 break ;
16129 }
16130 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16131 {
16132 /* TODO: Decode Ind and send Ind to PE */
16133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16134 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16135 break ;
16136 }
16137
16138 case WDI_MIC_FAILURE_IND:
16139 {
16140 tpSirSmeMicFailureInd pMicInd =
16141 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16142
16143 if(NULL == pMicInd)
16144 {
16145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016147 break;
16148 }
16149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16150 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016151 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16152 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16153 vos_mem_copy(pMicInd->bssId,
16154 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16155 sizeof(tSirMacAddr));
16156 vos_mem_copy(pMicInd->info.srcMacAddr,
16157 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16158 sizeof(tSirMacAddr));
16159 vos_mem_copy(pMicInd->info.taMacAddr,
16160 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16161 sizeof(tSirMacAddr));
16162 vos_mem_copy(pMicInd->info.dstMacAddr,
16163 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16164 sizeof(tSirMacAddr));
16165 vos_mem_copy(pMicInd->info.rxMacAddr,
16166 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16167 sizeof(tSirMacAddr));
16168 pMicInd->info.multicast =
16169 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16170 pMicInd->info.keyId=
16171 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16172 pMicInd->info.IV1=
16173 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16174 vos_mem_copy(pMicInd->info.TSC,
16175 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016176 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16177 (void *)pMicInd , 0) ;
16178 break ;
16179 }
16180 case WDI_FATAL_ERROR_IND:
16181 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016182 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016183 /* TODO: Decode Ind and send Ind to PE */
16184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16185 "Received WDI_FATAL_ERROR_IND from WDI ");
16186 break ;
16187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016188 case WDI_DEL_STA_IND:
16189 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016190 tpDeleteStaContext pDelSTACtx =
16191 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16192
16193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16194 "Received WDI_DEL_STA_IND from WDI ");
16195 if(NULL == pDelSTACtx)
16196 {
16197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016199 break;
16200 }
16201 vos_mem_copy(pDelSTACtx->addr2,
16202 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16203 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016204 vos_mem_copy(pDelSTACtx->bssId,
16205 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16206 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 pDelSTACtx->assocId =
16208 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16209 pDelSTACtx->reasonCode =
16210 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16211 pDelSTACtx->staId =
16212 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016213 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16214 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016215 break ;
16216 }
16217 case WDI_COEX_IND:
16218 {
16219 tANI_U32 index;
16220 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016221 tSirSmeCoexInd *pSmeCoexInd;
16222
16223 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16224 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16225 {
16226 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16227 {
16228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16229 FL("Coex state: 0x%x coex feature: 0x%x"),
16230 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16231 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16232
16233 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16234 {
16235 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16236 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16237 }
16238 }
16239 break;
16240 }
16241
16242 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016243 if(NULL == pSmeCoexInd)
16244 {
16245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016246 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016247 break;
16248 }
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16250 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016251 /* Message Header */
16252 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16253 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 /* Info from WDI Indication */
16255 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16256 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16257 {
16258 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 /* VOS message wrapper */
16261 vosMsg.type = eWNI_SME_COEX_IND;
16262 vosMsg.bodyptr = (void *)pSmeCoexInd;
16263 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 /* Send message to SME */
16265 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16266 {
16267 /* free the mem and return */
16268 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16269 }
16270 else
16271 {
16272 /* DEBUG */
16273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16274 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16275 pSmeCoexInd->coexIndType,
16276 pSmeCoexInd->coexIndData[0],
16277 pSmeCoexInd->coexIndData[1],
16278 pSmeCoexInd->coexIndData[2],
16279 pSmeCoexInd->coexIndData[3]);
16280 }
16281 break;
16282 }
16283 case WDI_TX_COMPLETE_IND:
16284 {
16285 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16286 /* Calling TxCompleteAck Indication from wda context*/
16287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16288 "Complete Indication received from HAL");
16289 if( pWDA->pAckTxCbFunc )
16290 {
16291 if( VOS_STATUS_SUCCESS !=
16292 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16293 {
16294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16295 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016296 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016297 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016298 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16299 else
16300 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 pWDA->pAckTxCbFunc = NULL;
16302 }
16303 else
16304 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016306 "Tx Complete Indication is received after timeout ");
16307 }
16308 break;
16309 }
Viral Modid86bde22012-12-10 13:09:21 -080016310 case WDI_P2P_NOA_START_IND :
16311 {
16312 tSirP2PNoaStart *pP2pNoaStart =
16313 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16314
16315 if (NULL == pP2pNoaStart)
16316 {
16317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16318 "Memory allocation failure, "
16319 "WDI_P2P_NOA_START_IND not forwarded");
16320 break;
16321 }
16322 pP2pNoaStart->status =
16323 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16324 pP2pNoaStart->bssIdx =
16325 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16326 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16327 (void *)pP2pNoaStart , 0) ;
16328 break;
16329 }
16330
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016331#ifdef FEATURE_WLAN_TDLS
16332 case WDI_TDLS_IND :
16333 {
16334 tSirTdlsInd *pTdlsInd =
16335 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16336
16337 if (NULL == pTdlsInd)
16338 {
16339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16340 "Memory allocation failure, "
16341 "WDI_TDLS_IND not forwarded");
16342 break;
16343 }
16344 pTdlsInd->status =
16345 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16346 pTdlsInd->assocId =
16347 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16348 pTdlsInd->staIdx =
16349 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16350 pTdlsInd->reasonCode =
16351 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16352 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16353 (void *)pTdlsInd , 0) ;
16354 break;
16355 }
16356#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016357 case WDI_P2P_NOA_ATTR_IND :
16358 {
16359 tSirP2PNoaAttr *pP2pNoaAttr =
16360 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16362 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016363 if (NULL == pP2pNoaAttr)
16364 {
16365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16366 "Memory allocation failure, "
16367 "WDI_P2P_NOA_ATTR_IND not forwarded");
16368 break;
16369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016370 pP2pNoaAttr->index =
16371 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16372 pP2pNoaAttr->oppPsFlag =
16373 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16374 pP2pNoaAttr->ctWin =
16375 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16376
16377 pP2pNoaAttr->uNoa1IntervalCnt =
16378 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16379 pP2pNoaAttr->uNoa1Duration =
16380 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16381 pP2pNoaAttr->uNoa1Interval =
16382 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16383 pP2pNoaAttr->uNoa1StartTime =
16384 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016385 pP2pNoaAttr->uNoa2IntervalCnt =
16386 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16387 pP2pNoaAttr->uNoa2Duration =
16388 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16389 pP2pNoaAttr->uNoa2Interval =
16390 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16391 pP2pNoaAttr->uNoa2StartTime =
16392 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016393 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16394 (void *)pP2pNoaAttr , 0) ;
16395 break;
16396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016397#ifdef FEATURE_WLAN_SCAN_PNO
16398 case WDI_PREF_NETWORK_FOUND_IND:
16399 {
16400 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016401 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16402 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16403 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16404 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16405
Jeff Johnson295189b2012-06-20 16:38:30 -070016406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16407 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016408 if (NULL == pPrefNetworkFoundInd)
16409 {
16410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16411 "Memory allocation failure, "
16412 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016413 if (NULL !=
16414 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16415 {
16416 wpalMemoryFree(
16417 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16418 );
16419 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 break;
16422 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016423 /* Message Header */
16424 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016425 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016426
16427 /* Info from WDI Indication */
16428 pPrefNetworkFoundInd->ssId.length =
16429 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016430 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016431 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16432 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16433 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016434 if (NULL !=
16435 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16436 {
16437 pPrefNetworkFoundInd->frameLength =
16438 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16439 vos_mem_copy( pPrefNetworkFoundInd->data,
16440 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16441 pPrefNetworkFoundInd->frameLength);
16442 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16443 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16444 }
16445 else
16446 {
16447 pPrefNetworkFoundInd->frameLength = 0;
16448 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016449 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016450 /* VOS message wrapper */
16451 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16452 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16453 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016454 /* Send message to SME */
16455 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16456 {
16457 /* free the mem and return */
16458 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016460 break;
16461 }
16462#endif // FEATURE_WLAN_SCAN_PNO
16463
16464#ifdef WLAN_WAKEUP_EVENTS
16465 case WDI_WAKE_REASON_IND:
16466 {
16467 vos_msg_t vosMsg;
16468 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16469 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16470 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16471
16472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016473 "[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 -070016474 wdiLowLevelInd->wdiIndicationType,
16475 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16476 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16477 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16478
16479 if (NULL == pWakeReasonInd)
16480 {
16481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16482 "Memory allocation failure, "
16483 "WDI_WAKE_REASON_IND not forwarded");
16484 break;
16485 }
16486
16487 vos_mem_zero(pWakeReasonInd, allocSize);
16488
16489 /* Message Header */
16490 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16491 pWakeReasonInd->mesgLen = allocSize;
16492
16493 /* Info from WDI Indication */
16494 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16495 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16496 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16497 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16498 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16499 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16500 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16501 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16502
16503 /* VOS message wrapper */
16504 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16505 vosMsg.bodyptr = (void *) pWakeReasonInd;
16506 vosMsg.bodyval = 0;
16507
16508 /* Send message to SME */
16509 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16510 {
16511 /* free the mem and return */
16512 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16513 }
16514
16515 break;
16516 }
16517#endif // WLAN_WAKEUP_EVENTS
16518
16519 case WDI_TX_PER_HIT_IND:
16520 {
16521 vos_msg_t vosMsg;
16522 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16523 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16524 /* VOS message wrapper */
16525 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16526 vosMsg.bodyptr = NULL;
16527 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016528 /* Send message to SME */
16529 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16530 {
16531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16532 }
16533 break;
16534 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016535#ifdef WLAN_FEATURE_RMC
16536 case WDI_TX_FAIL_IND:
16537 {
16538 if (pWDA->txFailIndCallback)
16539 {
16540 pWDA->txFailIndCallback(
16541 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16542 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16543 }
16544 break;
16545 }
16546#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016547
Leo Chang9056f462013-08-01 19:21:11 -070016548#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016549 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016550 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016551 vos_msg_t vosMsg;
16552 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016553
Leo Changd9df8aa2013-09-26 13:32:26 -070016554 lphbInd =
16555 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16556 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016557 {
16558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16559 "%s: LPHB IND buffer alloc Fail", __func__);
16560 return ;
16561 }
16562
Leo Changd9df8aa2013-09-26 13:32:26 -070016563 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016564 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016565 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016566 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016567 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016568 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16569
16570 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016571 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016572 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16573
Leo Changd9df8aa2013-09-26 13:32:26 -070016574 vosMsg.type = eWNI_SME_LPHB_IND;
16575 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016576 vosMsg.bodyval = 0;
16577 /* Send message to SME */
16578 if (VOS_STATUS_SUCCESS !=
16579 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16580 {
16581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16582 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016583 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016584 }
16585 break;
16586 }
16587#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016588 case WDI_PERIODIC_TX_PTRN_FW_IND:
16589 {
16590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16591 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16592 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16593 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16594 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16595 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16596 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16597
16598 break;
16599 }
Leo Chang9056f462013-08-01 19:21:11 -070016600
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016601 case WDI_IBSS_PEER_INACTIVITY_IND:
16602 {
16603 tSirIbssPeerInactivityInd *pIbssInd =
16604 (tSirIbssPeerInactivityInd *)
16605 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16606
16607 if (NULL == pIbssInd)
16608 {
16609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16610 "Memory allocation failure, "
16611 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16612 break;
16613 }
16614
16615 pIbssInd->bssIdx =
16616 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16617 pIbssInd->staIdx =
16618 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16619 vos_mem_copy(pIbssInd->peerAddr,
16620 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16621 sizeof(tSirMacAddr));
16622 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16623 break;
16624 }
16625
Abhishek Singh00b71972016-01-07 10:51:04 +053016626#ifdef WLAN_FEATURE_RMC
16627 case WDI_RMC_RULER_PICK_NEW :
16628 {
16629 tSirRmcUpdateInd *pRmcUpdateInd =
16630 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16631
16632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16633 "Received WDI_RMC_UPDATE_IND from WDI");
16634 if (NULL == pRmcUpdateInd)
16635 {
16636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16637 "Memory allocation failure, "
16638 "WDI_RMC_UPDATE_IND not forwarded");
16639 break;
16640 }
16641
16642 pRmcUpdateInd->indication =
16643 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16644 pRmcUpdateInd->role =
16645 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16646
16647 /* Copy the mcast transmitter which should be us */
16648 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16649 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16650 mcastTransmitter,
16651 sizeof(tSirMacAddr));
16652 /* Copy the mcast group address */
16653 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16654 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16655 sizeof(tSirMacAddr));
16656 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16657 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16658 sizeof(tSirMacAddr));
16659 vos_mem_copy(pRmcUpdateInd->ruler,
16660 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16661 sizeof(pRmcUpdateInd->ruler));
16662
16663 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16664 break;
16665 }
16666#endif /* WLAN_FEATURE_RMC */
16667
Rajeev79dbe4c2013-10-05 11:03:42 +053016668#ifdef FEATURE_WLAN_BATCH_SCAN
16669 case WDI_BATCH_SCAN_RESULT_IND:
16670 {
16671 void *pBatchScanResult;
16672 void *pCallbackContext;
16673 tpAniSirGlobal pMac;
16674
16675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16676 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16677
16678 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016679 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016680 {
16681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16682 "%s:pWDA is NULL", __func__);
16683 VOS_ASSERT(0);
16684 return;
16685 }
16686
16687 pBatchScanResult =
16688 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16689 if (NULL == pBatchScanResult)
16690 {
16691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16692 "%s:Batch scan result from FW is null can't invoke HDD callback",
16693 __func__);
16694 VOS_ASSERT(0);
16695 return;
16696 }
16697
16698 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16699 if (NULL == pMac)
16700 {
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16702 "%s:pMac is NULL", __func__);
16703 VOS_ASSERT(0);
16704 return;
16705 }
16706
16707 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16708 /*call hdd callback with set batch scan response data*/
16709 if(pMac->pmc.batchScanResultCallback)
16710 {
16711 pMac->pmc.batchScanResultCallback(pCallbackContext,
16712 pBatchScanResult);
16713 }
16714 else
16715 {
16716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16717 "%s:HDD callback is null", __func__);
16718 VOS_ASSERT(0);
16719 }
16720 break;
16721 }
16722#endif
16723
Leo Chang0b0e45a2013-12-15 15:18:55 -080016724#ifdef FEATURE_WLAN_CH_AVOID
16725 case WDI_CH_AVOID_IND:
16726 {
16727 vos_msg_t vosMsg;
16728 tSirChAvoidIndType *chAvoidInd;
16729
16730 chAvoidInd =
16731 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16732 if (NULL == chAvoidInd)
16733 {
16734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16735 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16736 return ;
16737 }
16738
16739 chAvoidInd->avoidRangeCount =
16740 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16741 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16742 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16743 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16744
16745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16746 "%s : WDA CH avoid notification", __func__);
16747
16748 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16749 vosMsg.bodyptr = chAvoidInd;
16750 vosMsg.bodyval = 0;
16751 /* Send message to SME */
16752 if (VOS_STATUS_SUCCESS !=
16753 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16754 {
16755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16756 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16757 vos_mem_free(chAvoidInd);
16758 }
16759 break;
16760 }
16761#endif /* FEATURE_WLAN_CH_AVOID */
16762
Sunil Duttbd736ed2014-05-26 21:19:41 +053016763#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16764 case WDI_LL_STATS_RESULTS_IND:
16765 {
16766 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016767 tpAniSirGlobal pMac;
16768
16769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16770 "Received WDI_LL_STATS_RESULTS_IND from FW");
16771
16772 /*sanity check*/
16773 if (NULL == pWDA)
16774 {
16775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16776 "%s:pWDA is NULL", __func__);
16777 VOS_ASSERT(0);
16778 return;
16779 }
16780
16781 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016782 (void *)wdiLowLevelInd->
16783 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016784 if (NULL == pLinkLayerStatsInd)
16785 {
16786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16787 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16788 __func__);
16789 VOS_ASSERT(0);
16790 return;
16791 }
16792
16793 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16794 if (NULL == pMac)
16795 {
16796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16797 "%s:pMac is NULL", __func__);
16798 VOS_ASSERT(0);
16799 return;
16800 }
16801
Dino Mycled3d50022014-07-07 12:58:25 +053016802 /* call hdd callback with Link Layer Statistics.
16803 * vdev_id/ifacId in link_stats_results will be
16804 * used to retrieve the correct HDD context
16805 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016806 if (pMac->sme.pLinkLayerStatsIndCallback)
16807 {
Dino Mycled3d50022014-07-07 12:58:25 +053016808 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016809 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016810 pLinkLayerStatsInd,
16811 wdiLowLevelInd->
16812 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016813 }
16814 else
16815 {
16816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16817 "%s:HDD callback is null", __func__);
16818 }
16819 break;
16820 }
16821#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16822
Dino Mycle41bdc942014-06-10 11:30:24 +053016823#ifdef WLAN_FEATURE_EXTSCAN
16824 case WDI_EXTSCAN_PROGRESS_IND:
16825 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16826 case WDI_EXTSCAN_SCAN_RESULT_IND:
16827 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016828 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016829 {
16830 void *pEXTScanData;
16831 void *pCallbackContext;
16832 tpAniSirGlobal pMac;
16833 tANI_U16 indType;
16834
16835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16836 "Received WDI_EXTSCAN Indications from FW");
16837 /*sanity check*/
16838 if (NULL == pWDA)
16839 {
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16841 "%s:pWDA is NULL", __func__);
16842 VOS_ASSERT(0);
16843 return;
16844 }
16845 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16846 {
16847 indType = WDA_EXTSCAN_PROGRESS_IND;
16848
16849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16850 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16851 }
16852 if (wdiLowLevelInd->wdiIndicationType ==
16853 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16854 {
16855 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16856
16857 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16858 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16859 }
16860 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16861 {
16862 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16863
16864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16865 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16866 }
16867 if (wdiLowLevelInd->wdiIndicationType ==
16868 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16869 {
16870 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16871
16872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16873 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16874 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016875 if (wdiLowLevelInd->wdiIndicationType ==
16876 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16877 {
16878 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16879
16880 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16881 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16882 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016883
16884 pEXTScanData =
16885 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16886 if (NULL == pEXTScanData)
16887 {
16888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16889 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16890 __func__);
16891 VOS_ASSERT(0);
16892 return;
16893 }
16894
16895 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16896 if (NULL == pMac)
16897 {
16898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16899 "%s:pMac is NULL", __func__);
16900 VOS_ASSERT(0);
16901 return;
16902 }
16903
16904 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16905
16906 if(pMac->sme.pEXTScanIndCb)
16907 {
16908 pMac->sme.pEXTScanIndCb(pCallbackContext,
16909 indType,
16910 pEXTScanData);
16911 }
16912 else
16913 {
16914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16915 "%s:HDD callback is null", __func__);
16916 }
16917 break;
16918 }
16919#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016920 case WDI_DEL_BA_IND:
16921 {
16922 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016923 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016924
16925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16926 "Received WDI_DEL_BA_IND from WDI ");
16927 if(NULL == pDelBAInd)
16928 {
16929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16930 "%s: VOS MEM Alloc Failure", __func__);
16931 break;
16932 }
16933 vos_mem_copy(pDelBAInd->peerMacAddr,
16934 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16935 sizeof(tSirMacAddr));
16936 vos_mem_copy(pDelBAInd->bssId,
16937 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16938 sizeof(tSirMacAddr));
16939 pDelBAInd->staIdx =
16940 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16941 pDelBAInd->baTID =
16942 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16943 pDelBAInd->baDirection =
16944 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16945 pDelBAInd->reasonCode =
16946 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16947
16948 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16949 (void *)pDelBAInd , 0) ;
16950 break;
16951 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016952 case WDI_NAN_EVENT_IND:
16953 {
16954 vos_msg_t vosMsg;
16955 tpSirNanEvent pSirNanEvent = NULL;
16956
16957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16958 "Received WDI_NAN_EVENT");
16959
16960 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16961 - sizeof( pSirNanEvent->event_data)
16962 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16963
16964 if (NULL == pSirNanEvent)
16965 {
16966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16967 "%s: VOS MEM Alloc Failure", __func__);
16968 VOS_ASSERT(0) ;
16969 break;
16970 }
16971
16972 pSirNanEvent->event_data_len =
16973 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16974
16975 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16976 {
16977 vos_mem_copy( pSirNanEvent->event_data,
16978 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16979 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16980 }
16981
16982 /* VOS message wrapper */
16983 vosMsg.type = eWNI_SME_NAN_EVENT;
16984 vosMsg.bodyptr = pSirNanEvent;
16985 vosMsg.bodyval = 0;
16986
16987 /* Send message to SME */
16988 if (VOS_STATUS_SUCCESS
16989 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16990 {
16991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16992 "post eWNI_SME_NAN_EVENT to SME Failed");
16993 vos_mem_free(pSirNanEvent);
16994 }
16995 break;
16996 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016997 case WDI_LOST_LINK_PARAMS_IND:
16998 {
16999 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17000 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017001
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017002 if (NULL == pLostLinkParamInd)
17003 {
17004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17005 "%s: VOS MEM Alloc Failure", __func__);
17006 break;
17007 }
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17009 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17010
17011 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17012 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17013 pLostLinkParamInd->info.bssIdx =
17014 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17015 pLostLinkParamInd->info.rssi =
17016 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17017 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17018 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17019 sizeof(tSirMacAddr));
17020 pLostLinkParamInd->info.linkFlCnt =
17021 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17022 pLostLinkParamInd->info.linkFlTx =
17023 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17024 pLostLinkParamInd->info.lastDataRate =
17025 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17026 pLostLinkParamInd->info.rsvd1 =
17027 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17028 pLostLinkParamInd->info.rsvd2 =
17029 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17030 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17031 (void *)pLostLinkParamInd , 0) ;
17032 break;
17033 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017034 case WDI_RSSI_BREACHED_IND:
17035 {
17036 WDI_RssiBreachedIndType *pRssiBreachedInd;
17037 tpAniSirGlobal pMac;
17038
17039 pRssiBreachedInd =
17040 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17041 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17042 "Received WDI_RSSI_BREACHED_IND from FW");
17043
17044 vos_mem_copy(pRssiBreachedInd,
17045 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17046 sizeof(WDI_RssiBreachedIndType));
17047
17048 /*sanity check*/
17049 if (NULL == pWDA)
17050 {
17051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17052 "%s:pWDA is NULL", __func__);
17053 vos_mem_free(pRssiBreachedInd);
17054 VOS_ASSERT(0);
17055 return;
17056 }
17057
17058 if (NULL == pRssiBreachedInd)
17059 {
17060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17061 "%s:Breach indication from FW is null can't invoke HDD callback",
17062 __func__);
17063 VOS_ASSERT(0);
17064 return;
17065 }
17066
17067 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17068 if (NULL == pMac)
17069 {
17070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17071 "%s:pMac is NULL", __func__);
17072 VOS_ASSERT(0);
17073 vos_mem_free(pRssiBreachedInd);
17074 return;
17075 }
17076
17077 if (pMac->sme.rssiThresholdBreachedCb)
17078 {
17079 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17080 }
17081 else
17082 {
17083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17084 "%s:HDD callback is null", __func__);
17085 }
17086 vos_mem_free(pRssiBreachedInd);
17087 break;
17088 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017089#ifdef FEATURE_OEM_DATA_SUPPORT
17090 case WDI_START_OEM_DATA_RSP_IND_NEW:
17091 {
17092 void *pCallbackContext;
17093 tpAniSirGlobal pMac;
17094 tANI_U16 indType;
17095 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017096 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017097
17098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17099 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17100
17101 /*sanity check*/
17102 if (NULL == pWDA)
17103 {
17104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17105 "%s:pWDA is NULL", __func__);
17106 VOS_ASSERT(0);
17107 return;
17108 }
17109
17110 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17111 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017112 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17113 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017114 if (NULL == pOemRspNewIndData)
17115 {
17116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17117 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17118 __func__);
17119 VOS_ASSERT(0);
17120 return;
17121 }
17122
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017123 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17124 OemRspNewLen;
17125
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017126 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17127 if (NULL == pMac)
17128 {
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17130 "%s:pMac is NULL", __func__);
17131 VOS_ASSERT(0);
17132 return;
17133 }
17134
17135 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17136
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17138 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17139
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017140 if(pMac->sme.pOemDataIndCb)
17141 {
17142 pMac->sme.pOemDataIndCb(pCallbackContext,
17143 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017144 pOemRspNewIndData,
17145 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017146 }
17147 else
17148 {
17149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17150 "%s:HDD callback is null", __func__);
17151 }
17152 break;
17153 }
17154#endif /* FEATURE_OEM_DATA_SUPPORT */
17155
Jeff Johnson295189b2012-06-20 16:38:30 -070017156 default:
17157 {
17158 /* TODO error */
17159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17160 "Received UNKNOWN Indication from WDI ");
17161 }
17162 }
17163 return ;
17164}
17165
Jeff Johnson295189b2012-06-20 16:38:30 -070017166/*
17167 * BA related processing in WDA.
17168 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017169void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17170 void* pUserData)
17171{
17172 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17173 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017174 if(NULL == pWdaParams)
17175 {
17176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017178 VOS_ASSERT(0) ;
17179 return ;
17180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017181 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017182 vos_mem_free(pWdaParams->wdaMsgParam) ;
17183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17184 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017187 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17188 {
17189 tANI_U8 i = 0 ;
17190 tBaActivityInd *baActivityInd = NULL ;
17191 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17192 tANI_U8 allocSize = sizeof(tBaActivityInd)
17193 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17194 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17195 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017196 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017197 if(NULL == baActivityInd)
17198 {
17199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017201 VOS_ASSERT(0) ;
17202 return;
17203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017204 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17205 sizeof(tSirMacAddr)) ;
17206 baActivityInd->baCandidateCnt = baCandidateCount ;
17207
17208 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17209 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17210
17211 for(i = 0 ; i < baCandidateCount ; i++)
17212 {
17213 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017214 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17215 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017216 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17217 {
17218 baCandidate->baInfo[tid].fBaEnable =
17219 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17220 baCandidate->baInfo[tid].startingSeqNum =
17221 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17222 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017223 wdiBaCandidate++ ;
17224 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017226 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17227 }
17228 else
17229 {
17230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17231 "BA Trigger RSP with Failure received ");
17232 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017233 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017234}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017235
17236
17237/*
17238 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17239 * during MCC
17240 */
17241void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17242{
17243 wpt_uint32 enabled;
17244 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17245 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17246 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17247
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017248 if (NULL == pMac )
17249 {
17250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17251 "%s: Invoked with invalid MAC context ", __func__ );
17252 VOS_ASSERT(0);
17253 return;
17254 }
17255
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017256 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17257 != eSIR_SUCCESS)
17258 {
17259 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17260 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17261 return;
17262 }
17263
17264 if(!enabled)
17265 {
17266 return;
17267 }
17268
17269 if(NULL == pWDA)
17270 {
17271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17272 "%s:WDA context is NULL", __func__);
17273 VOS_ASSERT(0);
17274 return;
17275 }
17276
17277 if(activate)
17278 {
17279 if( VOS_STATUS_SUCCESS !=
17280 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17281 {
17282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17283 "Traffic Stats Timer Start Failed ");
17284 return;
17285 }
17286 WDI_DS_ActivateTrafficStats();
17287 }
17288 else
17289 {
17290 WDI_DS_DeactivateTrafficStats();
17291 WDI_DS_ClearTrafficStats();
17292
17293 if( VOS_STATUS_SUCCESS !=
17294 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17295 {
17296 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17297 "Traffic Stats Timer Stop Failed ");
17298 return;
17299 }
17300 }
17301}
17302
17303/*
17304 * Traffic Stats Timer handler
17305 */
17306void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17307{
17308 WDI_Status wdiStatus;
17309 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17310 WDI_TrafficStatsIndType trafficStatsIndParams;
17311 wpt_uint32 length, enabled;
17312 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17313
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017314 if (NULL == pMac )
17315 {
17316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17317 "%s: Invoked with invalid MAC context ", __func__ );
17318 VOS_ASSERT(0);
17319 return;
17320 }
17321
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017322 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17323 != eSIR_SUCCESS)
17324 {
17325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17326 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17327 return;
17328 }
17329
17330 if(!enabled)
17331 {
17332 WDI_DS_DeactivateTrafficStats();
17333 return;
17334 }
17335
17336 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17337
17338 if(pWdiTrafficStats != NULL)
17339 {
17340 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17341 trafficStatsIndParams.length = length;
17342 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017343 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017344 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17345 trafficStatsIndParams.pUserData = pWDA;
17346
17347 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17348
17349 if(WDI_STATUS_PENDING == wdiStatus)
17350 {
17351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17352 "Pending received for %s:%d ",__func__,__LINE__ );
17353 }
17354 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17355 {
17356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17357 "Failure in %s:%d ",__func__,__LINE__ );
17358 }
17359
17360 WDI_DS_ClearTrafficStats();
17361 }
17362 else
17363 {
17364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17365 "pWdiTrafficStats is Null");
17366 }
17367
17368 if( VOS_STATUS_SUCCESS !=
17369 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17370 {
17371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17372 "Traffic Stats Timer Start Failed ");
17373 return;
17374 }
17375}
17376
Jeff Johnson295189b2012-06-20 16:38:30 -070017377/*
17378 * BA Activity check timer handler
17379 */
17380void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17381{
17382 tANI_U8 curSta = 0 ;
17383 tANI_U8 tid = 0 ;
17384 tANI_U8 size = 0 ;
17385 tANI_U8 baCandidateCount = 0 ;
17386 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017387 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017388 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017389 tpAniSirGlobal pMac;
17390
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017391 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017392 {
17393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017394 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017395 VOS_ASSERT(0);
17396 return ;
17397 }
17398 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17399 {
17400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17401 "Inconsistent STA entries in WDA");
17402 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017403 }
17404 if(NULL == pWDA->pVosContext)
17405 {
17406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17407 "%s: pVosContext is NULL",__func__);
17408 VOS_ASSERT(0);
17409 return ;
17410 }
17411 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017412 if(NULL == pMac)
17413 {
17414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17415 "%s: pMac is NULL",__func__);
17416 VOS_ASSERT(0);
17417 return ;
17418 }
17419
Abhishek Singh0644e482014-10-06 18:38:23 +053017420 if (wlan_cfgGetInt(pMac,
17421 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17422 eSIR_SUCCESS)
17423 {
17424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17425 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17426 val = 0;
17427 }
17428
Jeff Johnson295189b2012-06-20 16:38:30 -070017429 /* walk through all STA entries and find out TX packet count */
17430 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17431 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017432 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017433#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017434 // We can only do BA on "hard" STAs.
17435 if (!(IS_HWSTA_IDX(curSta)))
17436 {
17437 continue;
17438 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017439#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017440 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17441 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017442 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017443 tANI_U32 txPktCount = 0 ;
17444 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017445 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017446 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17447 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017448 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17449 curSta, tid, &txPktCount)))
17450 {
17451#if 0
17452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17453 "************* %d:%d, %d ",curSta, txPktCount,
17454 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17455#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017456 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17457 (currentOperChan <= SIR_11B_CHANNEL_END)))
17458 {
17459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17460 "%s: BTC disabled aggregation - dont start "
17461 "TX ADDBA req",__func__);
17462 }
17463 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017464 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053017465 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17466 pWDA->wdaGlobalSystemRole) && txPktCount )
17467 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17468 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017469 {
17470 /* get prepare for sending message to HAL */
17471 //baCandidate[baCandidateCount].staIdx = curSta ;
17472 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17473 newBaCandidate = WDA_ENABLE_BA ;
17474 }
17475 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17476 }
17477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017478 /* fill the entry for all the sta with given TID's */
17479 if(WDA_ENABLE_BA == newBaCandidate)
17480 {
17481 /* move to next BA candidate */
17482 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17483 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17484 baCandidateCount++ ;
17485 newBaCandidate = WDA_DISABLE_BA ;
17486 }
17487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017488 /* prepare and send message to hal */
17489 if( 0 < baCandidateCount)
17490 {
17491 WDI_Status status = WDI_STATUS_SUCCESS ;
17492 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17493 tWDA_ReqParams *pWdaParams =
17494 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017495 if(NULL == pWdaParams)
17496 {
17497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017499 VOS_ASSERT(0) ;
17500 return;
17501 }
17502 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17503 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17504 if(NULL == wdiTriggerBaReq)
17505 {
17506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017508 VOS_ASSERT(0) ;
17509 vos_mem_free(pWdaParams);
17510 return;
17511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017512 do
17513 {
17514 WDI_TriggerBAReqinfoType *triggerBaInfo =
17515 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17516 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17517 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17518 * for each request */
17519 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17520 triggerBaInfo->ucBASessionID = 0;
17521 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17522 } while(0) ;
17523 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
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 pWdaParams->pWdaContext = pWDA;
17527 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17528 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017529 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017530 WDA_TriggerBaReqCallback, pWdaParams) ;
17531 if(IS_WDI_STATUS_FAILURE(status))
17532 {
17533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17534 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17535 vos_mem_free(pWdaParams->wdaMsgParam) ;
17536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17537 vos_mem_free(pWdaParams) ;
17538 }
17539 }
17540 else
17541 {
17542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17543 "There is no TID for initiating BA");
17544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017545 if( VOS_STATUS_SUCCESS !=
17546 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17547 {
17548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17549 "BA Activity Timer Stop Failed ");
17550 return ;
17551 }
17552 if( VOS_STATUS_SUCCESS !=
17553 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17554 {
17555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17556 "BA Activity Timer Start Failed ");
17557 return;
17558 }
17559 return ;
17560}
Jeff Johnson295189b2012-06-20 16:38:30 -070017561/*
17562 * WDA common routine to create timer used by WDA.
17563 */
17564static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17565{
Jeff Johnson295189b2012-06-20 16:38:30 -070017566 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17567 tANI_U32 val = 0 ;
17568 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17569
17570 if(NULL == pMac)
17571 {
17572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017573 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017574 VOS_ASSERT(0);
17575 return VOS_STATUS_E_FAILURE;
17576 }
17577 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17578 != eSIR_SUCCESS)
17579 {
17580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17581 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17582 return VOS_STATUS_E_FAILURE;
17583 }
17584 val = SYS_MS_TO_TICKS(val) ;
17585
17586 /* BA activity check timer */
17587 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17588 "BA Activity Check timer", WDA_TimerHandler,
17589 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17590 if(status != TX_SUCCESS)
17591 {
17592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17593 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017594 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017596 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017597 /* Tx Complete Timeout timer */
17598 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17599 "Tx Complete Check timer", WDA_TimerHandler,
17600 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017601 if(status != TX_SUCCESS)
17602 {
17603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17604 "Unable to create Tx Complete Timeout timer");
17605 /* Destroy timer of BA activity check timer */
17606 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17607 if(status != TX_SUCCESS)
17608 {
17609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17610 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017611 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017612 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017613 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017614 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017615
17616 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17617
17618 /* Traffic Stats timer */
17619 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17620 "Traffic Stats timer", WDA_TimerHandler,
17621 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17622 if(status != TX_SUCCESS)
17623 {
17624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17625 "Unable to create traffic stats timer");
17626 /* Destroy timer of BA activity check timer */
17627 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17628 if(status != TX_SUCCESS)
17629 {
17630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17631 "Unable to Destroy BA activity timer");
17632 }
17633 /* Destroy timer of tx complete timer */
17634 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17635 if(status != TX_SUCCESS)
17636 {
17637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17638 "Unable to Tx complete timer");
17639 }
17640 return VOS_STATUS_E_FAILURE ;
17641 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017642 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017643}
Jeff Johnson295189b2012-06-20 16:38:30 -070017644/*
17645 * WDA common routine to destroy timer used by WDA.
17646 */
17647static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17648{
17649 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017650 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17651 if(status != TX_SUCCESS)
17652 {
17653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17654 "Unable to Destroy Tx Complete Timeout timer");
17655 return eSIR_FAILURE ;
17656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017657 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17658 if(status != TX_SUCCESS)
17659 {
17660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17661 "Unable to Destroy BA activity timer");
17662 return eSIR_FAILURE ;
17663 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017664 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17665 if(status != TX_SUCCESS)
17666 {
17667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17668 "Unable to Destroy traffic stats timer");
17669 return eSIR_FAILURE ;
17670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017671 return eSIR_SUCCESS ;
17672}
Jeff Johnson295189b2012-06-20 16:38:30 -070017673/*
17674 * WDA timer handler.
17675 */
17676void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17677{
17678 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17679 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017680 /*
17681 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17682 */
17683 wdaMsg.type = timerInfo ;
17684 wdaMsg.bodyptr = NULL;
17685 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017686 /* post the message.. */
17687 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17688 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17689 {
17690 vosStatus = VOS_STATUS_E_BADMSG;
17691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017692}
Jeff Johnson295189b2012-06-20 16:38:30 -070017693/*
17694 * WDA Tx Complete timeout Indication.
17695 */
17696void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17697{
17698 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017699 tpSirTxBdStatus txBdStatus = {0};
17700
Jeff Johnson295189b2012-06-20 16:38:30 -070017701 if( pWDA->pAckTxCbFunc )
17702 {
17703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017704 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017705 /*Indicate failure*/
17706 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017707 pWDA->pAckTxCbFunc = NULL;
17708 }
17709 else
17710 {
17711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017712 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017713 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017714}
Jeff Johnson295189b2012-06-20 16:38:30 -070017715/*
17716 * WDA Set REG Domain to VOS NV
17717 */
Abhishek Singha306a442013-11-07 18:39:01 +053017718eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17719 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017720{
Abhishek Singha306a442013-11-07 18:39:01 +053017721 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017722 {
17723 return eHAL_STATUS_INVALID_PARAMETER;
17724 }
17725 return eHAL_STATUS_SUCCESS;
17726}
Jeff Johnson295189b2012-06-20 16:38:30 -070017727
Jeff Johnson295189b2012-06-20 16:38:30 -070017728#ifdef FEATURE_WLAN_SCAN_PNO
17729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017730 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017731 *
17732 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017733void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017734{
17735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017736 tSirPNOScanReq *pPNOScanReqParams;
17737
Jeff Johnson295189b2012-06-20 16:38:30 -070017738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017739 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017740 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017741 {
17742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017743 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017744 VOS_ASSERT(0) ;
17745 return ;
17746 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017747
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017748 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17749 if(pPNOScanReqParams->statusCallback)
17750 {
17751 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17752 (status == WDI_STATUS_SUCCESS) ?
17753 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17754 }
17755
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017756 if (pPNOScanReqParams->enable == 1)
17757 {
17758 if (pPNOScanReqParams->aNetworks)
17759 vos_mem_free(pPNOScanReqParams->aNetworks);
17760 if (pPNOScanReqParams->p24GProbeTemplate)
17761 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17762 if (pPNOScanReqParams->p5GProbeTemplate)
17763 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17764 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17766 vos_mem_free(pWdaParams->wdaMsgParam);
17767 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017768
17769 return ;
17770}
Jeff Johnson295189b2012-06-20 16:38:30 -070017771/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017772 * FUNCTION: WDA_PNOScanReqCallback
17773 * Free memory.
17774 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17775 */
17776void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017777{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017779 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017780
17781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17782 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17783
17784 if(NULL == pWdaParams)
17785 {
17786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17787 "%s: pWdaParams received NULL", __func__);
17788 VOS_ASSERT(0);
17789 return;
17790 }
17791
17792 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17793 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017794 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17795 if(pPNOScanReqParams->statusCallback)
17796 {
17797 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17798 VOS_STATUS_E_FAILURE);
17799 }
17800
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017801 if (pPNOScanReqParams->enable == 1)
17802 {
17803 if (pPNOScanReqParams->aNetworks)
17804 vos_mem_free(pPNOScanReqParams->aNetworks);
17805 if (pPNOScanReqParams->p24GProbeTemplate)
17806 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17807 if (pPNOScanReqParams->p5GProbeTemplate)
17808 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17809 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17811 vos_mem_free(pWdaParams->wdaMsgParam);
17812 vos_mem_free(pWdaParams);
17813 }
17814
17815 return;
17816}
17817/*
17818 * FUNCTION: WDA_UpdateScanParamsRespCallback
17819 *
17820 */
17821void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17822{
17823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017825 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017826 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 {
17828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017829 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017830 VOS_ASSERT(0) ;
17831 return ;
17832 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017833
17834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17835 vos_mem_free(pWdaParams->wdaMsgParam);
17836 vos_mem_free(pWdaParams);
17837
Jeff Johnson295189b2012-06-20 16:38:30 -070017838 return ;
17839}
Jeff Johnson295189b2012-06-20 16:38:30 -070017840/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017841 * FUNCTION: WDA_UpdateScanParamsReqCallback
17842 * Free memory.
17843 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17844 */
17845void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17846{
17847 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17848
17849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17850 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17851
17852 if(NULL == pWdaParams)
17853 {
17854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17855 "%s: pWdaParams received NULL", __func__);
17856 VOS_ASSERT(0);
17857 return;
17858 }
17859
17860 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17861 {
17862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17863 vos_mem_free(pWdaParams->wdaMsgParam);
17864 vos_mem_free(pWdaParams);
17865 }
17866
17867 return;
17868}
17869/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017870 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17871 * Request to WDI to set Preferred Network List.Offload
17872 */
17873VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17874 tSirPNOScanReq *pPNOScanReqParams)
17875{
Jeff Johnson43971f52012-07-17 12:26:56 -070017876 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017877 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17878 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17879 tWDA_ReqParams *pWdaParams ;
17880 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017882 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017883 if(NULL == pwdiPNOScanReqInfo)
17884 {
17885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017887 VOS_ASSERT(0);
17888 return VOS_STATUS_E_NOMEM;
17889 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17891 if(NULL == pWdaParams)
17892 {
17893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017895 VOS_ASSERT(0);
17896 vos_mem_free(pwdiPNOScanReqInfo);
17897 return VOS_STATUS_E_NOMEM;
17898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017899 //
17900 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17901 //
17902 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17903 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017904 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17905 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17906 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017907 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17908 {
17909 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17910 &pPNOScanReqParams->aNetworks[i],
17911 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017913 /*Scan timer intervals*/
17914 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17915 &pPNOScanReqParams->scanTimers,
17916 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017917 /*Probe template for 2.4GHz band*/
17918 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17919 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17920 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017921 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17922 pPNOScanReqParams->p24GProbeTemplate,
17923 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017924 /*Probe template for 5GHz band*/
17925 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17926 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17927 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017928 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17929 pPNOScanReqParams->p5GProbeTemplate,
17930 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017931 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17932 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017933
Jeff Johnson295189b2012-06-20 16:38:30 -070017934 /* Store Params pass it to WDI */
17935 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17936 pWdaParams->pWdaContext = pWDA;
17937 /* Store param pointer as passed in by caller */
17938 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017940 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017941 if(IS_WDI_STATUS_FAILURE(status))
17942 {
17943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17944 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017945 if(pPNOScanReqParams->statusCallback)
17946 {
17947 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17948 VOS_STATUS_E_FAILURE);
17949 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017950 if (pPNOScanReqParams->enable == 1)
17951 {
17952 if (pPNOScanReqParams->aNetworks)
17953 vos_mem_free(pPNOScanReqParams->aNetworks);
17954 if (pPNOScanReqParams->p24GProbeTemplate)
17955 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17956 if (pPNOScanReqParams->p5GProbeTemplate)
17957 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17960 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017961
Jeff Johnson295189b2012-06-20 16:38:30 -070017962 pWdaParams->wdaWdiApiMsgParam = NULL;
17963 pWdaParams->wdaMsgParam = NULL;
17964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017965 return CONVERT_WDI2VOS_STATUS(status) ;
17966}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017967
17968#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17969
17970void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17971{
17972 /*Convert the CSR Auth types to WDI Auth types */
17973 switch (csrAuthType)
17974 {
17975 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17976 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17977 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017978#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017979 case eCSR_AUTH_TYPE_CCKM_WPA:
17980 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17981 break;
17982#endif
17983 case eCSR_AUTH_TYPE_WPA:
17984 *AuthType = eWDA_AUTH_TYPE_WPA;
17985 break;
17986 case eCSR_AUTH_TYPE_WPA_PSK:
17987 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17988 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017989#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017990 case eCSR_AUTH_TYPE_CCKM_RSN:
17991 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17992 break;
17993#endif
17994 case eCSR_AUTH_TYPE_RSN:
17995 *AuthType = eWDA_AUTH_TYPE_RSN;
17996 break;
17997 case eCSR_AUTH_TYPE_RSN_PSK:
17998 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17999 break;
18000#if defined WLAN_FEATURE_VOWIFI_11R
18001 case eCSR_AUTH_TYPE_FT_RSN:
18002 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18003 break;
18004 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18005 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18006 break;
18007#endif
18008#ifdef FEATURE_WLAN_WAPI
18009 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18010 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18011 break;
18012 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18013 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18014 break;
18015#endif /* FEATURE_WLAN_WAPI */
18016 case eCSR_AUTH_TYPE_SHARED_KEY:
18017 case eCSR_AUTH_TYPE_AUTOSWITCH:
18018 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18019 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018020#ifdef WLAN_FEATURE_11W
18021 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18022 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018023 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018024 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18025 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18026 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018027#endif
18028 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018030 "%s: Unknown Auth Type", __func__);
18031 break;
18032 }
18033}
18034void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18035{
18036 switch (csrEncrType)
18037 {
18038 case eCSR_ENCRYPT_TYPE_NONE:
18039 *EncrType = WDI_ED_NONE;
18040 break;
18041 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18042 case eCSR_ENCRYPT_TYPE_WEP40:
18043 *EncrType = WDI_ED_WEP40;
18044 break;
18045 case eCSR_ENCRYPT_TYPE_WEP104:
18046 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18047 *EncrType = WDI_ED_WEP104;
18048 break;
18049 case eCSR_ENCRYPT_TYPE_TKIP:
18050 *EncrType = WDI_ED_TKIP;
18051 break;
18052 case eCSR_ENCRYPT_TYPE_AES:
18053 *EncrType = WDI_ED_CCMP;
18054 break;
18055#ifdef WLAN_FEATURE_11W
18056 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18057 *EncrType = WDI_ED_AES_128_CMAC;
18058 break;
18059#endif
18060#ifdef FEATURE_WLAN_WAPI
18061 case eCSR_ENCRYPT_TYPE_WPI:
18062 *EncrType = WDI_ED_WPI;
18063 break;
18064#endif
18065 case eCSR_ENCRYPT_TYPE_ANY:
18066 *EncrType = WDI_ED_ANY;
18067 break;
18068
18069 default:
18070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18071 "%s: Unknown Encryption Type", __func__);
18072 break;
18073 }
18074}
18075
Kapil Gupta04ab1992016-06-26 13:36:51 +053018076#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18077VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18078 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18079{
18080 WDI_Status status;
18081 tWDA_ReqParams *pWdaParams ;
18082 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18083
18084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18085 "------> %s " ,__func__);
18086
18087 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18088 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18089 if (NULL == pwdiPERRoamOffloadScanInfo) {
18090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18091 "%s: VOS MEM Alloc Failure", __func__);
18092 VOS_ASSERT(0);
18093 return VOS_STATUS_E_NOMEM;
18094 }
18095
18096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18097 if (NULL == pWdaParams) {
18098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18099 "%s: VOS MEM Alloc Failure", __func__);
18100 VOS_ASSERT(0);
18101 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18102 return VOS_STATUS_E_NOMEM;
18103 }
18104
18105 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18106 pPERRoamOffloadScanReqParams->rateUpThreshold;
18107 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18108 pPERRoamOffloadScanReqParams->rateDownThreshold;
18109 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18110 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18111 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18112 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18113 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18114 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
18115 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18116 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18117
18118 /* Store Params pass it to WDI */
18119 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18120 pWdaParams->pWdaContext = pWDA;
18121
18122 /* Store param pointer as passed in by caller */
18123 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18124 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18125 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18126 pWdaParams);
18127
18128 if(IS_WDI_STATUS_FAILURE(status)) {
18129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18130 "Failure in Send config PER roam params");
18131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18132 vos_mem_free(pWdaParams->wdaMsgParam);
18133 vos_mem_free(pWdaParams);
18134 }
18135 return CONVERT_WDI2VOS_STATUS(status) ;
18136}
18137#endif
18138
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018139/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018140 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018141 * Request to WDI to set Roam Offload Scan
18142 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018143VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018144 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18145{
18146 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018147 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18148 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018149 tWDA_ReqParams *pWdaParams ;
18150 v_U8_t csrAuthType;
18151 WDI_RoamNetworkType *pwdiRoamNetworkType;
18152 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18154 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018155 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018156 {
18157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18158 "%s: VOS MEM Alloc Failure", __func__);
18159 VOS_ASSERT(0);
18160 return VOS_STATUS_E_NOMEM;
18161 }
18162 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18163 if (NULL == pWdaParams)
18164 {
18165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18166 "%s: VOS MEM Alloc Failure", __func__);
18167 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018168 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018169 return VOS_STATUS_E_NOMEM;
18170 }
18171
18172 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018173 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018174 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018175 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18176 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018177 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18178 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18179 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18180 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18181 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18182 sizeof(pwdiRoamNetworkType->currAPbssid));
18183 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18184 csrAuthType);
18185 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18186 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18187 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18188 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18189 pwdiRoamOffloadScanInfo->LookupThreshold =
18190 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018191 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18192 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018193 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18194 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018195 pwdiRoamOffloadScanInfo->MAWCEnabled =
18196 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018197 pwdiRoamOffloadScanInfo->Command =
18198 pRoamOffloadScanReqParams->Command ;
18199 pwdiRoamOffloadScanInfo->StartScanReason =
18200 pRoamOffloadScanReqParams->StartScanReason ;
18201 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18202 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18203 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18204 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18205 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18206 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18207 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18208 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18209 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18210 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018211 pwdiRoamOffloadScanInfo->IsESEEnabled =
18212 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018213 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18214 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18215 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18216 pwdiRoamNetworkType->ssId.ucLength =
18217 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18218 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18219 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18220 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18221 pwdiRoamNetworkType->ChannelCount =
18222 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18223 pwdiRoamOffloadScanInfo->ChannelCacheType =
18224 pRoamOffloadScanReqParams->ChannelCacheType;
18225 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18226 pRoamOffloadScanReqParams->ValidChannelList,
18227 pRoamOffloadScanReqParams->ValidChannelCount);
18228 pwdiRoamOffloadScanInfo->ValidChannelCount =
18229 pRoamOffloadScanReqParams->ValidChannelCount;
18230 pwdiRoamOffloadScanInfo->us24GProbeSize =
18231 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18232 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18233 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18234 pRoamOffloadScanReqParams->p24GProbeTemplate,
18235 pwdiRoamOffloadScanInfo->us24GProbeSize);
18236 pwdiRoamOffloadScanInfo->us5GProbeSize =
18237 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18238 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18239 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18240 pRoamOffloadScanReqParams->p5GProbeTemplate,
18241 pwdiRoamOffloadScanInfo->us5GProbeSize);
18242 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18243 pRoamOffloadScanReqParams->MDID.mdiePresent;
18244 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18245 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018246 pwdiRoamOffloadScanInfo->nProbes =
18247 pRoamOffloadScanReqParams->nProbes;
18248 pwdiRoamOffloadScanInfo->HomeAwayTime =
18249 pRoamOffloadScanReqParams->HomeAwayTime;
18250 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018251 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018252 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018253 pWdaParams->pWdaContext = pWDA;
18254 /* Store param pointer as passed in by caller */
18255 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018256 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018257 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18258 if(IS_WDI_STATUS_FAILURE(status))
18259 {
18260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18261 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18263 vos_mem_free(pWdaParams->wdaMsgParam);
18264 pWdaParams->wdaWdiApiMsgParam = NULL;
18265 pWdaParams->wdaMsgParam = NULL;
18266 }
18267 return CONVERT_WDI2VOS_STATUS(status) ;
18268}
18269#endif
18270
Jeff Johnson295189b2012-06-20 16:38:30 -070018271/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018272 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018273 *
18274 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018275void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018276{
18277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18278
18279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018280 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018281
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018282 if(NULL == pWdaParams)
18283 {
18284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018285 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018286 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018287 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018288 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018289
Jeff Johnson295189b2012-06-20 16:38:30 -070018290 vos_mem_free(pWdaParams->wdaMsgParam) ;
18291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18292 vos_mem_free(pWdaParams) ;
18293
18294 return ;
18295}
18296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018297 * FUNCTION: WDA_RssiFilterReqCallback
18298 * Free memory.
18299 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18300 */
18301void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18302{
18303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18304
18305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18306 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18307
18308 if(NULL == pWdaParams)
18309 {
18310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18311 "%s: pWdaParams received NULL", __func__);
18312 VOS_ASSERT(0);
18313 return;
18314 }
18315
18316 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18317 {
18318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18319 vos_mem_free(pWdaParams->wdaMsgParam);
18320 vos_mem_free(pWdaParams);
18321 }
18322
18323 return;
18324}
18325/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018326 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018327 * Request to WDI to set Preferred Network List.Offload
18328 */
18329VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18330 tSirSetRSSIFilterReq* pRssiFilterParams)
18331{
Jeff Johnson43971f52012-07-17 12:26:56 -070018332 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018333 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18334 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18335 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018337 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018338 if(NULL == pwdiSetRssiFilterReqInfo)
18339 {
18340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018342 VOS_ASSERT(0);
18343 return VOS_STATUS_E_NOMEM;
18344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18346 if(NULL == pWdaParams)
18347 {
18348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018350 VOS_ASSERT(0);
18351 vos_mem_free(pwdiSetRssiFilterReqInfo);
18352 return VOS_STATUS_E_NOMEM;
18353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018354 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018355 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18356 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018357
Jeff Johnson295189b2012-06-20 16:38:30 -070018358 /* Store Params pass it to WDI */
18359 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18360 pWdaParams->pWdaContext = pWDA;
18361 /* Store param pointer as passed in by caller */
18362 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018363 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018364 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018365 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018366 if(IS_WDI_STATUS_FAILURE(status))
18367 {
18368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18369 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18371 vos_mem_free(pWdaParams->wdaMsgParam);
18372 pWdaParams->wdaWdiApiMsgParam = NULL;
18373 pWdaParams->wdaMsgParam = NULL;
18374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018375 return CONVERT_WDI2VOS_STATUS(status) ;
18376}
18377
Jeff Johnson295189b2012-06-20 16:38:30 -070018378/*
18379 * FUNCTION: WDA_ProcessUpdateScanParams
18380 * Request to WDI to update Scan Parameters
18381 */
18382VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18383 tSirUpdateScanParams *pUpdateScanParams)
18384{
Jeff Johnson43971f52012-07-17 12:26:56 -070018385 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018386 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18387 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18388 sizeof(WDI_UpdateScanParamsInfoType)) ;
18389 tWDA_ReqParams *pWdaParams ;
18390 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018392 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018393 if(NULL == wdiUpdateScanParamsInfoType)
18394 {
18395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018397 VOS_ASSERT(0);
18398 return VOS_STATUS_E_NOMEM;
18399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18401 if ( NULL == pWdaParams )
18402 {
18403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018405 VOS_ASSERT(0);
18406 vos_mem_free(wdiUpdateScanParamsInfoType);
18407 return VOS_STATUS_E_NOMEM;
18408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018409 //
18410 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18411 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18413 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18414 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18415 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018416 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018417 pUpdateScanParams->b11dEnabled,
18418 pUpdateScanParams->b11dResolved,
18419 pUpdateScanParams->ucChannelCount,
18420 pUpdateScanParams->usPassiveMinChTime,
18421 pUpdateScanParams->usPassiveMaxChTime,
18422 pUpdateScanParams->usActiveMinChTime,
18423 pUpdateScanParams->usActiveMaxChTime,
18424 sizeof(tSirUpdateScanParams),
18425 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18426
Jeff Johnson295189b2012-06-20 16:38:30 -070018427 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18428 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018429 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18430 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018431 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18432 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018433 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18434 pUpdateScanParams->usActiveMaxChTime;
18435 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18436 pUpdateScanParams->usActiveMinChTime;
18437 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18438 pUpdateScanParams->usPassiveMaxChTime;
18439 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18440 pUpdateScanParams->usPassiveMinChTime;
18441
Jeff Johnson295189b2012-06-20 16:38:30 -070018442 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018443 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18444 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018445
Jeff Johnson295189b2012-06-20 16:38:30 -070018446 for ( i = 0; i <
18447 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18448 i++)
18449 {
18450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18451 "Update Scan Parameters channel: %d",
18452 pUpdateScanParams->aChannels[i]);
18453
18454 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18455 pUpdateScanParams->aChannels[i];
18456 }
18457
Yue Ma7f44bbe2013-04-12 11:47:39 -070018458 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18459 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018460
Jeff Johnson295189b2012-06-20 16:38:30 -070018461 /* Store Params pass it to WDI */
18462 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18463 pWdaParams->pWdaContext = pWDA;
18464 /* Store param pointer as passed in by caller */
18465 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018466
Jeff Johnson295189b2012-06-20 16:38:30 -070018467
18468
18469 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018470 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018471 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018472 if(IS_WDI_STATUS_FAILURE(status))
18473 {
18474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18475 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18477 vos_mem_free(pWdaParams->wdaMsgParam);
18478 vos_mem_free(pWdaParams);
18479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018480 return CONVERT_WDI2VOS_STATUS(status) ;
18481}
18482#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018483
18484#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18485/*
18486 * FUNCTION: WDA_RoamOffloadScanReqCallback
18487 *
18488 */
18489void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18490{
18491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018492 vos_msg_t vosMsg;
18493 wpt_uint8 reason = 0;
18494
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018496 "<------ %s " ,__func__);
18497 if (NULL == pWdaParams)
18498 {
18499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18500 "%s: pWdaParams received NULL", __func__);
18501 VOS_ASSERT(0) ;
18502 return ;
18503 }
18504 if ( pWdaParams != NULL )
18505 {
18506 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18507 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018508 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18510 }
18511 if ( pWdaParams->wdaMsgParam != NULL)
18512 {
18513 vos_mem_free(pWdaParams->wdaMsgParam);
18514 }
18515
18516 vos_mem_free(pWdaParams) ;
18517 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018518 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18519 vosMsg.bodyptr = NULL;
18520 if (WDI_STATUS_SUCCESS != status)
18521 {
18522 reason = 0;
18523 }
18524 vosMsg.bodyval = reason;
18525 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18526 {
18527 /* free the mem and return */
18528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018529 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018530 }
18531
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018532 return ;
18533}
Kapil Gupta04ab1992016-06-26 13:36:51 +053018534
18535void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
18536{
18537 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18538 vos_msg_t vosMsg;
18539 wpt_uint8 reason = 0;
18540
18541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18542 "<------ %s " ,__func__);
18543 if (NULL == pWdaParams) {
18544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18545 "%s: pWdaParams received NULL", __func__);
18546 VOS_ASSERT(0) ;
18547 return ;
18548 }
18549 if ( pWdaParams->wdaMsgParam != NULL)
18550 vos_mem_free(pWdaParams->wdaMsgParam);
18551
18552 vos_mem_free(pWdaParams) ;
18553 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
18554 vosMsg.bodyptr = NULL;
18555 if (WDI_STATUS_SUCCESS != status)
18556 reason = 0;
18557
18558 vosMsg.bodyval = reason;
18559 if (VOS_STATUS_SUCCESS !=
18560 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18561 /* free the mem and return */
18562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18563 "%s: Failed to post the rsp to UMAC", __func__);
18564 }
18565
18566 return ;
18567}
18568
18569
18570void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18571{
18572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18573 vos_msg_t vosMsg;
18574 wpt_uint8 reason = 0;
18575
18576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18577 "<------ %s " ,__func__);
18578 if (NULL == pWdaParams) {
18579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18580 "%s: pWdaParams received NULL", __func__);
18581 VOS_ASSERT(0) ;
18582 return ;
18583 }
18584 if ( pWdaParams->wdaMsgParam != NULL)
18585 vos_mem_free(pWdaParams->wdaMsgParam);
18586
18587 vos_mem_free(pWdaParams) ;
18588 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18589 vosMsg.bodyptr = NULL;
18590 if (WDI_STATUS_SUCCESS != status)
18591 reason = 0;
18592
18593 vosMsg.bodyval = reason;
18594 if (VOS_STATUS_SUCCESS !=
18595 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18596 /* free the mem and return */
18597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18598 "%s: Failed to post the rsp to UMAC", __func__);
18599 }
18600
18601 return ;
18602}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018603#endif
18604
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018605/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018606 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018607 *
18608 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018609void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018610{
18611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18612
18613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18614 "<------ %s " ,__func__);
18615
18616 if(NULL == pWdaParams)
18617 {
18618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18619 "%s: pWdaParams received NULL", __func__);
18620 VOS_ASSERT(0);
18621 return;
18622 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018623
18624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18625 vos_mem_free(pWdaParams->wdaMsgParam);
18626 vos_mem_free(pWdaParams);
18627
18628 return;
18629}
18630/*
18631 * FUNCTION: WDA_SetPowerParamsReqCallback
18632 * Free memory.
18633 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18634 */
18635void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18636{
18637 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18638
18639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18640 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18641
18642 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018643 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18645 "%s: pWdaParams received NULL", __func__);
18646 VOS_ASSERT(0);
18647 return;
18648 }
18649
18650 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18651 {
18652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18653 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018654 vos_mem_free(pWdaParams);
18655 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018656
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018657 return;
18658}
18659
Jeff Johnson295189b2012-06-20 16:38:30 -070018660#ifdef WLAN_FEATURE_PACKET_FILTERING
18661/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018662 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018663 *
18664 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018665void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018666 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18667 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018668{
18669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018672 if(NULL == pWdaParams)
18673 {
18674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018676 VOS_ASSERT(0) ;
18677 return ;
18678 }
18679
18680 vos_mem_free(pWdaParams->wdaMsgParam) ;
18681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18682 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018683 //print a msg, nothing else to do
18684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018685 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018686 return ;
18687}
Jeff Johnson295189b2012-06-20 16:38:30 -070018688/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018689 * FUNCTION: WDA_8023MulticastListReqCallback
18690 * Free memory.
18691 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18692 */
18693void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18694{
18695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18696
18697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18698 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18699
18700 if(NULL == pWdaParams)
18701 {
18702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18703 "%s: pWdaParams received NULL", __func__);
18704 VOS_ASSERT(0);
18705 return;
18706 }
18707
18708 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18709 {
18710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18711 vos_mem_free(pWdaParams->wdaMsgParam);
18712 vos_mem_free(pWdaParams);
18713 }
18714
18715 return;
18716}
18717/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018718 * FUNCTION: WDA_Process8023MulticastListReq
18719 * Request to WDI to add 8023 Multicast List
18720 */
18721VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18722 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18723{
Jeff Johnson43971f52012-07-17 12:26:56 -070018724 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018725 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18726 tWDA_ReqParams *pWdaParams ;
18727 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018729 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018730 pwdiFltPktSetMcListReqParamsType =
18731 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18732 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18733 ) ;
18734 if(NULL == pwdiFltPktSetMcListReqParamsType)
18735 {
18736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018738 return VOS_STATUS_E_NOMEM;
18739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018740 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18741 if(NULL == pWdaParams)
18742 {
18743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018745 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18746 return VOS_STATUS_E_NOMEM;
18747 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018748
Jeff Johnson295189b2012-06-20 16:38:30 -070018749 //
18750 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18751 //
18752 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018753 pRcvFltMcAddrList->ulMulticastAddrCnt;
18754
18755 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18756 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18757 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18758 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18759
Jeff Johnson295189b2012-06-20 16:38:30 -070018760 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18761 {
18762 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18763 &(pRcvFltMcAddrList->multicastAddr[i]),
18764 sizeof(tSirMacAddr));
18765 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018766 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18767 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018768
Jeff Johnson295189b2012-06-20 16:38:30 -070018769 /* Store Params pass it to WDI */
18770 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18771 pWdaParams->pWdaContext = pWDA;
18772 /* Store param pointer as passed in by caller */
18773 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018774 status = WDI_8023MulticastListReq(
18775 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018776 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018777 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018778 if(IS_WDI_STATUS_FAILURE(status))
18779 {
18780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18781 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18783 vos_mem_free(pWdaParams->wdaMsgParam);
18784 vos_mem_free(pWdaParams);
18785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018786 return CONVERT_WDI2VOS_STATUS(status) ;
18787}
Jeff Johnson295189b2012-06-20 16:38:30 -070018788/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018789 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018790 *
18791 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018792void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018793 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18794 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018795{
18796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018799 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018800 if(NULL == pWdaParams)
18801 {
18802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018803 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018804 VOS_ASSERT(0) ;
18805 return ;
18806 }
18807
18808 vos_mem_free(pWdaParams->wdaMsgParam) ;
18809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18810 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018811 //print a msg, nothing else to do
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018813 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018814 return ;
18815}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018816
18817/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018818 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18819 * Free memory.
18820 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018821 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018822void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018823 void* pUserData)
18824{
18825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18826
18827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18828 "<------ %s, wdiStatus: %d",
18829 __func__, wdiStatus);
18830
18831 if (NULL == pWdaParams)
18832 {
18833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18834 "%s: Invalid pWdaParams pointer", __func__);
18835 VOS_ASSERT(0);
18836 return;
18837 }
18838
18839 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18840 {
18841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18842 vos_mem_free(pWdaParams->wdaMsgParam);
18843 vos_mem_free(pWdaParams);
18844 }
18845
18846 return;
18847}
18848
Jeff Johnson295189b2012-06-20 16:38:30 -070018849/*
18850 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18851 * Request to WDI to set Receive Filters
18852 */
18853VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18854 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18855{
Jeff Johnson43971f52012-07-17 12:26:56 -070018856 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018857 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18858 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18859 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18860 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18861 tWDA_ReqParams *pWdaParams ;
18862 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018864 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018865 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18866 {
18867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018869 VOS_ASSERT(0);
18870 return VOS_STATUS_E_NOMEM;
18871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018872 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18873 if(NULL == pWdaParams)
18874 {
18875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018877 VOS_ASSERT(0);
18878 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18879 return VOS_STATUS_E_NOMEM;
18880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018881 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18882 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18883 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18884 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018885 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18886 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18887
18888 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18889 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018890
18891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18892 "FID %d FT %d NParams %d CT %d",
18893 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18894 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18895 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18896 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018897 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18898 {
18899 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18900 &pRcvPktFilterCfg->paramsData[i],
18901 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018903 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018904 pwdiSetRcvPktFilterReqParamsType->
18905 wdiPktFilterCfg.paramsData[i].protocolLayer,
18906 pwdiSetRcvPktFilterReqParamsType->
18907 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018909 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018910 pwdiSetRcvPktFilterReqParamsType->
18911 wdiPktFilterCfg.paramsData[i].dataOffset,
18912 pwdiSetRcvPktFilterReqParamsType->
18913 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018915 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018916 pwdiSetRcvPktFilterReqParamsType->
18917 wdiPktFilterCfg.paramsData[i].compareData[0],
18918 pwdiSetRcvPktFilterReqParamsType->
18919 wdiPktFilterCfg.paramsData[i].compareData[1],
18920 pwdiSetRcvPktFilterReqParamsType->
18921 wdiPktFilterCfg.paramsData[i].compareData[2],
18922 pwdiSetRcvPktFilterReqParamsType->
18923 wdiPktFilterCfg.paramsData[i].compareData[3],
18924 pwdiSetRcvPktFilterReqParamsType->
18925 wdiPktFilterCfg.paramsData[i].compareData[4],
18926 pwdiSetRcvPktFilterReqParamsType->
18927 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018929 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018930 pwdiSetRcvPktFilterReqParamsType->
18931 wdiPktFilterCfg.paramsData[i].dataMask[0],
18932 pwdiSetRcvPktFilterReqParamsType->
18933 wdiPktFilterCfg.paramsData[i].dataMask[1],
18934 pwdiSetRcvPktFilterReqParamsType->
18935 wdiPktFilterCfg.paramsData[i].dataMask[2],
18936 pwdiSetRcvPktFilterReqParamsType->
18937 wdiPktFilterCfg.paramsData[i].dataMask[3],
18938 pwdiSetRcvPktFilterReqParamsType->
18939 wdiPktFilterCfg.paramsData[i].dataMask[4],
18940 pwdiSetRcvPktFilterReqParamsType->
18941 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018942 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018943 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018944 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018945 /* Store Params pass it to WDI */
18946 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18947 pWdaParams->pWdaContext = pWDA;
18948 /* Store param pointer as passed in by caller */
18949 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018950 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018951 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018952 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018953 if(IS_WDI_STATUS_FAILURE(status))
18954 {
18955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18956 "Failure in SetFilter(),free all the memory,status %d ",status);
18957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18958 vos_mem_free(pWdaParams->wdaMsgParam);
18959 vos_mem_free(pWdaParams);
18960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018961 return CONVERT_WDI2VOS_STATUS(status) ;
18962}
Jeff Johnson295189b2012-06-20 16:38:30 -070018963/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018964 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018965 *
18966 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018967void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018968 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18969 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018970{
18971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18972 tWDA_CbContext *pWDA;
18973 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18974 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18975 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18976 tANI_U8 i;
18977 vos_msg_t vosMsg;
18978
18979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018980 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018981 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18982
Jeff Johnsone7245742012-09-05 17:12:55 -070018983 if(NULL == pRcvFltPktMatchCntRsp)
18984 {
18985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018986 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018987 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018988 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018989 return ;
18990 }
18991
Jeff Johnson295189b2012-06-20 16:38:30 -070018992 if(NULL == pWdaParams)
18993 {
18994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018995 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018996 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018997 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018998 return ;
18999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019000 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19001 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019002 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19003 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19004
19005 /* Message Header */
19006 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19007 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19008
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019009 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019010
19011 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19012 {
19013 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19014 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019016 /* VOS message wrapper */
19017 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19018 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19019 vosMsg.bodyval = 0;
19020 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19021 {
19022 /* free the mem and return */
19023 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19024 }
19025
19026 vos_mem_free(pWdaParams->wdaMsgParam) ;
19027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19028 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019029
19030 return;
19031}
19032/*
19033 * FUNCTION: WDA_FilterMatchCountReqCallback
19034 * Free memory and send RSP back to SME.
19035 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19036 */
19037void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19038{
19039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19040 vos_msg_t vosMsg;
19041
19042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19043 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19044
19045 if(NULL == pWdaParams)
19046 {
19047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19048 "%s: pWdaParams received NULL", __func__);
19049 VOS_ASSERT(0);
19050 return;
19051 }
19052
19053 /* VOS message wrapper */
19054 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19055 vosMsg.bodyptr = NULL;
19056 vosMsg.bodyval = 0;
19057
19058 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19059 {
19060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19061 vos_mem_free(pWdaParams->wdaMsgParam);
19062 vos_mem_free(pWdaParams);
19063 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19064 }
19065
19066 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019067}
Jeff Johnson295189b2012-06-20 16:38:30 -070019068/*
19069 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19070 * Request to WDI to get PC Filter Match Count
19071 */
19072VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19073{
Jeff Johnson43971f52012-07-17 12:26:56 -070019074 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019075 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19076 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19077 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019079 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019080 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19081 {
19082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019083 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019084 VOS_ASSERT(0);
19085 return VOS_STATUS_E_NOMEM;
19086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19088 if(NULL == pWdaParams)
19089 {
19090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019092 VOS_ASSERT(0);
19093 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19094 return VOS_STATUS_E_NOMEM;
19095 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019096
Yue Ma7f44bbe2013-04-12 11:47:39 -070019097 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19098 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019099
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019100 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19101 pRcvFltPktMatchRsp->bssId,
19102 sizeof(wpt_macAddr));
19103
Jeff Johnson295189b2012-06-20 16:38:30 -070019104 /* Store Params pass it to WDI */
19105 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19106 pWdaParams->pWdaContext = pWDA;
19107 /* Store param pointer as passed in by caller */
19108 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019109 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019110 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019111 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019112 if(IS_WDI_STATUS_FAILURE(status))
19113 {
19114 /* failure returned by WDI API */
19115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19116 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19118 vos_mem_free(pWdaParams) ;
19119 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19120 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019122 return CONVERT_WDI2VOS_STATUS(status) ;
19123}
Jeff Johnson295189b2012-06-20 16:38:30 -070019124/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019125 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019126 *
19127 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019128void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019129 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19130 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019131{
19132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019135/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19136 if(NULL == pWdaParams)
19137 {
19138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019139 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019140 VOS_ASSERT(0) ;
19141 return ;
19142 }
19143
19144 vos_mem_free(pWdaParams->wdaMsgParam) ;
19145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19146 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019147 //print a msg, nothing else to do
19148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019149 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019150 return ;
19151}
Jeff Johnson295189b2012-06-20 16:38:30 -070019152/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019153 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19154 * Free memory.
19155 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19156 */
19157void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19158{
19159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19160
19161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19162 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19163
19164 if(NULL == pWdaParams)
19165 {
19166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19167 "%s: Invalid pWdaParams pointer", __func__);
19168 VOS_ASSERT(0);
19169 return;
19170 }
19171
19172 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19173 {
19174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19175 vos_mem_free(pWdaParams->wdaMsgParam);
19176 vos_mem_free(pWdaParams);
19177 }
19178
19179 return;
19180}
19181/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019182 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19183 * Request to WDI to clear Receive Filters
19184 */
19185VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19186 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19187{
Jeff Johnson43971f52012-07-17 12:26:56 -070019188 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019189 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19190 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19191 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019194 if(NULL == pwdiRcvFltPktClearReqParamsType)
19195 {
19196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019198 VOS_ASSERT(0);
19199 return VOS_STATUS_E_NOMEM;
19200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19202 if(NULL == pWdaParams)
19203 {
19204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019206 VOS_ASSERT(0);
19207 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19208 return VOS_STATUS_E_NOMEM;
19209 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019210 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19211 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019212 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19213 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19214 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19215 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019216
Yue Ma7f44bbe2013-04-12 11:47:39 -070019217 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019218 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019219 /* Store Params pass it to WDI */
19220 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19221 pWdaParams->pWdaContext = pWDA;
19222 /* Store param pointer as passed in by caller */
19223 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019225 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019226 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019227 if(IS_WDI_STATUS_FAILURE(status))
19228 {
19229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19230 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
19231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019232 vos_mem_free(pWdaParams->wdaMsgParam);
19233 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019235 return CONVERT_WDI2VOS_STATUS(status) ;
19236}
19237#endif // WLAN_FEATURE_PACKET_FILTERING
19238
Jeff Johnson295189b2012-06-20 16:38:30 -070019239/*
19240 * FUNCTION: WDA_ProcessSetPowerParamsReq
19241 * Request to WDI to set power params
19242 */
19243VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19244 tSirSetPowerParamsReq *pPowerParams)
19245{
Jeff Johnson43971f52012-07-17 12:26:56 -070019246 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019247 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19248 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019249 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019251 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019252 if(NULL == pwdiSetPowerParamsReqInfo)
19253 {
19254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019256 VOS_ASSERT(0);
19257 return VOS_STATUS_E_NOMEM;
19258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019259 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19260 if(NULL == pWdaParams)
19261 {
19262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019264 VOS_ASSERT(0);
19265 vos_mem_free(pwdiSetPowerParamsReqInfo);
19266 return VOS_STATUS_E_NOMEM;
19267 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019268
Jeff Johnson295189b2012-06-20 16:38:30 -070019269
19270 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19271 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019272 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19273 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019274 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19275 pPowerParams->uListenInterval;
19276 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19277 pPowerParams->uBcastMcastFilter;
19278 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19279 pPowerParams->uEnableBET;
19280 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19281 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019282 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19283 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019284 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19285 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019286
Jeff Johnson295189b2012-06-20 16:38:30 -070019287 /* Store Params pass it to WDI */
19288 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19289 pWdaParams->pWdaContext = pWDA;
19290 /* Store param pointer as passed in by caller */
19291 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019292 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019293 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019294 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019295 if(IS_WDI_STATUS_FAILURE(status))
19296 {
19297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19298 "Failure in Set power params REQ WDI API, free all the memory " );
19299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19300 vos_mem_free(pWdaParams->wdaMsgParam);
19301 pWdaParams->wdaWdiApiMsgParam = NULL;
19302 pWdaParams->wdaMsgParam = NULL;
19303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019304 return CONVERT_WDI2VOS_STATUS(status) ;
19305}
19306
19307/*
19308 * FUNCTION: WDA_SetTmLevelRspCallback
19309 * Set TM Level response
19310 */
19311void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19312{
19313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19314
19315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019317
19318 if(NULL == pWdaParams)
19319 {
19320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019322 VOS_ASSERT(0) ;
19323 return ;
19324 }
19325
19326 /* Dose not need to send notification to upper layer
19327 * Just free allocated resources */
19328 if( pWdaParams != NULL )
19329 {
19330 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19331 {
19332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19333 }
19334 vos_mem_free(pWdaParams->wdaMsgParam) ;
19335 vos_mem_free(pWdaParams) ;
19336 }
19337}
19338
19339/*
19340 * FUNCTION: WDA_ProcessSetTmLevelReq
19341 * Set TM Level request
19342 */
19343VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19344 tAniSetTmLevelReq *setTmLevelReq)
19345{
19346 WDI_Status status = WDI_STATUS_SUCCESS ;
19347 tWDA_ReqParams *pWdaParams ;
19348 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19349 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19350 sizeof(WDI_SetTmLevelReqType)) ;
19351 if(NULL == wdiSetTmLevelReq)
19352 {
19353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019355 VOS_ASSERT(0);
19356 return VOS_STATUS_E_NOMEM;
19357 }
19358
19359 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19360 if(NULL == pWdaParams)
19361 {
19362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019364 VOS_ASSERT(0);
19365 vos_mem_free(wdiSetTmLevelReq);
19366 return VOS_STATUS_E_NOMEM;
19367 }
19368
19369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019371
19372 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19373 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19374
19375 pWdaParams->pWdaContext = pWDA;
19376 pWdaParams->wdaMsgParam = setTmLevelReq;
19377 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19378
19379 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19380 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19381
19382 if(IS_WDI_STATUS_FAILURE(status))
19383 {
19384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019385 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019386 vos_mem_free(pWdaParams->wdaMsgParam) ;
19387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19388 vos_mem_free(pWdaParams) ;
19389 }
19390
19391 return CONVERT_WDI2VOS_STATUS(status) ;
19392}
19393
19394VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19395 tpTxControlParams pTxCtrlParam)
19396{
19397 VOS_STATUS wdaStatus;
19398
19399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019401 if( pTxCtrlParam == NULL )
19402 {
19403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019404 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019405 return VOS_STATUS_E_FAILURE;
19406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019407 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19408 {
19409 wdaStatus = WDA_SuspendDataTx(pWDA);
19410 }
19411 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19412 {
19413 wdaStatus = WDA_ResumeDataTx(pWDA);
19414 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019415 return wdaStatus;
19416}
19417
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019418void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019419{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019420 WDI_Status status;
19421 status = WDI_FWLoggingDXEdoneInd(logType);
19422
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019423 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019424 {
19425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19426 FL("Failure status %d"), status);
19427 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019428}
19429
Jeff Johnson295189b2012-06-20 16:38:30 -070019430 /* FUNCTION WDA_featureCapsExchange
19431 * WDA API to invoke capability exchange between host and FW.
19432 */
19433void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19434{
19435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019436 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019437 WDI_featureCapsExchangeReq( NULL, pVosContext);
19438}
19439
Yathish9f22e662012-12-10 14:21:35 -080019440/* FUNCTION WDA_disableCapablityFeature
19441 * WDA API to diable Active mode offload in host.
19442 */
19443void WDA_disableCapablityFeature(tANI_U8 feature_index)
19444{
19445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19446 "%s:enter", __func__ );
19447 WDI_disableCapablityFeature(feature_index);
19448}
19449
Jeff Johnson295189b2012-06-20 16:38:30 -070019450 /* FUNCTION WDA_getHostWlanFeatCaps
19451 * Wrapper for WDI API, that will return if the feature (enum value).passed
19452 * to this API is supported or not in Host
19453 * return value
19454 * 0 - implies feature is NOT Supported
19455 * any non zero value - implies feature is SUPPORTED
19456 */
19457tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19458{
19459 return WDI_getHostWlanFeatCaps(featEnumValue);
19460}
19461
19462 /* FUNCTION WDA_getFwWlanFeatCaps
19463 * Wrapper for WDI API, that will return if the feature (enum value).passed
19464 * to this API is supported or not in FW
19465 * return value
19466 * 0 - implies feature is NOT Supported
19467 * any non zero value - implies feature is SUPPORTED
19468 */
19469tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19470{
19471 return WDI_getFwWlanFeatCaps(featEnumValue);
19472}
19473
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019474
Jeff Johnson295189b2012-06-20 16:38:30 -070019475/*
19476 * FUNCTION: WDA_shutdown
19477 * Shutdown WDA/WDI without handshaking with Riva.
19478 * Synchronous function.
19479 */
19480VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19481{
19482 WDI_Status wdiStatus;
19483 //tANI_U8 eventIdx = 0;
19484 VOS_STATUS status = VOS_STATUS_SUCCESS;
19485 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019486 if (NULL == pWDA)
19487 {
19488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019489 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019490 VOS_ASSERT(0);
19491 return VOS_STATUS_E_FAILURE;
19492 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019493 /* FTM mode stay START_STATE */
19494 if( (WDA_READY_STATE != pWDA->wdaState) &&
19495 (WDA_INIT_STATE != pWDA->wdaState) &&
19496 (WDA_START_STATE != pWDA->wdaState) )
19497 {
19498 VOS_ASSERT(0);
19499 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019500
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019501 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019502 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019503 if(VOS_TRUE == pWDA->wdaTimersCreated)
19504 {
19505 wdaDestroyTimers(pWDA);
19506 pWDA->wdaTimersCreated = VOS_FALSE;
19507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019508 }
Leo Chang9d76f622013-08-23 16:34:52 -070019509 else
19510 {
19511 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019512 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019513
Jeff Johnson295189b2012-06-20 16:38:30 -070019514 /* call WDI shutdown */
19515 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019516 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19517 {
19518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19519 "error in WDA Stop" );
19520 status = VOS_STATUS_E_FAILURE;
19521 }
19522 /* WDI stop is synchrnous, shutdown is complete when it returns */
19523 pWDA->wdaState = WDA_STOP_STATE;
19524
Jeff Johnson295189b2012-06-20 16:38:30 -070019525 /* shutdown should perform the stop & close actions. */
19526 /* Destroy the event */
19527 status = vos_event_destroy(&pWDA->txFrameEvent);
19528 if(!VOS_IS_STATUS_SUCCESS(status))
19529 {
19530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019531 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019532 status = VOS_STATUS_E_FAILURE;
19533 }
19534 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19535 if(!VOS_IS_STATUS_SUCCESS(status))
19536 {
19537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019538 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019539 status = VOS_STATUS_E_FAILURE;
19540 }
19541 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19542 if(!VOS_IS_STATUS_SUCCESS(status))
19543 {
19544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019545 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019546 status = VOS_STATUS_E_FAILURE;
19547 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019548 /* free WDA context */
19549 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19550 if ( !VOS_IS_STATUS_SUCCESS(status) )
19551 {
19552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19553 "error in WDA close " );
19554 status = VOS_STATUS_E_FAILURE;
19555 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019556 return status;
19557}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019558
Jeff Johnsone7245742012-09-05 17:12:55 -070019559/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019560 * FUNCTION: WDA_setNeedShutdown
19561 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019562 */
19563
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019564void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019565{
19566 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019567 if(pWDA == NULL)
19568 {
19569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19570 "Could not get the WDA Context pointer" );
19571 return;
19572 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019573 pWDA->needShutdown = TRUE;
19574}
19575/*
19576 * FUNCTION: WDA_needShutdown
19577 * WDA needs a shutdown
19578 */
19579
19580v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19581{
19582 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019583 if(pWDA == NULL)
19584 {
19585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19586 "Could not get the WDA Context pointer" );
19587 return 0;
19588 }
19589 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019590}
19591
Mohit Khanna4a70d262012-09-11 16:30:12 -070019592#ifdef WLAN_FEATURE_11AC
19593/*
19594 * FUNCTION: WDA_SetBeaconFilterReqCallback
19595 *
19596 */
19597void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19598{
19599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019601 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019602 if(NULL == pWdaParams)
19603 {
19604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019605 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019606 VOS_ASSERT(0) ;
19607 return ;
19608 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019609
Mohit Khanna4a70d262012-09-11 16:30:12 -070019610 vos_mem_free(pWdaParams->wdaMsgParam) ;
19611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19612 vos_mem_free(pWdaParams) ;
19613 /*
19614 * No respone required for SetBeaconFilter req so just free the request
19615 * param here
19616 */
19617
19618 return ;
19619}
19620
19621VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19622 tUpdateVHTOpMode *pData)
19623{
19624 WDI_Status status = WDI_STATUS_SUCCESS ;
19625 tWDA_ReqParams *pWdaParams ;
19626 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19627 sizeof(WDI_UpdateVHTOpMode)) ;
19628 if(NULL == wdiTemp)
19629 {
19630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019631 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019632 VOS_ASSERT(0);
19633 return VOS_STATUS_E_NOMEM;
19634 }
19635 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19636 if(NULL == pWdaParams)
19637 {
19638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019639 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019640 VOS_ASSERT(0);
19641 vos_mem_free(wdiTemp);
19642 return VOS_STATUS_E_NOMEM;
19643 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19645 "------> %s Opmode = %d and staid = %d" ,
19646 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019647 wdiTemp->opMode = pData->opMode;
19648 wdiTemp->staId = pData->staId;
19649
19650 pWdaParams->pWdaContext = pWDA;
19651 /* Store Req pointer, as this will be used for response */
19652 pWdaParams->wdaMsgParam = (void *)pData;
19653 /* store Params pass it to WDI */
19654 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19655
19656 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19657
19658 if(IS_WDI_STATUS_FAILURE(status))
19659 {
19660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19661 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19663 vos_mem_free(pWdaParams->wdaMsgParam);
19664 vos_mem_free(pWdaParams);
19665 }
19666 return CONVERT_WDI2VOS_STATUS(status) ;
19667}
19668#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019669
19670/*==========================================================================
19671 FUNCTION WDA_TransportChannelDebug
19672
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019673 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019674 Display Transport Channel debugging information
19675 User may request to display DXE channel snapshot
19676 Or if host driver detects any abnormal stcuk may display
19677
19678 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019679 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019680 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019681 debugFlags : Enable stall detect features
19682 defined by WPAL_DeviceDebugFlags
19683 These features may effect
19684 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019685
19686 RETURN VALUE
19687 NONE
19688
19689===========================================================================*/
19690void WDA_TransportChannelDebug
19691(
schang6295e542013-03-12 15:31:23 -070019692 tpAniSirGlobal pMac,
19693 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019694 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019695)
19696{
Mihir Shete40a55652014-03-02 14:14:47 +053019697 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019698 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019699}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019700
19701/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019702 FUNCTION WDA_TransportKickDxe
19703
19704 DESCRIPTION
19705 Request Kick Dxe when first hdd TX time out
19706 happens
19707
19708 PARAMETERS
19709 NONE
19710
19711 RETURN VALUE
19712 NONE
19713
19714===========================================================================*/
19715void WDA_TransportKickDxe()
19716{
19717 WDI_TransportKickDxe();
19718 return;
19719}
19720
19721
19722/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019723 FUNCTION WDA_SetEnableSSR
19724
19725 DESCRIPTION
19726 API to enable/disable SSR on WDI timeout
19727
19728 PARAMETERS
19729 enableSSR : enable/disable SSR
19730
19731 RETURN VALUE
19732 NONE
19733
19734===========================================================================*/
19735void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19736{
19737 WDI_SetEnableSSR(enableSSR);
19738}
Leo Chang9056f462013-08-01 19:21:11 -070019739
Agrawal Ashish0552be02016-03-02 18:03:43 +053019740/**
19741 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19742 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19743 *
19744 * Return: void
19745 */
19746void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19747{
19748 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19749}
19750
Leo Chang9056f462013-08-01 19:21:11 -070019751#ifdef FEATURE_WLAN_LPHB
19752/*
19753 * FUNCTION: WDA_LPHBconfRspCallback
19754 *
19755 */
19756void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19757{
19758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19759
19760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19761 "<------ %s " ,__func__);
19762 if (NULL == pWdaParams)
19763 {
19764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19765 "%s: pWdaParams received NULL", __func__);
19766 VOS_ASSERT(0) ;
19767 return ;
19768 }
19769
19770 /* Do not need to send notification to upper layer
19771 * Just free allocated resources */
19772 if (pWdaParams != NULL)
19773 {
19774 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19775 {
19776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19777 }
19778 vos_mem_free(pWdaParams->wdaMsgParam) ;
19779 vos_mem_free(pWdaParams) ;
19780 }
19781
19782 return;
19783}
19784
19785/*
19786 * FUNCTION: WDA_ProcessLPHBConfReq
19787 *
19788 */
19789VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19790 tSirLPHBReq *pData)
19791{
19792 WDI_Status wdiStatus;
19793 tWDA_ReqParams *pWdaParams ;
19794
19795 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19796 "------> %s " , __func__);
19797
19798 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19799 if (NULL == pWdaParams)
19800 {
19801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19802 "%s: VOS MEM Alloc Failure", __func__);
19803 VOS_ASSERT(0);
19804 vos_mem_free(pData);
19805 return VOS_STATUS_E_NOMEM;
19806 }
19807
19808 pWdaParams->pWdaContext = pWDA;
19809 pWdaParams->wdaMsgParam = (void *)pData;
19810 pWdaParams->wdaWdiApiMsgParam = NULL;
19811
19812 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19813 if (WDI_STATUS_PENDING == wdiStatus)
19814 {
19815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19816 "Pending received for %s:%d ", __func__, __LINE__);
19817 }
19818 else if (WDI_STATUS_SUCCESS != wdiStatus)
19819 {
19820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19821 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19822 vos_mem_free(pWdaParams->wdaMsgParam);
19823 vos_mem_free(pWdaParams);
19824 }
19825
19826 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19827}
19828#endif /* FEATURE_WLAN_LPHB */
19829
c_hpothu92367912014-05-01 15:18:17 +053019830void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19831 void* pUserData)
19832{
19833 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19834
19835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19836 "<------ %s " ,__func__);
19837 if (NULL == pBcnMissRateInfo)
19838 {
19839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19840 "%s: pWdaParams received NULL", __func__);
19841 VOS_ASSERT(0) ;
19842 return ;
19843 }
19844 if (pBcnMissRateInfo->callback)
19845 {
19846 pBcnMissRateInfo->callback(status, bcnMissRate,
19847 pBcnMissRateInfo->data);
19848 }
19849 vos_mem_free(pUserData);
19850
19851 return;
19852}
19853
19854v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19855 tSirBcnMissRateReq *pData)
19856{
19857 WDI_Status wdiStatus;
19858 tSirBcnMissRateInfo *pBcnMissRateInfo;
19859
19860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19861 "------> %s " , __func__);
19862
19863 pBcnMissRateInfo =
19864 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19865 if (NULL == pBcnMissRateInfo)
19866 {
19867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19868 "%s: VOS MEM Alloc Failure", __func__);
19869 VOS_ASSERT(0);
19870 vos_mem_free(pData);
19871 return;
19872 }
19873
19874 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19875 pBcnMissRateInfo->data = pData->data;
19876
19877 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19878 WDA_GetBcnMissRateCallback,
19879 pData->bssid);
19880 if (WDI_STATUS_PENDING == wdiStatus)
19881 {
19882 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19883 "Pending received for %s:%d ", __func__, __LINE__);
19884 }
19885 else if (WDI_STATUS_SUCCESS != wdiStatus)
19886 {
19887 if (pBcnMissRateInfo->callback)
19888 {
19889 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19890 -1, pBcnMissRateInfo->data);
19891 }
19892 }
19893 vos_mem_free(pData);
19894}
Dino Mycle41bdc942014-06-10 11:30:24 +053019895
19896#ifdef WLAN_FEATURE_EXTSCAN
19897
19898/*==========================================================================
19899 FUNCTION WDA_EXTScanStartRspCallback
19900
19901 DESCRIPTION
19902 API to send EXTScan Start Response to HDD
19903
19904 PARAMETERS
19905 pEventData: Response from FW
19906 pUserData:
19907===========================================================================*/
19908void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19909{
19910 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19911 tWDA_CbContext *pWDA = NULL;
19912 void *pCallbackContext;
19913 tpAniSirGlobal pMac;
19914
19915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19916 "%s:", __func__);
19917 if (NULL == pWdaParams)
19918 {
19919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19920 "%s: pWdaParams received NULL", __func__);
19921 VOS_ASSERT(0);
19922 return;
19923 }
19924
19925 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19926
19927 if (NULL == pWDA)
19928 {
19929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19930 "%s: pWDA received NULL", __func__);
19931 VOS_ASSERT(0);
19932 goto error;
19933 }
19934
19935 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19936 if (NULL == pMac)
19937 {
19938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19939 "%s:pMac is NULL", __func__);
19940 VOS_ASSERT(0);
19941 goto error;
19942 }
19943
19944 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19945
19946 if (pMac->sme.pEXTScanIndCb)
19947 {
19948 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19949 pEventData);
19950 }
19951 else
19952 {
19953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19954 "%s:HDD callback is null", __func__);
19955 VOS_ASSERT(0);
19956 }
19957
19958error:
19959
19960 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19961 {
19962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19963 }
19964 if (pWdaParams->wdaMsgParam != NULL)
19965 {
19966 vos_mem_free(pWdaParams->wdaMsgParam);
19967 }
19968 vos_mem_free(pWdaParams) ;
19969
19970 return;
19971}
19972
19973/*==========================================================================
19974 FUNCTION WDA_EXTScanStopRspCallback
19975
19976 DESCRIPTION
19977 API to send EXTScan Stop Response to HDD
19978
19979 PARAMETERS
19980 pEventData: Response from FW
19981 pUserData:
19982===========================================================================*/
19983void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19984{
19985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19986 tWDA_CbContext *pWDA = NULL;
19987 void *pCallbackContext;
19988 tpAniSirGlobal pMac;
19989
19990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19991 "%s:", __func__);
19992 if (NULL == pWdaParams)
19993 {
19994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19995 "%s: pWdaParams received NULL", __func__);
19996 VOS_ASSERT(0);
19997 return;
19998 }
19999
20000 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20001
20002 if (NULL == pWDA)
20003 {
20004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20005 "%s: pWDA received NULL", __func__);
20006 VOS_ASSERT(0);
20007 goto error;
20008 }
20009
20010 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20011 if (NULL == pMac)
20012 {
20013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20014 "%s:pMac is NULL", __func__);
20015 VOS_ASSERT(0);
20016 goto error;
20017 }
20018 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20019
20020 if (pMac->sme.pEXTScanIndCb)
20021 {
20022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20023 "%s:HDD call back function called", __func__);
20024 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20025 pEventData);
20026 }
20027 else
20028 {
20029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20030 "%s:HDD callback is null", __func__);
20031 VOS_ASSERT(0);
20032 }
20033
20034error:
20035
20036 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20037 {
20038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20039 }
20040 if (pWdaParams->wdaMsgParam != NULL)
20041 {
20042 vos_mem_free(pWdaParams->wdaMsgParam);
20043 }
20044 vos_mem_free(pWdaParams) ;
20045
20046
20047 return;
20048}
20049
20050/*==========================================================================
20051 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20052
20053 DESCRIPTION
20054 API to send EXTScan Get Cached Results Response to HDD
20055
20056 PARAMETERS
20057 pEventData: Response from FW
20058 pUserData:
20059===========================================================================*/
20060void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20061{
20062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20063 tWDA_CbContext *pWDA = NULL;
20064 void *pCallbackContext;
20065 tpAniSirGlobal pMac;
20066
20067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20068 "%s: ", __func__);
20069 if (NULL == pWdaParams)
20070 {
20071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20072 "%s: pWdaParams received NULL", __func__);
20073 VOS_ASSERT(0);
20074 return;
20075 }
20076
20077 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20078
20079 if (NULL == pWDA)
20080 {
20081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20082 "%s: pWDA received NULL", __func__);
20083 VOS_ASSERT(0);
20084 goto error;
20085 }
20086
20087 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20088 if (NULL == pMac)
20089 {
20090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20091 "%s:pMac is NULL", __func__);
20092 VOS_ASSERT(0);
20093 goto error;
20094 }
20095
20096 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20097
20098 if (pMac->sme.pEXTScanIndCb)
20099 {
20100 pMac->sme.pEXTScanIndCb(pCallbackContext,
20101 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20102 pEventData);
20103 }
20104 else
20105 {
20106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20107 "%s:HDD callback is null", __func__);
20108 VOS_ASSERT(0);
20109 }
20110
20111
20112error:
20113
20114 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20115 {
20116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20117 }
20118 if (pWdaParams->wdaMsgParam != NULL)
20119 {
20120 vos_mem_free(pWdaParams->wdaMsgParam);
20121 }
20122 vos_mem_free(pWdaParams) ;
20123
20124 return;
20125}
20126
20127/*==========================================================================
20128 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20129
20130 DESCRIPTION
20131 API to send EXTScan Get Capabilities Response to HDD
20132
20133 PARAMETERS
20134 pEventData: Response from FW
20135 pUserData:
20136===========================================================================*/
20137void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20138{
20139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20140 tWDA_CbContext *pWDA = NULL;
20141 void *pCallbackContext;
20142 tpAniSirGlobal pMac;
20143
20144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20145 "%s:", __func__);
20146 if (NULL == pWdaParams)
20147 {
20148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20149 "%s: pWdaParams received NULL", __func__);
20150 VOS_ASSERT(0);
20151 return;
20152 }
20153
20154 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20155
20156 if (NULL == pWDA)
20157 {
20158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20159 "%s: pWDA received NULL", __func__);
20160 VOS_ASSERT(0);
20161 goto error;
20162 }
20163
20164 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20165 if (NULL == pMac)
20166 {
20167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20168 "%s:pMac is NULL", __func__);
20169 VOS_ASSERT(0);
20170 goto error;
20171 }
20172
20173 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20174
20175 if (pMac->sme.pEXTScanIndCb)
20176 {
20177 pMac->sme.pEXTScanIndCb(pCallbackContext,
20178 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20179 pEventData);
20180 }
20181 else
20182 {
20183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20184 "%s:HDD callback is null", __func__);
20185 VOS_ASSERT(0);
20186 }
20187
20188
20189error:
20190
20191 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20192 {
20193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20194 }
20195 if (pWdaParams->wdaMsgParam != NULL)
20196 {
20197 vos_mem_free(pWdaParams->wdaMsgParam);
20198 }
20199 vos_mem_free(pWdaParams) ;
20200
20201 return;
20202}
20203
20204/*==========================================================================
20205 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20206
20207 DESCRIPTION
20208 API to send EXTScan Set BSSID Hotlist Response to HDD
20209
20210 PARAMETERS
20211 pEventData: Response from FW
20212 pUserData:
20213===========================================================================*/
20214void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20215{
20216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20217 tWDA_CbContext *pWDA = NULL;
20218 void *pCallbackContext;
20219 tpAniSirGlobal pMac;
20220
20221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20222 "%s: ", __func__);
20223 if (NULL == pWdaParams)
20224 {
20225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20226 "%s: pWdaParams received NULL", __func__);
20227 VOS_ASSERT(0) ;
20228 return;
20229 }
20230
20231 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20232
20233 if (NULL == pWDA)
20234 {
20235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20236 "%s: pWDA received NULL", __func__);
20237 VOS_ASSERT(0);
20238 goto error;
20239 }
20240
20241 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20242 if (NULL == pMac)
20243 {
20244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20245 "%s:pMac is NULL", __func__);
20246 VOS_ASSERT(0);
20247 goto error;
20248 }
20249
20250 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20251
20252 if (pMac->sme.pEXTScanIndCb)
20253 {
20254 pMac->sme.pEXTScanIndCb(pCallbackContext,
20255 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20256 pEventData);
20257 }
20258 else
20259 {
20260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20261 "%s:HDD callback is null", __func__);
20262 VOS_ASSERT(0);
20263 }
20264
20265
20266error:
20267
20268 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20269 {
20270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20271 }
20272 if (pWdaParams->wdaMsgParam != NULL)
20273 {
20274 vos_mem_free(pWdaParams->wdaMsgParam);
20275 }
20276 vos_mem_free(pWdaParams) ;
20277
20278 return;
20279}
20280
20281/*==========================================================================
20282 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20283
20284 DESCRIPTION
20285 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20286
20287 PARAMETERS
20288 pEventData: Response from FW
20289 pUserData:
20290===========================================================================*/
20291void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20292{
20293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20294 tWDA_CbContext *pWDA = NULL;
20295 void *pCallbackContext;
20296 tpAniSirGlobal pMac;
20297
20298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20299 "%s:", __func__);
20300 if (NULL == pWdaParams)
20301 {
20302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20303 "%s: pWdaParams received NULL", __func__);
20304 VOS_ASSERT(0) ;
20305 return;
20306 }
20307
20308 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20309
20310 if (NULL == pWDA)
20311 {
20312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20313 "%s: pWDA received NULL", __func__);
20314 VOS_ASSERT(0);
20315 goto error;
20316 }
20317
20318 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20319 if (NULL == pMac)
20320 {
20321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20322 "%s:pMac is NULL", __func__);
20323 VOS_ASSERT(0);
20324 goto error;
20325 }
20326
20327 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20328
20329 if (pMac->sme.pEXTScanIndCb)
20330 {
20331 pMac->sme.pEXTScanIndCb(pCallbackContext,
20332 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20333 pEventData);
20334 }
20335 else
20336 {
20337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20338 "%s:HDD callback is null", __func__);
20339 VOS_ASSERT(0);
20340 }
20341
20342
20343error:
20344
20345 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20346 {
20347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20348 }
20349 if (pWdaParams->wdaMsgParam != NULL)
20350 {
20351 vos_mem_free(pWdaParams->wdaMsgParam);
20352 }
20353 vos_mem_free(pWdaParams) ;
20354
20355 return;
20356}
20357
20358/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020359 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20360
20361 DESCRIPTION
20362 API to send EXTScan Set SSID Hotlist Response to HDD
20363
20364 PARAMETERS
20365 pEventData: Response from FW
20366 pUserData:
20367===========================================================================*/
20368void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20369{
20370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20371 tWDA_CbContext *pWDA = NULL;
20372 void *pCallbackContext;
20373 tpAniSirGlobal pMac;
20374
20375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20376 "%s: ", __func__);
20377 if (NULL == pWdaParams)
20378 {
20379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20380 "%s: pWdaParams received NULL", __func__);
20381 VOS_ASSERT(0) ;
20382 return;
20383 }
20384
20385 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20386
20387 if (NULL == pWDA)
20388 {
20389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20390 "%s: pWDA received NULL", __func__);
20391 VOS_ASSERT(0);
20392 goto error;
20393 }
20394
20395 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20396 if (NULL == pMac)
20397 {
20398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20399 "%s:pMac is NULL", __func__);
20400 VOS_ASSERT(0);
20401 goto error;
20402 }
20403
20404 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20405
20406 if (pMac->sme.pEXTScanIndCb)
20407 {
20408 pMac->sme.pEXTScanIndCb(pCallbackContext,
20409 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20410 pEventData);
20411 }
20412 else
20413 {
20414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20415 "%s:HDD callback is null", __func__);
20416 VOS_ASSERT(0);
20417 }
20418
20419
20420error:
20421
20422 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20423 {
20424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20425 }
20426 if (pWdaParams->wdaMsgParam != NULL)
20427 {
20428 vos_mem_free(pWdaParams->wdaMsgParam);
20429 }
20430 vos_mem_free(pWdaParams) ;
20431
20432 return;
20433}
20434
20435/*==========================================================================
20436 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20437
20438 DESCRIPTION
20439 API to send EXTScan ReSet SSID Hotlist Response to HDD
20440
20441 PARAMETERS
20442 pEventData: Response from FW
20443 pUserData:
20444===========================================================================*/
20445void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20446{
20447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20448 tWDA_CbContext *pWDA = NULL;
20449 void *pCallbackContext;
20450 tpAniSirGlobal pMac;
20451
20452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20453 "%s:", __func__);
20454 if (NULL == pWdaParams)
20455 {
20456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20457 "%s: pWdaParams received NULL", __func__);
20458 VOS_ASSERT(0) ;
20459 return;
20460 }
20461
20462 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20463
20464 if (NULL == pWDA)
20465 {
20466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20467 "%s: pWDA received NULL", __func__);
20468 VOS_ASSERT(0);
20469 goto error;
20470 }
20471
20472 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20473 if (NULL == pMac)
20474 {
20475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20476 "%s:pMac is NULL", __func__);
20477 VOS_ASSERT(0);
20478 goto error;
20479 }
20480
20481 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20482
20483 if (pMac->sme.pEXTScanIndCb)
20484 {
20485 pMac->sme.pEXTScanIndCb(pCallbackContext,
20486 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20487 pEventData);
20488 }
20489 else
20490 {
20491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20492 "%s:HDD callback is null", __func__);
20493 VOS_ASSERT(0);
20494 }
20495
20496
20497error:
20498
20499 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20500 {
20501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20502 }
20503 if (pWdaParams->wdaMsgParam != NULL)
20504 {
20505 vos_mem_free(pWdaParams->wdaMsgParam);
20506 }
20507 vos_mem_free(pWdaParams) ;
20508
20509 return;
20510}
20511
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020512/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020513 FUNCTION WDA_ProcessEXTScanStartReq
20514
20515 DESCRIPTION
20516 API to send EXTScan Start Request to WDI
20517
20518 PARAMETERS
20519 pWDA: Pointer to WDA context
20520 wdaRequest: Pointer to EXTScan req parameters
20521===========================================================================*/
20522VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20523 tSirEXTScanStartReqParams *wdaRequest)
20524{
20525 WDI_Status status = WDI_STATUS_SUCCESS;
20526 tWDA_ReqParams *pWdaParams;
20527
20528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20529 "%s: ", __func__);
20530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20531 if (NULL == pWdaParams)
20532 {
20533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20534 "%s: VOS MEM Alloc Failure", __func__);
20535 VOS_ASSERT(0);
20536 return VOS_STATUS_E_NOMEM;
20537 }
20538 pWdaParams->pWdaContext = pWDA;
20539 pWdaParams->wdaMsgParam = wdaRequest;
20540 pWdaParams->wdaWdiApiMsgParam = NULL;
20541
20542 status = WDI_EXTScanStartReq((void *)wdaRequest,
20543 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20544 (void *)pWdaParams);
20545 if (IS_WDI_STATUS_FAILURE(status))
20546 {
20547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20548 "Failure to request. Free all the memory " );
20549 vos_mem_free(pWdaParams->wdaMsgParam);
20550 vos_mem_free(pWdaParams);
20551 }
20552 return CONVERT_WDI2VOS_STATUS(status);
20553}
20554
20555/*==========================================================================
20556 FUNCTION WDA_ProcessEXTScanStopReq
20557
20558 DESCRIPTION
20559 API to send EXTScan Start Request to WDI
20560
20561 PARAMETERS
20562 pWDA: Pointer to WDA context
20563 wdaRequest: Pointer to EXTScan req parameters
20564===========================================================================*/
20565VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20566 tSirEXTScanStopReqParams *wdaRequest)
20567{
20568 WDI_Status status = WDI_STATUS_SUCCESS;
20569 tWDA_ReqParams *pWdaParams;
20570
20571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20572 "%s:", __func__);
20573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20574 if (NULL == pWdaParams)
20575 {
20576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20577 "%s: VOS MEM Alloc Failure", __func__);
20578 VOS_ASSERT(0);
20579 return VOS_STATUS_E_NOMEM;
20580 }
20581 pWdaParams->pWdaContext = pWDA;
20582 pWdaParams->wdaMsgParam = wdaRequest;
20583 pWdaParams->wdaWdiApiMsgParam = NULL;
20584
20585 status = WDI_EXTScanStopReq((void *)wdaRequest,
20586 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20587 (void *)pWdaParams);
20588 if (IS_WDI_STATUS_FAILURE(status))
20589 {
20590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20591 "Failure to request. Free all the memory " );
20592 vos_mem_free(pWdaParams->wdaMsgParam);
20593 vos_mem_free(pWdaParams);
20594 }
20595 return CONVERT_WDI2VOS_STATUS(status);
20596}
20597
20598/*==========================================================================
20599 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20600
20601 DESCRIPTION
20602 API to send EXTScan Get Cached Results Request to WDI
20603
20604 PARAMETERS
20605 pWDA: Pointer to WDA context
20606 wdaRequest: Pointer to EXTScan req parameters
20607===========================================================================*/
20608VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20609 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20610{
20611 WDI_Status status = WDI_STATUS_SUCCESS;
20612 tWDA_ReqParams *pWdaParams;
20613
20614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20615 "%s: ", __func__);
20616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20617 if (NULL == pWdaParams)
20618 {
20619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20620 "%s: VOS MEM Alloc Failure", __func__);
20621 VOS_ASSERT(0);
20622 return VOS_STATUS_E_NOMEM;
20623 }
20624 pWdaParams->pWdaContext = pWDA;
20625 pWdaParams->wdaMsgParam = wdaRequest;
20626 pWdaParams->wdaWdiApiMsgParam = NULL;
20627
20628 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20629 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20630 (void *)pWdaParams);
20631 if (IS_WDI_STATUS_FAILURE(status))
20632 {
20633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20634 "Failure to request. Free all the memory " );
20635 vos_mem_free(pWdaParams->wdaMsgParam);
20636 vos_mem_free(pWdaParams);
20637 }
20638 return CONVERT_WDI2VOS_STATUS(status);
20639}
20640
20641/*==========================================================================
20642 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20643
20644 DESCRIPTION
20645 API to send EXTScan Get Capabilities Request to WDI
20646
20647 PARAMETERS
20648 pWDA: Pointer to WDA context
20649 wdaRequest: Pointer to EXTScan req parameters
20650===========================================================================*/
20651VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20652 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20653{
20654 WDI_Status status = WDI_STATUS_SUCCESS;
20655 tWDA_ReqParams *pWdaParams;
20656
20657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20658 "%s:", __func__);
20659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20660 if (NULL == pWdaParams)
20661 {
20662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20663 "%s: VOS MEM Alloc Failure", __func__);
20664 VOS_ASSERT(0);
20665 return VOS_STATUS_E_NOMEM;
20666 }
20667 pWdaParams->pWdaContext = pWDA;
20668 pWdaParams->wdaMsgParam = wdaRequest;
20669 pWdaParams->wdaWdiApiMsgParam = NULL;
20670
20671 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20672 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20673 (void *)pWdaParams);
20674 if (IS_WDI_STATUS_FAILURE(status))
20675 {
20676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20677 "Failure to request. Free all the memory " );
20678 vos_mem_free(pWdaParams->wdaMsgParam);
20679 vos_mem_free(pWdaParams);
20680 }
20681 return CONVERT_WDI2VOS_STATUS(status);
20682}
20683
20684/*==========================================================================
20685 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20686
20687 DESCRIPTION
20688 API to send Set BSSID Hotlist Request to WDI
20689
20690 PARAMETERS
20691 pWDA: Pointer to WDA context
20692 wdaRequest: Pointer to EXTScan req parameters
20693===========================================================================*/
20694VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20695 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20696{
20697 WDI_Status status = WDI_STATUS_SUCCESS;
20698 tWDA_ReqParams *pWdaParams;
20699
20700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20701 "%s: ", __func__);
20702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20703 if (NULL == pWdaParams)
20704 {
20705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20706 "%s: VOS MEM Alloc Failure", __func__);
20707 VOS_ASSERT(0);
20708 return VOS_STATUS_E_NOMEM;
20709 }
20710 pWdaParams->pWdaContext = pWDA;
20711 pWdaParams->wdaMsgParam = wdaRequest;
20712 pWdaParams->wdaWdiApiMsgParam = NULL;
20713
20714 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20715 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20716 (void *)pWdaParams);
20717 if (IS_WDI_STATUS_FAILURE(status))
20718 {
20719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20720 "Failure to request. Free all the memory " );
20721 vos_mem_free(pWdaParams->wdaMsgParam);
20722 vos_mem_free(pWdaParams);
20723 }
20724 return CONVERT_WDI2VOS_STATUS(status);
20725}
20726
20727/*==========================================================================
20728 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20729
20730 DESCRIPTION
20731 API to send Reset BSSID Hotlist Request to WDI
20732
20733 PARAMETERS
20734 pWDA: Pointer to WDA context
20735 wdaRequest: Pointer to EXTScan req parameters
20736===========================================================================*/
20737VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20738 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20739{
20740 WDI_Status status = WDI_STATUS_SUCCESS;
20741 tWDA_ReqParams *pWdaParams;
20742
20743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20744 "%s:", __func__);
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 return VOS_STATUS_E_NOMEM;
20752 }
20753 pWdaParams->pWdaContext = pWDA;
20754 pWdaParams->wdaMsgParam = wdaRequest;
20755 pWdaParams->wdaWdiApiMsgParam = NULL;
20756
20757 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20758 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20759 (void *)pWdaParams);
20760 if (IS_WDI_STATUS_FAILURE(status))
20761 {
20762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20763 "Failure to request. Free all the memory " );
20764 vos_mem_free(pWdaParams->wdaMsgParam);
20765 vos_mem_free(pWdaParams);
20766 }
20767 return CONVERT_WDI2VOS_STATUS(status);
20768}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020769
20770/*==========================================================================
20771 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20772
20773 DESCRIPTION
20774 API to send Set SSID Hotlist Request to WDI
20775
20776 PARAMETERS
20777 pWDA: Pointer to WDA context
20778 wdaRequest: Pointer to EXTScan req parameters
20779===========================================================================*/
20780VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20781 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20782{
20783 WDI_Status status = WDI_STATUS_SUCCESS;
20784 tWDA_ReqParams *pWdaParams;
20785
20786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20787 "%s: ", __func__);
20788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20789 if (NULL == pWdaParams)
20790 {
20791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20792 "%s: VOS MEM Alloc Failure", __func__);
20793 VOS_ASSERT(0);
20794 return VOS_STATUS_E_NOMEM;
20795 }
20796 pWdaParams->pWdaContext = pWDA;
20797 pWdaParams->wdaMsgParam = wdaRequest;
20798 pWdaParams->wdaWdiApiMsgParam = NULL;
20799
20800 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20801 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20802 (void *)pWdaParams);
20803 if (IS_WDI_STATUS_FAILURE(status))
20804 {
20805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20806 "Failure to request. Free all the memory " );
20807 vos_mem_free(pWdaParams->wdaMsgParam);
20808 vos_mem_free(pWdaParams);
20809 }
20810 return CONVERT_WDI2VOS_STATUS(status);
20811}
20812
20813/*==========================================================================
20814 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20815
20816 DESCRIPTION
20817 API to send Reset SSID Hotlist Request to WDI
20818
20819 PARAMETERS
20820 pWDA: Pointer to WDA context
20821 wdaRequest: Pointer to EXTScan req parameters
20822===========================================================================*/
20823VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20824 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20825{
20826 WDI_Status status = WDI_STATUS_SUCCESS;
20827 tWDA_ReqParams *pWdaParams;
20828
20829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20830 "%s:", __func__);
20831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20832 if (NULL == pWdaParams)
20833 {
20834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20835 "%s: VOS MEM Alloc Failure", __func__);
20836 VOS_ASSERT(0);
20837 return VOS_STATUS_E_NOMEM;
20838 }
20839 pWdaParams->pWdaContext = pWDA;
20840 pWdaParams->wdaMsgParam = wdaRequest;
20841 pWdaParams->wdaWdiApiMsgParam = NULL;
20842
20843 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20844 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20845 (void *)pWdaParams);
20846 if (IS_WDI_STATUS_FAILURE(status))
20847 {
20848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20849 "Failure to request. Free all the memory " );
20850 vos_mem_free(pWdaParams->wdaMsgParam);
20851 vos_mem_free(pWdaParams);
20852 }
20853 return CONVERT_WDI2VOS_STATUS(status);
20854}
20855
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020856/*==========================================================================
20857 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20858
20859 DESCRIPTION
20860 API to send Reset SSID Hotlist Request to WDI
20861
20862 PARAMETERS
20863 pWDA: Pointer to WDA context
20864 wdaRequest: Pointer to EXTScan req parameters
20865===========================================================================*/
20866VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20867 tSirHighPriorityDataInfoInd *wdaRequest)
20868{
20869 WDI_Status status = WDI_STATUS_SUCCESS;
20870
20871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20872 "%s:", __func__);
20873
20874 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20875 if (WDI_STATUS_PENDING == status)
20876 {
20877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20878 FL("pending status received "));
20879 }
20880 else if (WDI_STATUS_SUCCESS_SYNC != status)
20881 {
20882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20883 FL("Failure status %d"), status);
20884 }
20885 return CONVERT_WDI2VOS_STATUS(status);
20886}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020887
Dino Mycle41bdc942014-06-10 11:30:24 +053020888#endif /* WLAN_FEATURE_EXTSCAN */
20889
Sunil Duttbd736ed2014-05-26 21:19:41 +053020890#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20891
20892/*==========================================================================
20893 FUNCTION WDA_LLStatsSetRspCallback
20894
20895 DESCRIPTION
20896 API to process set link layer statistics response from FW
20897
20898 PARAMETERS
20899 pRsp: Pointer to set link layer statistics response
20900 pUserData: Pointer to user data
20901
20902 RETURN VALUE
20903 NONE
20904
20905===========================================================================*/
20906void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20907{
20908 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20909
20910
20911 if (NULL == pWdaParams)
20912 {
20913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20914 "%s: pWdaParams received NULL", __func__);
20915 VOS_ASSERT(0) ;
20916 return ;
20917 }
20918
20919 /* Do not need to send notification to upper layer
20920 * Just free allocated resources */
20921 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20922 {
20923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20924 }
20925 if (pWdaParams->wdaMsgParam != NULL)
20926 {
20927 vos_mem_free(pWdaParams->wdaMsgParam);
20928 }
20929 vos_mem_free(pWdaParams) ;
20930
20931 return;
20932}
20933
20934/*==========================================================================
20935 FUNCTION WDA_ProcessLLStatsSetReq
20936
20937 DESCRIPTION
20938 API to send Set Link Layer Stats request to WDI
20939
20940 PARAMETERS
20941 pWDA: Pointer to WDA context
20942 wdaRequest: Pointer to set Link Layer Stats req parameters
20943===========================================================================*/
20944VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20945 tSirLLStatsSetReq *wdaRequest)
20946{
20947 WDI_Status status = WDI_STATUS_SUCCESS;
20948 tWDA_ReqParams *pWdaParams;
20949
20950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20951 if (NULL == pWdaParams)
20952 {
20953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20954 "%s: VOS MEM Alloc Failure", __func__);
20955 VOS_ASSERT(0);
20956 return VOS_STATUS_E_NOMEM;
20957 }
20958 pWdaParams->pWdaContext = pWDA;
20959 pWdaParams->wdaMsgParam = wdaRequest;
20960 pWdaParams->wdaWdiApiMsgParam = NULL;
20961
20962 status = WDI_LLStatsSetReq((void *)wdaRequest,
20963 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20964 (void *)pWdaParams);
20965 if (IS_WDI_STATUS_FAILURE(status))
20966 {
20967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20968 "Failure to request. Free all the memory " );
20969 vos_mem_free(pWdaParams->wdaMsgParam);
20970 vos_mem_free(pWdaParams);
20971 }
20972 return CONVERT_WDI2VOS_STATUS(status);
20973}
20974
20975/*==========================================================================
20976 FUNCTION WDA_LLStatsGetRspCallback
20977
20978 DESCRIPTION
20979 API to process get link layer statistics response from FW
20980
20981 PARAMETERS
20982 pRsp: Pointer to get link layer statistics response
20983 pUserData: Pointer to user data
20984
20985 RETURN VALUE
20986 NONE
20987
20988===========================================================================*/
20989void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20990{
20991 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20992
20993 if (NULL == pWdaParams)
20994 {
20995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20996 "%s: pWdaParams received NULL", __func__);
20997 VOS_ASSERT(0) ;
20998 return ;
20999 }
21000
21001 /* Do not need to send notification to upper layer
21002 * Just free allocated resources */
21003 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21004 {
21005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21006 }
21007 if (pWdaParams->wdaMsgParam != NULL)
21008 {
21009 vos_mem_free(pWdaParams->wdaMsgParam);
21010 }
21011 vos_mem_free(pWdaParams) ;
21012
21013 return;
21014}
21015
21016/*==========================================================================
21017 FUNCTION WDA_ProcessLLStatsGetReq
21018
21019 DESCRIPTION
21020 API to send Get Link Layer Stats request to WDI
21021
21022 PARAMETERS
21023 pWDA: Pointer to WDA context
21024 wdaRequest: Pointer to get Link Layer Stats req parameters
21025===========================================================================*/
21026VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21027 tSirLLStatsGetReq *wdaRequest)
21028{
21029 WDI_Status status = WDI_STATUS_SUCCESS;
21030 tWDA_ReqParams *pWdaParams;
21031
21032 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21033 if (NULL == pWdaParams)
21034 {
21035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21036 "%s: VOS MEM Alloc Failure", __func__);
21037 VOS_ASSERT(0);
21038 return VOS_STATUS_E_NOMEM;
21039 }
21040 pWdaParams->pWdaContext = pWDA;
21041 pWdaParams->wdaMsgParam = wdaRequest;
21042 pWdaParams->wdaWdiApiMsgParam = NULL;
21043
21044 status = WDI_LLStatsGetReq((void *) wdaRequest,
21045 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21046 (void *)pWdaParams);
21047 if (IS_WDI_STATUS_FAILURE(status))
21048 {
21049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21050 "Failure to request. Free all the memory " );
21051 vos_mem_free(pWdaParams->wdaMsgParam);
21052 vos_mem_free(pWdaParams);
21053 }
21054 return CONVERT_WDI2VOS_STATUS(status);
21055}
21056
21057/*==========================================================================
21058 FUNCTION WDA_LLStatsClearRspCallback
21059
21060 DESCRIPTION
21061 API to process clear link layer statistics response from FW
21062
21063 PARAMETERS
21064 pRsp: Pointer to clear link layer statistics response
21065 pUserData: Pointer to user data
21066
21067 RETURN VALUE
21068 NONE
21069
21070===========================================================================*/
21071void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21072{
21073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21074
21075
21076 if (NULL == pWdaParams)
21077 {
21078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21079 "%s: pWdaParams received NULL", __func__);
21080 VOS_ASSERT(0) ;
21081 return ;
21082 }
21083 /* Do not need to send notification to upper layer
21084 * Just free allocated resources */
21085 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21086 {
21087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21088 }
21089 if (pWdaParams->wdaMsgParam != NULL)
21090 {
21091 vos_mem_free(pWdaParams->wdaMsgParam);
21092 }
21093 vos_mem_free(pWdaParams) ;
21094 return;
21095}
21096
21097/*==========================================================================
21098 FUNCTION WDA_ProcessLLStatsClearReq
21099
21100 DESCRIPTION
21101 API to send Clear Link Layer Stats request to WDI
21102
21103 PARAMETERS
21104 pWDA: Pointer to WDA context
21105 wdaRequest: Pointer to earLink Layer Stats req
21106===========================================================================*/
21107VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21108 tSirLLStatsClearReq *wdaRequest)
21109{
21110 WDI_Status status = WDI_STATUS_SUCCESS;
21111 tWDA_ReqParams *pWdaParams;
21112
21113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21114 if (NULL == pWdaParams)
21115 {
21116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21117 "%s: VOS MEM Alloc Failure", __func__);
21118 VOS_ASSERT(0);
21119 return VOS_STATUS_E_NOMEM;
21120 }
21121 pWdaParams->pWdaContext = pWDA;
21122 pWdaParams->wdaMsgParam = wdaRequest;
21123 pWdaParams->wdaWdiApiMsgParam = NULL;
21124
21125 status = WDI_LLStatsClearReq((void *) wdaRequest,
21126 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21127 (void *)pWdaParams);
21128 if (IS_WDI_STATUS_FAILURE(status))
21129 {
21130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21131 "Failure to request. Free all the memory " );
21132 vos_mem_free(pWdaParams->wdaMsgParam);
21133 vos_mem_free(pWdaParams);
21134 }
21135 return CONVERT_WDI2VOS_STATUS(status);
21136}
21137
21138#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021139
Abhishek Singh85b74712014-10-08 11:38:19 +053021140void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21141{
21142 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21143
21144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21145 "<------ %s " ,__func__);
21146 if (NULL == fwStatsinfo)
21147 {
21148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21149 "%s: pWdaParams received NULL", __func__);
21150 VOS_ASSERT(0);
21151 return;
21152 }
21153
21154 if(fwStatsinfo->callback)
21155 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21156
21157 vos_mem_free(pUserData);
21158 return;
21159}
21160
21161
21162v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21163 tSirFWStatsGetReq *pData)
21164{
21165
21166 WDI_Status wdiStatus;
21167 tSirFWStatsInfo *fwStatsinfo;
21168
21169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21170 "------> %s" , __func__);
21171
21172 fwStatsinfo =
21173 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21174 if (NULL == fwStatsinfo)
21175 {
21176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21177 "%s: VOS MEM Alloc Failure", __func__);
21178 VOS_ASSERT(0);
21179 vos_mem_free(pData);
21180 return;
21181 }
21182
21183 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21184 fwStatsinfo->data = pData->data;
21185
21186 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21187 WDA_FWStatsGetRspCallback,
21188 pData->stats);
21189 if (WDI_STATUS_PENDING == wdiStatus)
21190 {
21191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21192 "Pending received for %s:%d ", __func__, __LINE__);
21193 }
21194 else if (WDI_STATUS_SUCCESS != wdiStatus)
21195 {
21196 if (fwStatsinfo->callback)
21197 {
21198 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21199 }
21200 vos_mem_free(fwStatsinfo);
21201 }
21202 vos_mem_free(pData);
21203}
21204
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021205/*==========================================================================
21206 FUNCTION WDA_EncryptMsgRspCallback
21207
21208 DESCRIPTION
21209 API to send Encrypt message response to HDD
21210
21211 PARAMETERS
21212 pEventData: Response from FW
21213 pUserData: Data sent to firmware as part of request
21214===========================================================================*/
21215void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21216 void* pUserData)
21217{
21218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21219 tWDA_CbContext *pWDA = NULL;
21220 tpAniSirGlobal pMac;
21221 vos_msg_t vosMsg;
21222 tpSirEncryptedDataRspParams pEncRspParams;
21223 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21224
21225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21226 FL("%s:"), __func__);
21227 if (NULL == pWdaParams)
21228 {
21229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21230 FL("%s: pWdaParams received NULL"), __func__);
21231 VOS_ASSERT(0);
21232 return;
21233 }
21234
21235 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21236
21237 if (NULL == pWDA)
21238 {
21239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21240 FL("%s: pWDA received NULL"), __func__);
21241 VOS_ASSERT(0);
21242 goto error;
21243 }
21244
21245 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21246 if (NULL == pMac)
21247 {
21248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21249 FL("%s:pMac is NULL"), __func__);
21250 VOS_ASSERT(0);
21251 goto error;
21252 }
21253
21254 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21255
21256 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21257 if (NULL == pEncRspParams)
21258 {
21259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21260 FL("%s: VOS MEM Alloc Failure"), __func__);
21261 VOS_ASSERT(0);
21262 goto error;
21263 }
21264
21265 /* Message Header */
21266 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21267 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21268 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21269 pEncryptedDataRsp->encryptedPayload.length;
21270 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21271 pEncryptedDataRsp->encryptedPayload.data,
21272 pEncryptedDataRsp->encryptedPayload.length);
21273
21274 /* VOS message wrapper */
21275 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21276 vosMsg.bodyptr = (void *)pEncRspParams;
21277 vosMsg.bodyval = 0;
21278
21279 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21280 {
21281 /* free the mem */
21282 vos_mem_free((v_VOID_t *) pEncRspParams);
21283 }
21284
21285error:
21286
21287 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21288 {
21289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21290 }
21291 if (pWdaParams->wdaMsgParam != NULL)
21292 {
21293 vos_mem_free(pWdaParams->wdaMsgParam);
21294 }
21295 vos_mem_free(pWdaParams) ;
21296
21297 return;
21298}
21299/*==========================================================================
21300 FUNCTION WDA_ProcessEncryptMsgReq
21301
21302 DESCRIPTION
21303 API to send Encrypt message Request to WDI
21304
21305 PARAMETERS
21306 pWDA: Pointer to WDA context
21307 wdaRequest: Pointer to Encrypt_msg req parameters
21308===========================================================================*/
21309VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21310 u8 *wdaRequest)
21311{
21312 WDI_Status status = WDI_STATUS_SUCCESS;
21313 tWDA_ReqParams *pWdaParams;
21314
21315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21316 FL("%s: "), __func__);
21317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21318 if (NULL == pWdaParams)
21319 {
21320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21321 FL("%s: VOS MEM Alloc Failure"), __func__);
21322 VOS_ASSERT(0);
21323 return VOS_STATUS_E_NOMEM;
21324 }
21325 pWdaParams->pWdaContext = pWDA;
21326 pWdaParams->wdaMsgParam = wdaRequest;
21327 pWdaParams->wdaWdiApiMsgParam = NULL;
21328
21329 status = WDI_EncryptMsgReq((void *)wdaRequest,
21330 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21331 (void *)pWdaParams);
21332 if (IS_WDI_STATUS_FAILURE(status))
21333 {
21334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21335 FL("Failure to request. Free all the memory " ));
21336 vos_mem_free(pWdaParams->wdaMsgParam);
21337 vos_mem_free(pWdaParams);
21338 }
21339 return CONVERT_WDI2VOS_STATUS(status);
21340}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021341/*==========================================================================
21342 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21343
21344 DESCRIPTION
21345 API to enable/disable RTS/CTS for different modes.
21346
21347 PARAMETERS
21348 pWDA: Pointer to WDA context
21349 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21350===========================================================================*/
21351
21352VOS_STATUS
21353WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21354 tANI_U32 rtsCtsVal)
21355{
21356 WDI_Status status;
21357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21358 FL("---> %s"), __func__);
21359 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21360 if (WDI_STATUS_PENDING == status)
21361 {
21362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21363 FL("pending status received "));
21364 }
21365 else if (WDI_STATUS_SUCCESS_SYNC != status)
21366 {
21367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21368 FL("Failure status %d"), status);
21369 }
21370 return CONVERT_WDI2VOS_STATUS(status) ;
21371}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021372
21373void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021374{
21375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021376 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021377
21378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21379 "<------ %s " ,__func__);
21380 if (NULL == pWdaParams)
21381 {
21382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21383 "%s: pWdaParams received NULL", __func__);
21384 VOS_ASSERT(0) ;
21385 return ;
21386 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021387 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21388 if (pData != NULL) {
21389 pData->callback(pData->magic, pData->cmpVar);
21390 vos_mem_free(pWdaParams->wdaMsgParam);
21391 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021392 vos_mem_free(pWdaParams) ;
21393
21394 return;
21395}
21396
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021397VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021398{
21399
21400 WDI_Status status = WDI_STATUS_SUCCESS;
21401 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021402 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021403
21404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21405 FL("%s: "), __func__);
21406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21407 if (NULL == pWdaParams)
21408 {
21409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21410 FL("%s: VOS MEM Alloc Failure"), __func__);
21411 VOS_ASSERT(0);
21412 return VOS_STATUS_E_NOMEM;
21413 }
21414 pWdaParams->pWdaContext = pWDA;
21415 pWdaParams->wdaMsgParam = wdaRequest;
21416 pWdaParams->wdaWdiApiMsgParam = NULL;
21417
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021418 status = WDI_MonStartReq(pMonModeData->data,
21419 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021420 (void *)pWdaParams);
21421 if (IS_WDI_STATUS_FAILURE(status))
21422 {
21423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21424 "Failure to request. Free all the memory " );
21425 vos_mem_free(pWdaParams->wdaMsgParam);
21426 vos_mem_free(pWdaParams);
21427 }
21428 return CONVERT_WDI2VOS_STATUS(status);
21429}
21430
Katya Nigamf0511f62015-05-05 16:40:57 +053021431VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21432{
21433
21434 WDI_Status status = WDI_STATUS_SUCCESS;
21435 tWDA_ReqParams *pWdaParams;
21436
21437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21438 FL("%s: "), __func__);
21439 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21440 if (NULL == pWdaParams)
21441 {
21442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21443 FL("%s: VOS MEM Alloc Failure"), __func__);
21444 VOS_ASSERT(0);
21445 return VOS_STATUS_E_NOMEM;
21446 }
21447 pWdaParams->pWdaContext = pWDA;
21448 pWdaParams->wdaMsgParam = wdaRequest;
21449 pWdaParams->wdaWdiApiMsgParam = NULL;
21450
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21452 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021453 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021454 (void *)pWdaParams);
21455
21456 if (IS_WDI_STATUS_FAILURE(status))
21457 {
21458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21459 "Failure to request. Free all the memory " );
21460 vos_mem_free(pWdaParams->wdaMsgParam);
21461 vos_mem_free(pWdaParams);
21462 }
21463 return CONVERT_WDI2VOS_STATUS(status);
21464}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021465
21466VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21467{
21468 WDI_Status status;
21469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21470 FL("---> %s"), __func__);
21471 status = WDI_EnableDisableCAEventInd(val);
21472 if (WDI_STATUS_PENDING == status)
21473 {
21474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21475 FL("pending status received "));
21476 }
21477 else if (WDI_STATUS_SUCCESS_SYNC != status)
21478 {
21479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21480 FL("Failure status %d"), status);
21481 }
21482 return CONVERT_WDI2VOS_STATUS(status) ;
21483}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021484
21485/*==========================================================================
21486 FUNCTION WDA_WifiConfigSetRspCallback
21487
21488 DESCRIPTION
21489 API to process set WifiConfig response from FW
21490
21491 PARAMETERS
21492 pRsp: Pointer to set WifiConfig response
21493 pUserData: Pointer to user data
21494
21495 RETURN VALUE
21496 NONE
21497
21498===========================================================================*/
21499void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21500{
21501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21502
21503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21504 "<------ %s " ,__func__);
21505
21506 if(NULL == pWdaParams)
21507 {
21508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21509 "%s: pWdaParams received NULL", __func__);
21510 VOS_ASSERT(0);
21511 return ;
21512 }
21513
21514 if(NULL == pWdaParams->wdaMsgParam)
21515 {
21516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21517 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21518 VOS_ASSERT(0);
21519 vos_mem_free(pWdaParams);
21520 return ;
21521 }
21522
21523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21524 vos_mem_free(pWdaParams->wdaMsgParam);
21525 vos_mem_free(pWdaParams);
21526
21527 return;
21528}
21529
21530/*==========================================================================
21531 FUNCTION WDA_ProcessWifiConfigReq
21532
21533 DESCRIPTION
21534 API to send Set WifiConfig params request to WDI
21535
21536 PARAMETERS
21537 pWDA: Pointer to WDA context
21538 wdaRequest: Pointer to set WifiConfig req parameters
21539===========================================================================*/
21540
21541VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21542 tSetWifiConfigParams *pwdaWificonfig)
21543{
21544 WDI_Status status = WDI_STATUS_SUCCESS;
21545 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21546 tWDA_ReqParams *pWdaParams ;
21547 WDI_Status wstatus;
21548
21549 /* Sanity Check*/
21550 if(NULL == pwdaWificonfig)
21551 {
21552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21553 "%s: tSetWifiConfigParams received NULL", __func__);
21554 VOS_ASSERT(0) ;
21555 return VOS_STATUS_E_FAULT;
21556 }
21557
21558 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21559 sizeof(WDI_WifiConfigSetReqType));
21560 if(NULL == pwdiWifConfigSetReqParams)
21561 {
21562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21563 "%s: VOS MEM Alloc Failure", __func__);
21564 VOS_ASSERT(0);
21565 vos_mem_free(pwdaWificonfig);
21566 return VOS_STATUS_E_NOMEM;
21567 }
21568
21569 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21570 if(NULL == pWdaParams)
21571 {
21572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21573 "%s: VOS MEM Alloc Failure", __func__);
21574 VOS_ASSERT(0);
21575 vos_mem_free(pwdiWifConfigSetReqParams);
21576 vos_mem_free(pwdaWificonfig);
21577 return VOS_STATUS_E_NOMEM;
21578 }
21579 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21580 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21581 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21582 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21583
21584 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021585 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021586 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21587
21588 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21589 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21590 pWdaParams);
21591 if(IS_WDI_STATUS_FAILURE(wstatus))
21592 {
21593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21594 "Failure in sendind WifiConfigReq, free all the memory" );
21595 status = CONVERT_WDI2VOS_STATUS(wstatus);
21596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21597 vos_mem_free(pWdaParams->wdaMsgParam);
21598 vos_mem_free(pWdaParams);
21599 }
21600
21601 return status;
21602
21603}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021604
21605#ifdef FEATURE_OEM_DATA_SUPPORT
21606/*
21607 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21608 * Request to WDI.
21609 */
21610VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21611 tOemDataReqNewConfig *pOemDataReqNewConfig)
21612{
21613 VOS_STATUS status = VOS_STATUS_SUCCESS;
21614 WDI_Status wstatus;
21615 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21616
21617 /* Sanity Check*/
21618 if(NULL == pOemDataReqNewConfig)
21619 {
21620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21621 "%s: pOemDataReqNewConfig received NULL", __func__);
21622 VOS_ASSERT(0) ;
21623 return VOS_STATUS_E_FAULT;
21624 }
21625
21626 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21627 sizeof(WDI_OemDataReqNewConfig));
21628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21629 "------> %s " ,__func__);
21630
21631 if(NULL == wdiOemDataReqNewConfig)
21632 {
21633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21634 "%s: VOS MEM Alloc Failure", __func__);
21635 VOS_ASSERT(0);
21636 vos_mem_free(pOemDataReqNewConfig);
21637 return VOS_STATUS_E_NOMEM;
21638 }
21639
21640 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21641 sizeof(WDI_OemDataReqNewConfig));
21642
21643 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21644
21645 if (WDI_STATUS_PENDING == wstatus)
21646 {
21647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21648 FL("pending status received "));
21649 }
21650 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21651 {
21652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21653 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021654 }
21655
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021656 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021657 vos_mem_free(pOemDataReqNewConfig);
21658
21659 return status;
21660}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021661
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021662void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21663 void *pUserData)
21664{
21665 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21666 (tSirAntennaDiversitySelectionInfo *)pUserData;
21667
21668 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21670 "<------ %s " ,__func__);
21671 if (NULL == pAntennaDivSelInfo)
21672 {
21673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21674 "%s: pWdaParams received NULL", __func__);
21675 VOS_ASSERT(0) ;
21676 return ;
21677 }
21678 if (NULL == resParams)
21679 {
21680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21681 "%s: resParams received NULL", __func__);
21682 VOS_ASSERT(0) ;
21683 return ;
21684 }
21685
21686 if (pAntennaDivSelInfo->callback)
21687 {
21688 if (WDI_STATUS_SUCCESS == status)
21689 {
21690 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21691 pAntennaDivSelInfo->data);
21692 }
21693 else
21694 {
21695 pAntennaDivSelInfo->callback(-1,
21696 pAntennaDivSelInfo->data);
21697 }
21698 }
21699
21700 vos_mem_free(pUserData);
21701 return;
21702}
21703
21704/*
21705 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21706 * Request to WDI.
21707 */
21708v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21709 tSirAntennaDiversitySelectionReq *pData)
21710{
21711 WDI_Status wdiStatus;
21712 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21713
21714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21715 "------> %s " , __func__);
21716
21717 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21718 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21719 if (NULL == pAntennaDivSelInfo)
21720 {
21721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21722 "%s: VOS MEM Alloc Failure", __func__);
21723 VOS_ASSERT(0);
21724 vos_mem_free(pData);
21725 return;
21726 }
21727
21728 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21729 pAntennaDivSelInfo->data = pData->data;
21730
21731 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21732 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21733
21734 if (WDI_STATUS_PENDING == wdiStatus)
21735 {
21736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21737 "Pending received for %s:%d ", __func__, __LINE__);
21738 }
21739 else if (WDI_STATUS_SUCCESS != wdiStatus)
21740 {
21741 if (pAntennaDivSelInfo->callback)
21742 {
21743 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21744 }
21745 }
21746
21747 vos_mem_free(pData);
21748 return;
21749}
21750
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021751/*
21752 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21753 * Request to WDI.
21754 */
21755VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21756 tModifyRoamParamsReqParams *params)
21757{
21758 WDI_Status status;
21759
21760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21761 FL("---> %s"), __func__);
21762
21763 if (NULL == params)
21764 {
21765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21766 FL("tModifyRoamParamsReqParams is received NULL"));
21767 return VOS_STATUS_E_NOMEM;
21768 }
21769
21770 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21771 if (WDI_STATUS_PENDING == status)
21772 {
21773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21774 FL("pending status received "));
21775 }
21776 else if (WDI_STATUS_SUCCESS_SYNC != status)
21777 {
21778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21779 FL("Failure status %d"), status);
21780 }
21781 vos_mem_free(params);
21782 return CONVERT_WDI2VOS_STATUS(status) ;
21783}
21784
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021785#endif