blob: 6c3c9932979c571402a681a25b7a579f026cee7d [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Ashish Kumar Dhanotiya17866e12018-01-16 19:53:43 +05302 * Copyright (c) 2012-2018 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 */
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053093#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 5
94/* BTQM flush FW dump command */
95#define WDA_TX_FW_RECOVERY_THRESHOLD 3
Abhishek Singhe721fb42015-11-30 14:22:10 +053096
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define IS_WDI_STATUS_FAILURE(status) \
98 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define CONVERT_WDI2VOS_STATUS(x) \
100 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
101
102/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700103#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700105#define WDA_GET_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
107
108#define WDA_SET_BA_TXFLAG(a, b, c) \
109 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
110
111#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
112 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
114 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115/* timer related Macros */
116#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
117 tx_timer_create(a, b, c, d, e, f, g)
118#define WDA_START_TIMER(a) tx_timer_activate(a)
119#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
120#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700121#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122
123#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
124 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700127#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700128#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800129#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700132
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700133#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700134#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
135 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800136 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700137
138#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
139#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800140#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530141#define WDA_BA_MAX_RETRY_THRESHOLD 10
142#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144/* extern declarations */
145extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700146extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
147
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530158void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700159void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
160 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
161void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
162 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
163void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
164 void* pUserData ) ;
165static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
166static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530167bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700183#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700184VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530185VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
186 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530188void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
189void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700190void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
191void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
192#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700193#ifdef WLAN_FEATURE_PACKET_FILTERING
194static VOS_STATUS WDA_Process8023MulticastListReq (
195 tWDA_CbContext *pWDA,
196 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
197 );
198static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
199 tWDA_CbContext *pWDA,
200 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
201 );
202static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
203 tWDA_CbContext *pWDA,
204 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
205 );
206static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
207 tWDA_CbContext *pWDA,
208 tSirRcvFltPktClearParam *pRcvFltPktClearParam
209 );
210#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
213 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
215 v_U8_t *pDefaultKeyId,
216 v_U8_t *pNumKeys,
217 WDI_KeysType *pWdiKeys );
218
219#ifdef WLAN_FEATURE_GTK_OFFLOAD
220static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
221static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
222#endif // WLAN_FEATURE_GTK_OFFLOAD
223
c_hpothu92367912014-05-01 15:18:17 +0530224v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
225 tSirBcnMissRateReq *pData);
226
Jeff Johnson295189b2012-06-20 16:38:30 -0700227VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
228 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700229#ifdef WLAN_FEATURE_11AC
230VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
231 tUpdateVHTOpMode *pData);
232#endif
Leo Chang9056f462013-08-01 19:21:11 -0700233
234#ifdef FEATURE_WLAN_LPHB
235VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
236 tSirLPHBReq *pData);
237#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530238
Abhishek Singh00b71972016-01-07 10:51:04 +0530239#ifdef WLAN_FEATURE_RMC
240void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
241 v_PVOID_t pData);
242#endif /* WLAN_FEATURE_RMC */
243
Dino Mycle41bdc942014-06-10 11:30:24 +0530244#ifdef WLAN_FEATURE_EXTSCAN
245VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStartReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
248 tSirEXTScanStopReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
250 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
252 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
255VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530257VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
258 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530259#endif /* WLAN_FEATURE_EXTSCAN */
260
Sunil Duttbd736ed2014-05-26 21:19:41 +0530261#ifdef WLAN_FEATURE_LINK_LAYER_STATS
262VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
263 tSirLLStatsSetReq *wdaRequest);
264
265VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
266 tSirLLStatsGetReq *wdaRequest);
267
268VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
269 tSirLLStatsClearReq *wdaRequest);
270#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530271
272v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
273 tSirFWStatsGetReq *wdaRequest);
274
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530275VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
276 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530277VOS_STATUS
278WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
279 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530280
c_manjeecfd1efb2015-09-25 19:32:34 +0530281VOS_STATUS
282WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
283 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530284
Katya Nigamf0511f62015-05-05 16:40:57 +0530285VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
286VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530287VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530288
289VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
290 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530291
292VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
293 tOemDataReqNewConfig *pOemDataReqNewConfig);
294
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530295
296v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
297 tSirAntennaDiversitySelectionReq *pData);
298
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530299VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
300 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530301/*
302 * FUNCTION: WDA_ProcessNanRequest
303 * Process NAN request
304 */
305VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
306 tNanRequest *wdaRequest)
307{
308 WDI_Status status = WDI_STATUS_SUCCESS;
309 tWDA_ReqParams *pWdaParams;
310 WDI_NanRequestType *wdiRequest = NULL;
311 size_t wdiReqLength = sizeof(WDI_NanRequestType)
312 - sizeof(wdiRequest->request_data)
313 + wdaRequest->request_data_len;
314
315 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
316
317 if (NULL == wdiRequest)
318 {
319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
320 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
321 wdiReqLength);
322 vos_mem_free(wdaRequest);
323 return VOS_STATUS_E_NOMEM;
324 }
325
326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
327 "WDA: Process Nan Request length: %zu", wdiReqLength);
328
329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
330 if (NULL == pWdaParams)
331 {
332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
333 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
334 VOS_ASSERT(0);
335 vos_mem_free(wdaRequest);
336 vos_mem_free(wdiRequest);
337 return VOS_STATUS_E_NOMEM;
338 }
339
340 wdiRequest->request_data_len = wdaRequest->request_data_len;
341
342 vos_mem_copy( wdiRequest->request_data,
343 wdaRequest->request_data,
344 wdaRequest->request_data_len);
345
346 vos_mem_free(wdaRequest);
347
348 pWdaParams->pWdaContext = pWDA;
349 pWdaParams->wdaMsgParam = NULL;
350 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
351
352 status = WDI_NanRequest(wdiRequest, pWdaParams);
353
354 if (IS_WDI_STATUS_FAILURE(status))
355 {
356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
357 "Failure to request. Free all the memory " );
358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
359 vos_mem_free(pWdaParams);
360 }
361
362 return CONVERT_WDI2VOS_STATUS(status) ;
363}
364
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530365/**
366 * wda_state_info_dump() - prints state information of wda layer
367 */
368static void wda_state_info_dump(void)
369{
370 v_CONTEXT_t vos_ctx_ptr = NULL;
371 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530372
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
374 "<------ %s " ,__func__);
375
376 /* Get the Global VOSS Context */
377 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
378
379 if (NULL != vos_ctx_ptr)
380 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
381 vos_ctx_ptr );
382 else {
383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
384 "%s: Invalid Global VOSS Context", __func__);
385 VOS_ASSERT(0);
386 return;
387 }
388
389 if (NULL != wda)
390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
391 "wdaState: %d linkState: %d", wda->wdaState,
392 wda->linkState);
393 else {
394 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
395 "%s: Invalid WDA Context", __func__);
396 VOS_ASSERT(0);
397 }
398}
399
400/**
401 * wda_register_debug_callback() - registration function for wda layer
402 * to print wda state information
403 */
404static void wda_register_debug_callback(void)
405{
406 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
407}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530408
Jeff Johnson295189b2012-06-20 16:38:30 -0700409/*
410 * FUNCTION: WDA_open
411 * Allocate the WDA context
412 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530413VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 tMacOpenParameters *pMacParams )
415{
416 tWDA_CbContext *wdaContext;
417 VOS_STATUS status;
418 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530420 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
422 if(!VOS_IS_STATUS_SUCCESS(status))
423 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
425 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 return VOS_STATUS_E_NOMEM;
427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /*__asm int 3;*/
429 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
430
431 /* Initialize data structures */
432 wdaContext->pVosContext = pVosContext;
433 wdaContext->wdaState = WDA_INIT_STATE;
434 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530435 vos_lock_init(&wdaContext->mgmt_pkt_lock);
436
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 /* Initialize WDA-WDI synchronization event */
438 status = vos_event_init(&wdaContext->wdaWdiEvent);
439 if(!VOS_IS_STATUS_SUCCESS(status))
440 {
441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800442 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800443 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* Init Frame transfer event */
446 status = vos_event_init(&wdaContext->txFrameEvent);
447 if(!VOS_IS_STATUS_SUCCESS(status))
448 {
449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800450 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800451 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 status = vos_event_init(&wdaContext->suspendDataTxEvent);
454 if(!VOS_IS_STATUS_SUCCESS(status))
455 {
456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800457 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800458 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
461 if(!VOS_IS_STATUS_SUCCESS(status))
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800464 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800465 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530469 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 &wdiDevCapability, pMacParams->driverType))
471 {
472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
473 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800474 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 }
476 else
477 {
478 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
479 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
480 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* update max STA in WDA used for BA */
482 wdaContext->wdaMaxSta = pMacParams->maxStation;
483 /* store the frameTransRequired flag in wdaContext, to send this to HAL
484 * in WDA_Start
485 */
486 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
487 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530488
489 wda_register_debug_callback();
490
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800492
493error:
494 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
495 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700496}
497
Jeff Johnson295189b2012-06-20 16:38:30 -0700498/*
499 * FUNCTION: WDA_preStart
500 * Trigger DAL-AL to start CFG download
501 */
502VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
503{
504 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
505 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 /*
507 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
508 */
509 wdaMsg.type = WNI_CFG_DNLD_REQ ;
510 wdaMsg.bodyptr = NULL;
511 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 /* post the message.. */
513 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
514 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
515 {
516 vosStatus = VOS_STATUS_E_BADMSG;
517 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 return( vosStatus );
519}
Jeff Johnson295189b2012-06-20 16:38:30 -0700520/*
521 * FUNCTION: WDA_wdiStartCallback
522 * Once WDI_Start is finished, WDI start callback will be called by WDI
523 * to indicate completion of WDI_Start.
524 */
525void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
526 void *pVosContext)
527{
528 tWDA_CbContext *wdaContext;
529 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 if (NULL == pVosContext)
531 {
532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700533 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 return;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
537 if (NULL == wdaContext)
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 return;
542 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
544 {
545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700546 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 }
548 else
549 {
550 wdaContext->wdaState = WDA_START_STATE;
551 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 /* extract and save version information from the Start Response */
553 wdaContext->wcnssWlanCompiledVersion.major =
554 wdiRspParams->wlanCompiledVersion.major;
555 wdaContext->wcnssWlanCompiledVersion.minor =
556 wdiRspParams->wlanCompiledVersion.minor;
557 wdaContext->wcnssWlanCompiledVersion.version =
558 wdiRspParams->wlanCompiledVersion.version;
559 wdaContext->wcnssWlanCompiledVersion.revision =
560 wdiRspParams->wlanCompiledVersion.revision;
561 wdaContext->wcnssWlanReportedVersion.major =
562 wdiRspParams->wlanReportedVersion.major;
563 wdaContext->wcnssWlanReportedVersion.minor =
564 wdiRspParams->wlanReportedVersion.minor;
565 wdaContext->wcnssWlanReportedVersion.version =
566 wdiRspParams->wlanReportedVersion.version;
567 wdaContext->wcnssWlanReportedVersion.revision =
568 wdiRspParams->wlanReportedVersion.revision;
569 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
570 wdiRspParams->wcnssSoftwareVersion,
571 sizeof(wdaContext->wcnssSoftwareVersionString));
572 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
573 wdiRspParams->wcnssHardwareVersion,
574 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 /* Notify WDA_start that WDI_Start has completed */
576 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700577 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 return;
583}
584
Jeff Johnson295189b2012-06-20 16:38:30 -0700585/*
586 * FUNCTION: WDA_start
587 * Prepare TLV configuration and call WDI_Start.
588 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700589VOS_STATUS WDA_start(v_PVOID_t pVosContext)
590{
591 tWDA_CbContext *wdaContext;
592 VOS_STATUS status;
593 WDI_Status wdiStatus;
594 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 if (NULL == pVosContext)
596 {
597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700598 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 return VOS_STATUS_E_FAILURE;
600 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
602 if (NULL == wdaContext)
603 {
604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700605 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700606 return VOS_STATUS_E_FAILURE;
607 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 /* Non-FTM mode, WDA status for START must be INIT
609 * FTM mode, WDA Status for START can be INIT or STOP */
610 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
611 (WDA_STOP_STATE != wdaContext->wdaState) )
612 {
613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
614 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700615 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 return VOS_STATUS_E_FAILURE;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* initialize the wdiStartParam. Note that we can create this on
619 the stack since we won't exit until WDI_Start() completes or
620 times out */
621 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* prepare the config TLV for the WDI */
624 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
625 if ( !VOS_IS_STATUS_SUCCESS(status) )
626 {
627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700628 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 return VOS_STATUS_E_FAILURE;
630 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* note from here onwards if an error occurs we must
632 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
634 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
635 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* initialize the WDA-WDI synchronization event */
637 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* call WDI start */
639 wdiStatus = WDI_Start(&wdiStartParam,
640 (WDI_StartRspCb)WDA_wdiStartCallback,
641 (v_VOID_t *)pVosContext);
642 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
643 {
644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700645 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700646 vos_mem_free(wdiStartParam.pConfigBuffer);
647 return VOS_STATUS_E_FAILURE;
648 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* wait for WDI start to invoke our callback */
650 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
651 WDA_WDI_START_TIMEOUT );
652 if ( !VOS_IS_STATUS_SUCCESS(status) )
653 {
654 if ( VOS_STATUS_E_TIMEOUT == status )
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700657 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 }
659 else
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
662 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700663 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 }
665 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530666 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 /* we no longer need the config TLV */
670 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* if we are not in the START state then WDI_Start() failed */
672 if (WDA_START_STATE != wdaContext->wdaState)
673 {
674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700675 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 return VOS_STATUS_E_FAILURE;
677 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 /* FTM mode does not need to monitor BA activity */
679 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
680 {
681 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800682 if(VOS_STATUS_SUCCESS == status)
683 {
684 wdaContext->wdaTimersCreated = VOS_TRUE;
685 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530686 else
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 FL("wda create timers failed"));
690 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 }
Leo Chang9d76f622013-08-23 16:34:52 -0700692 else
693 {
694 vos_event_init(&wdaContext->ftmStopDoneEvent);
695 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 return status;
697}
698
Jeff Johnson295189b2012-06-20 16:38:30 -0700699/*
700 * FUNCTION: WDA_prepareConfigTLV
701 * Function to prepare CFG for DAL(WDA)
702 */
703VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
704 WDI_StartReqParamsType *wdiStartParams )
705{
706 /* get pMac to acess CFG data base */
707 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
708 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
709 tHalCfg *tlvStruct = NULL ;
710 tANI_U8 *tlvStructStart = NULL ;
711 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
712 v_PVOID_t *configParam;
713 tANI_U32 configParamSize;
714 tANI_U32 *configDataValue;
715 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700716 tANI_U8 i;
717
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 if ((NULL == pMac)||(NULL == wdaContext))
719 {
720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700721 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 VOS_ASSERT(0);
723 return VOS_STATUS_E_FAILURE;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
726 WNI_CFG_STA_ID_LEN +
727 WNI_CFG_EDCA_WME_ACBK_LEN +
728 WNI_CFG_EDCA_WME_ACBE_LEN +
729 WNI_CFG_EDCA_WME_ACVI_LEN +
730 WNI_CFG_EDCA_WME_ACVO_LEN +
731 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 /* malloc memory for all configs in one shot */
733 configParam = vos_mem_malloc(configParamSize);
734
735 if(NULL == configParam )
736 {
737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700738 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700739 VOS_ASSERT(0) ;
740 return VOS_STATUS_E_NOMEM;
741 }
742 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)configParam;
745 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* TODO: Remove Later */
747 /* QWLAN_HAL_CFG_STA_ID */
748 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
749 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
750 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
751 eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_STA_ID");
755 goto handle_failure;
756 }
757 tlvStruct->length = strLength ;
758 /* calculate the pad bytes to have the CFG in aligned format */
759 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
760 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
762 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
764 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
765 tlvStruct->length = sizeof(tANI_U32);
766 configDataValue = (tANI_U32 *)(tlvStruct + 1);
767 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
768 != eSIR_SUCCESS)
769 {
770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
771 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
772 goto handle_failure;
773 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
775 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
777 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
778 tlvStruct->length = sizeof(tANI_U32);
779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
780 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
781 eSIR_SUCCESS)
782 {
783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
784 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
785 goto handle_failure;
786 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
788 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
790 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length)) ;
802
803 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
804 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
808 configDataValue ) != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 /* QWLAN_HAL_CFG_CAL_PERIOD */
817 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
818 tlvStruct->length = sizeof(tANI_U32);
819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
820 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
821 != eSIR_SUCCESS)
822 {
823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
824 "Failed to get value for WNI_CFG_CAL_PERIOD");
825 goto handle_failure;
826 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
828 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 /* QWLAN_HAL_CFG_CAL_CONTROL */
830 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_CAL_CONTROL");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 /* QWLAN_HAL_CFG_PROXIMITY */
843 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
844 tlvStruct->length = sizeof(tANI_U32);
845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
846 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
847 != eSIR_SUCCESS)
848 {
849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
850 "Failed to get value for WNI_CFG_PROXIMITY");
851 goto handle_failure;
852 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
854 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
856 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
860 != eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
869 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
870 tlvStruct->length = sizeof(tANI_U32);
871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
872 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
873 eSIR_SUCCESS)
874 {
875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
876 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
877 goto handle_failure;
878 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
880 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
882 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
883 tlvStruct->length = sizeof(tANI_U32);
884 configDataValue = (tANI_U32 *)(tlvStruct + 1);
885 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
886 configDataValue ) != eSIR_SUCCESS)
887 {
888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
889 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
890 goto handle_failure;
891 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700892 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
893 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
895 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
896 tlvStruct->length = sizeof(tANI_U32);
897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
898 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
899 eSIR_SUCCESS)
900 {
901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
902 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
903 goto handle_failure;
904 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
906 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
908 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
912 eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
921 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
925 eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
934 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
947 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
951 configDataValue ) != eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
955 goto handle_failure;
956 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700957 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length));
959
960 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
961 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
974 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
978 configDataValue ) != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length));
986
987 /* QWLAN_HAL_CFG_FIXED_RATE */
988 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
992 != eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_FIXED_RATE");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length));
1000
1001 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1002 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1003 tlvStruct->length = sizeof(tANI_U32);
1004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1005 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1006 != eSIR_SUCCESS)
1007 {
1008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1009 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1010 goto handle_failure;
1011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1013 + sizeof(tHalCfg) + tlvStruct->length));
1014
1015 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1016 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1020 configDataValue ) != eSIR_SUCCESS)
1021 {
1022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1023 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1024 goto handle_failure;
1025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1027 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1029 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1030 tlvStruct->length = sizeof(tANI_U32);
1031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1032 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1033 configDataValue ) != eSIR_SUCCESS)
1034 {
1035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1036 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1037 goto handle_failure;
1038 }
1039 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1040 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1042 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1043 tlvStruct->length = sizeof(tANI_U32);
1044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1045 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1046 configDataValue ) != eSIR_SUCCESS)
1047 {
1048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1049 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1050 goto handle_failure;
1051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1055 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1056 tlvStruct->length = sizeof(tANI_U32);
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1059 configDataValue ) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1063 goto handle_failure;
1064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1066 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1068 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1069 tlvStruct->length = sizeof(tANI_U32);
1070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1071 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1072 configDataValue ) != eSIR_SUCCESS)
1073 {
1074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1075 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1076 goto handle_failure;
1077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length);
1080
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1082 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1083 tlvStruct->length = sizeof(tANI_U32);
1084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1085 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1086 configDataValue ) != eSIR_SUCCESS)
1087 {
1088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1089 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1090 goto handle_failure;
1091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1095 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1099 configDataValue ) != eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1108 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1109 tlvStruct->length = sizeof(tANI_U32);
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1112 eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1116 goto handle_failure;
1117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1119 + sizeof(tHalCfg) + tlvStruct->length);
1120
1121 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1122 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1126 configDataValue ) != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1130 goto handle_failure;
1131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1135 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1136 tlvStruct->length = sizeof(tANI_U32);
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1139 configDataValue ) != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1143 goto handle_failure;
1144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1146 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1148 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1149 tlvStruct->length = sizeof(tANI_U32);
1150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1151 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1152 configDataValue ) != eSIR_SUCCESS)
1153 {
1154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1155 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1156 goto handle_failure;
1157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1159 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1161 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1162 tlvStruct->length = sizeof(tANI_U32);
1163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1164 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1165 configDataValue ) != eSIR_SUCCESS)
1166 {
1167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1168 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1169 goto handle_failure;
1170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1172 + sizeof(tHalCfg) + tlvStruct->length);
1173
1174 /* QWLAN_HAL_CFG_STATS_PERIOD */
1175 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1176 tlvStruct->length = sizeof(tANI_U32);
1177 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1178 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1179 eSIR_SUCCESS)
1180 {
1181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1182 "Failed to get value for WNI_CFG_STATS_PERIOD");
1183 goto handle_failure;
1184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1186 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1188 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1189 tlvStruct->length = sizeof(tANI_U32);
1190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1191 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1192 eSIR_SUCCESS)
1193 {
1194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1195 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1196 goto handle_failure;
1197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1199 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1201 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1202 tlvStruct->length = sizeof(tANI_U32);
1203 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1204 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1205 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1222 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1223 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1226 &strLength) != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1230 goto handle_failure;
1231 }
1232 tlvStruct->length = strLength;
1233 /* calculate the pad bytes to have the CFG in aligned format */
1234 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1235 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1237 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1239 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1240 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1243 &strLength) != eSIR_SUCCESS)
1244 {
1245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1246 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1247 goto handle_failure;
1248 }
1249 tlvStruct->length = strLength;
1250 /* calculate the pad bytes to have the CFG in aligned format */
1251 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1252 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1256 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1257 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1259 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1260 &strLength) != eSIR_SUCCESS)
1261 {
1262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1263 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1264 goto handle_failure;
1265 }
1266 tlvStruct->length = strLength;
1267 /* calculate the pad bytes to have the CFG in aligned format */
1268 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1269 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1273 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1274 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1277 &strLength) != eSIR_SUCCESS)
1278 {
1279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1280 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1281 goto handle_failure;
1282 }
1283 tlvStruct->length = strLength;
1284 /* calculate the pad bytes to have the CFG in aligned format */
1285 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1286 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1290 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1291 tlvStruct->length = sizeof(tANI_U32);
1292 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1293 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1294 != eSIR_SUCCESS)
1295 {
1296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1297 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1298 goto handle_failure;
1299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001300 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1301 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1303 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1307 != eSIR_SUCCESS)
1308 {
1309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1310 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1311 goto handle_failure;
1312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1316 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1320 != eSIR_SUCCESS)
1321 {
1322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1323 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1324 goto handle_failure;
1325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1327 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1329 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1333 != eSIR_SUCCESS)
1334 {
1335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1336 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1337 goto handle_failure;
1338 }
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001341 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1342 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1346 != eSIR_SUCCESS)
1347 {
1348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1349 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1350 goto handle_failure;
1351 }
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001354 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1355 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1359 != eSIR_SUCCESS)
1360 {
1361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1362 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1363 goto handle_failure;
1364 }
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001367 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1368 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1369 tlvStruct->length = sizeof(tANI_U32);
1370 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1371 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1372 != eSIR_SUCCESS)
1373 {
1374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1375 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1376 goto handle_failure;
1377 }
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001380 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1381 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1385 != eSIR_SUCCESS)
1386 {
1387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1388 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1389 goto handle_failure;
1390 }
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1394 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1395 tlvStruct->length = sizeof(tANI_U32);
1396 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1397 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1398 != eSIR_SUCCESS)
1399 {
1400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1401 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1402 goto handle_failure;
1403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001404 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1405 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1407 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1415 goto handle_failure;
1416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1420 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1421 tlvStruct->length = sizeof(tANI_U32);
1422 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1423 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1424 != eSIR_SUCCESS)
1425 {
1426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1427 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1428 goto handle_failure;
1429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1431 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1433 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1434 * into FW, so the parameters are added here.
1435 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1437 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1438 tlvStruct->length = sizeof(tANI_U32);
1439 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1440 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1441 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1442 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001443 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1444 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1445 tlvStruct->length = sizeof(tANI_U32);
1446 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1447 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1448 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1449 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001450 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1451 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001457 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1458 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
1465 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1466 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1470 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1471 + sizeof(tHalCfg) + tlvStruct->length) ;
1472
1473 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1474 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1475 tlvStruct->length = sizeof(tANI_U32);
1476 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1477 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
1481 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1482 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1486 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1487 + sizeof(tHalCfg) + tlvStruct->length) ;
1488
1489 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1490 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1491 tlvStruct->length = sizeof(tANI_U32);
1492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1493 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1494 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1495 + sizeof(tHalCfg) + tlvStruct->length) ;
1496
1497 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1498 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1499 tlvStruct->length = sizeof(tANI_U32);
1500 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1501 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1506 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512
1513 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1514 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1515 tlvStruct->length = sizeof(tANI_U32);
1516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1517 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
1521 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1522 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
1528
1529 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1530 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1531 tlvStruct->length = sizeof(tANI_U32);
1532 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1533 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1534 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1535 + sizeof(tHalCfg) + tlvStruct->length) ;
1536
1537 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1538 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1539 tlvStruct->length = sizeof(tANI_U32);
1540 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1541 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
1544
1545 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1546 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1547 tlvStruct->length = sizeof(tANI_U32);
1548 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1549 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1550 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1551 + sizeof(tHalCfg) + tlvStruct->length) ;
1552
1553 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1554 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1555 tlvStruct->length = sizeof(tANI_U32);
1556 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1557 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1558 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1559 + sizeof(tHalCfg) + tlvStruct->length) ;
1560
Wilson Tsaof8b37942013-09-06 10:49:00 -07001561 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1562 {
1563 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1564 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1565 tlvStruct->length = sizeof(tANI_U32);
1566 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1567 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1568 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1569 + sizeof(tHalCfg) + tlvStruct->length) ;
1570
1571 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1572 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1573 tlvStruct->length = sizeof(tANI_U32);
1574 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1575 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1576 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1577 + sizeof(tHalCfg) + tlvStruct->length) ;
1578
1579 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1580 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1581 tlvStruct->length = sizeof(tANI_U32);
1582 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1583 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1584 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1585 + sizeof(tHalCfg) + tlvStruct->length) ;
1586
1587 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1588 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1589 tlvStruct->length = sizeof(tANI_U32);
1590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1591 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1592 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1593 + sizeof(tHalCfg) + tlvStruct->length) ;
1594 }
1595
1596 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1597 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1601 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1602 + sizeof(tHalCfg) + tlvStruct->length) ;
1603
1604 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1605 {
1606 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1607 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1608 tlvStruct->length = sizeof(tANI_U32);
1609 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1610 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1611 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1612 + sizeof(tHalCfg) + tlvStruct->length) ;
1613 }
1614
1615 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1616 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1617 tlvStruct->length = sizeof(tANI_U32);
1618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1619 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622
Jeff Johnson32d95a32012-09-10 13:15:23 -07001623 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1625 tlvStruct->length = sizeof(tANI_U32);
1626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1627 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1628 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1629 wcnssCompiledApiVersion.minor,
1630 wcnssCompiledApiVersion.version,
1631 wcnssCompiledApiVersion.revision);
1632 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1633 + sizeof(tHalCfg) + tlvStruct->length) ;
1634
Jeff Johnsond13512a2012-07-17 11:42:19 -07001635 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1636 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1644 goto handle_failure;
1645 }
1646
1647 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1648 + sizeof(tHalCfg) + tlvStruct->length) ;
1649 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1650 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1651 tlvStruct->length = sizeof(tANI_U32);
1652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1653 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1654 configDataValue ) != eSIR_SUCCESS)
1655 {
1656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1657 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1658 goto handle_failure;
1659 }
1660
1661 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1662 + sizeof(tHalCfg) + tlvStruct->length) ;
1663
1664 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1665 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1666 tlvStruct->length = sizeof(tANI_U32);
1667 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1668 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1669 != eSIR_SUCCESS)
1670 {
1671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1672 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1673 goto handle_failure;
1674 }
1675
1676 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1677 + sizeof(tHalCfg) + tlvStruct->length) ;
1678
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001679 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1680 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1681 tlvStruct->length = sizeof(tANI_U32);
1682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1683 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1684 != eSIR_SUCCESS)
1685 {
1686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1687 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1688 goto handle_failure;
1689 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301690
1691 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1692 + sizeof(tHalCfg) + tlvStruct->length);
1693
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001694#ifdef WLAN_SOFTAP_VSTA_FEATURE
1695 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1696 tlvStruct->length = sizeof(tANI_U32);
1697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1698 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1699 != eSIR_SUCCESS)
1700 {
1701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1702 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1703 goto handle_failure;
1704 }
1705
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708#endif
1709
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001710 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1711 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1716 != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1720 goto handle_failure;
1721 }
1722
1723 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1724 + sizeof(tHalCfg) + tlvStruct->length) ;
1725
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301726/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1727 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1728 tlvStruct->length = sizeof(tANI_U32);
1729 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1730 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1731 configDataValue ) != eSIR_SUCCESS)
1732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1735 goto handle_failure;
1736 }
1737
1738 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1739 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301740#ifdef FEATURE_WLAN_TDLS
1741 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1742 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1743 tlvStruct->length = sizeof(tANI_U32);
1744 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1745 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1746 configDataValue ) != eSIR_SUCCESS)
1747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1750 goto handle_failure;
1751 }
1752 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1753 + sizeof(tHalCfg) + tlvStruct->length) ;
1754
1755 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1756 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1757 tlvStruct->length = sizeof(tANI_U32);
1758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1759 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1760 configDataValue ) != eSIR_SUCCESS)
1761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1763 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1764 goto handle_failure;
1765 }
1766 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1767 + sizeof(tHalCfg) + tlvStruct->length) ;
1768 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1769 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1770 tlvStruct->length = sizeof(tANI_U32);
1771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1772 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1773 configDataValue ) != eSIR_SUCCESS)
1774 {
1775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1776 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1777 goto handle_failure;
1778 }
1779 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1780 + sizeof(tHalCfg) + tlvStruct->length) ;
1781 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1782 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301794 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1795 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1796 tlvStruct->length = sizeof(tANI_U32);
1797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1798 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1799 configDataValue ) != eSIR_SUCCESS)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1802 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1803 goto handle_failure;
1804 }
1805 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1806 + sizeof(tHalCfg) + tlvStruct->length) ;
1807
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301808#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301809
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001810 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1811 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1812 tlvStruct->length = sizeof(tANI_U32);
1813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1814 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1815 configDataValue ) != eSIR_SUCCESS)
1816 {
1817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1818 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1819 goto handle_failure;
1820 }
1821
1822 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1823 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001824
1825 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1826 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1827 tlvStruct->length = sizeof(tANI_U32);
1828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1829 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1830 != eSIR_SUCCESS)
1831 {
1832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1833 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1834 goto handle_failure;
1835 }
1836 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1837 + sizeof(tHalCfg) + tlvStruct->length));
1838
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301839 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1840 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1841 tlvStruct->length = sizeof(tANI_U32);
1842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1843 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1844 configDataValue ) != eSIR_SUCCESS)
1845 {
1846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1847 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1848 goto handle_failure;
1849 }
1850
1851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1852 + sizeof(tHalCfg) + tlvStruct->length) ;
1853
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301854 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1855 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1856 tlvStruct->length = sizeof(tANI_U32);
1857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1858 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1859 configDataValue ) != eSIR_SUCCESS)
1860 {
1861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1862 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1863 goto handle_failure;
1864 }
1865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1866 + sizeof(tHalCfg) + tlvStruct->length) ;
1867
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301868 /* QWLAN_HAL_CFG_ATH_DISABLE */
1869 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1870 tlvStruct->length = sizeof(tANI_U32);
1871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1872 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1873 configDataValue ) != eSIR_SUCCESS)
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1876 "Failed to get value for WNI_CFG_ATH_DISABLE");
1877 goto handle_failure;
1878 }
1879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1880 + sizeof(tHalCfg) + tlvStruct->length) ;
1881
c_hpothu6d7dc922013-12-02 12:36:41 +05301882 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1883 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1884 tlvStruct->length = sizeof(tANI_U32);
1885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1886 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1887 configDataValue ) != eSIR_SUCCESS)
1888 {
1889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1890 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1891 goto handle_failure;
1892 }
1893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1894 + sizeof(tHalCfg) + tlvStruct->length) ;
1895
1896 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1897 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1898 tlvStruct->length = sizeof(tANI_U32);
1899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1915 configDataValue ) != eSIR_SUCCESS)
1916 {
1917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1918 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1919 goto handle_failure;
1920 }
1921 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1922 + sizeof(tHalCfg) + tlvStruct->length) ;
1923
1924 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1925 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1926 tlvStruct->length = sizeof(tANI_U32);
1927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1928 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1929 configDataValue ) != eSIR_SUCCESS)
1930 {
1931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1932 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1933 goto handle_failure;
1934 }
1935 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1936 + sizeof(tHalCfg) + tlvStruct->length) ;
1937
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301938 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1939 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1940 tlvStruct->length = sizeof(tANI_U32);
1941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1942 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1943 configDataValue ) != eSIR_SUCCESS)
1944 {
1945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1946 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1947 goto handle_failure;
1948 }
1949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1950 + sizeof(tHalCfg) + tlvStruct->length) ;
1951
1952 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1953 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1954 tlvStruct->length = sizeof(tANI_U32);
1955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1956 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1957 configDataValue ) != eSIR_SUCCESS)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1960 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1961 goto handle_failure;
1962 }
1963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1964 + sizeof(tHalCfg) + tlvStruct->length) ;
1965
1966 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1967 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1968 tlvStruct->length = sizeof(tANI_U32);
1969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1970 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1971 configDataValue ) != eSIR_SUCCESS)
1972 {
1973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1974 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1975 goto handle_failure;
1976 }
1977 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1978 + sizeof(tHalCfg) + tlvStruct->length) ;
1979
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001980 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1981 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1982 tlvStruct->length = sizeof(tANI_U32);
1983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1984 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1985 configDataValue ) != eSIR_SUCCESS)
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1988 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1989 goto handle_failure;
1990 }
1991 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1992 + sizeof(tHalCfg) + tlvStruct->length) ;
1993
c_hpothu5bd1ae42014-03-07 20:28:22 +05301994 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1995 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1996 tlvStruct->length = sizeof(tANI_U32);
1997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1998
1999 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2000 configDataValue ) != eSIR_SUCCESS)
2001 {
2002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2003 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2004 goto handle_failure;
2005 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302006 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2007 + sizeof(tHalCfg) + tlvStruct->length) ;
2008
2009 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2010 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2011 tlvStruct->length = sizeof(tANI_U32);
2012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2013
2014 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2015 configDataValue ) != eSIR_SUCCESS)
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2019 goto handle_failure;
2020 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2022 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302023
c_hpothu2d0f1c42014-04-01 18:38:51 +05302024 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2025 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2026 tlvStruct->length = sizeof(tANI_U32);
2027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2028
2029 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2030 configDataValue ) != eSIR_SUCCESS)
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2034 goto handle_failure;
2035 }
2036 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2037 + sizeof(tHalCfg) + tlvStruct->length) ;
2038
2039 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2040 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2041 tlvStruct->length = sizeof(tANI_U32);
2042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2043
2044 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2045 configDataValue ) != eSIR_SUCCESS)
2046 {
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2048 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2049 goto handle_failure;
2050 }
2051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2052 + sizeof(tHalCfg) + tlvStruct->length) ;
2053
2054 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2055 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2056 tlvStruct->length = sizeof(tANI_U32);
2057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2058
2059 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2060 configDataValue ) != eSIR_SUCCESS)
2061 {
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2063 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2064 goto handle_failure;
2065 }
2066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2067 + sizeof(tHalCfg) + tlvStruct->length) ;
2068
2069 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2070 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2071 tlvStruct->length = sizeof(tANI_U32);
2072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2073
2074 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2075 configDataValue ) != eSIR_SUCCESS)
2076 {
2077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2078 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2079 goto handle_failure;
2080 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2082 + sizeof(tHalCfg) + tlvStruct->length) ;
2083
Mihir Shetec34258c2014-07-30 17:50:27 +05302084 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2085 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2086 tlvStruct->length = sizeof(tANI_U32);
2087 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2088
2089 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2090 configDataValue ) != eSIR_SUCCESS)
2091 {
2092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2093 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2094 goto handle_failure;
2095 }
2096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2097 + sizeof(tHalCfg) + tlvStruct->length) ;
2098
2099 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2100 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2101 tlvStruct->length = sizeof(tANI_U32);
2102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2103
2104 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2105 configDataValue ) != eSIR_SUCCESS)
2106 {
2107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2108 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2109 goto handle_failure;
2110 }
2111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2112 + sizeof(tHalCfg) + tlvStruct->length) ;
2113
2114 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2115 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2116 tlvStruct->length = sizeof(tANI_U32);
2117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2118
2119 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2120 configDataValue ) != eSIR_SUCCESS)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2123 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2124 goto handle_failure;
2125 }
2126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2127 + sizeof(tHalCfg) + tlvStruct->length) ;
2128
2129 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2130 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2131 tlvStruct->length = sizeof(tANI_U32);
2132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2133
2134 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2135 configDataValue ) != eSIR_SUCCESS)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2138 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2139 goto handle_failure;
2140 }
2141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2142 + sizeof(tHalCfg) + tlvStruct->length) ;
2143
2144 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2145 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2146 tlvStruct->length = sizeof(tANI_U32);
2147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2148
2149 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2150 configDataValue ) != eSIR_SUCCESS)
2151 {
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2153 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2154 goto handle_failure;
2155 }
2156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2157 + sizeof(tHalCfg) + tlvStruct->length) ;
2158
2159 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2160 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2161 tlvStruct->length = sizeof(tANI_U32);
2162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2163
2164 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2165 configDataValue ) != eSIR_SUCCESS)
2166 {
2167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2168 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2169 goto handle_failure;
2170 }
2171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2172 + sizeof(tHalCfg) + tlvStruct->length) ;
2173
2174 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2175 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2176 tlvStruct->length = sizeof(tANI_U32);
2177 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2178
2179 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2180 configDataValue ) != eSIR_SUCCESS)
2181 {
2182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2183 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2184 goto handle_failure;
2185 }
2186 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2187 + sizeof(tHalCfg) + tlvStruct->length) ;
2188
2189 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2190 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2191 tlvStruct->length = sizeof(tANI_U32);
2192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2193
2194 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2195 configDataValue ) != eSIR_SUCCESS)
2196 {
2197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2198 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2199 goto handle_failure;
2200 }
2201 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2202 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302203
2204 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2205 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2206 tlvStruct->length = sizeof(tANI_U32);
2207 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2208
2209 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2210 configDataValue ) != eSIR_SUCCESS)
2211 {
2212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2213 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2214 goto handle_failure;
2215 }
2216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2217 + sizeof(tHalCfg) + tlvStruct->length) ;
2218
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302219 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2220 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2221 tlvStruct->length = sizeof(tANI_U32);
2222 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2223
2224 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2225 configDataValue ) != eSIR_SUCCESS)
2226 {
2227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2228 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2229 goto handle_failure;
2230 }
2231 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2232 + sizeof(tHalCfg) + tlvStruct->length) ;
2233
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302234 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2235 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2236 tlvStruct->length = sizeof(tANI_U32);
2237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2238
2239 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2240 configDataValue ) != eSIR_SUCCESS)
2241 {
2242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2243 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2244 goto handle_failure;
2245 }
2246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2247 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302248
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302249 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2250 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2251 tlvStruct->length = sizeof(tANI_U32);
2252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2253
2254 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2255 configDataValue ) != eSIR_SUCCESS)
2256 {
2257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2258 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2259 goto handle_failure;
2260 }
2261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2262 + sizeof(tHalCfg) + tlvStruct->length) ;
2263
Sachin Ahuja41b61902015-06-18 18:32:15 +05302264
2265 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2266 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2267 tlvStruct->length = sizeof(tANI_U32);
2268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2269
2270 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2271 configDataValue ) != eSIR_SUCCESS)
2272 {
2273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2274 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2275 goto handle_failure;
2276 }
2277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2278 + sizeof(tHalCfg) + tlvStruct->length) ;
2279
2280 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2282 tlvStruct->length = sizeof(tANI_U32);
2283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2284
2285 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2286 configDataValue ) != eSIR_SUCCESS)
2287 {
2288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2289 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2290 goto handle_failure;
2291 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302292 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2293 + sizeof(tHalCfg) + tlvStruct->length) ;
2294
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302295 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2296 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2297 tlvStruct->length = sizeof(tANI_U32);
2298 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2299
2300 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2301 configDataValue ) != eSIR_SUCCESS)
2302 {
2303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2304 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2305 goto handle_failure;
2306 }
2307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2308 + sizeof(tHalCfg) + tlvStruct->length) ;
2309
2310 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2311 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2312 tlvStruct->length = sizeof(tANI_U32);
2313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2314
2315 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2316 configDataValue ) != eSIR_SUCCESS)
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2319 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2320 goto handle_failure;
2321 }
2322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2323 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302324
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302325 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2326 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2327 tlvStruct->length = sizeof(tANI_U32);
2328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2329
2330 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2331 configDataValue ) != eSIR_SUCCESS)
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2334 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2335 goto handle_failure;
2336 }
2337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2338 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302339 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2340 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2341 tlvStruct->length = sizeof(tANI_U32);
2342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2343 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2344 configDataValue ) != eSIR_SUCCESS)
2345 {
2346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2347 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2348 goto handle_failure;
2349 }
2350 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2351 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302352
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302353 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2354 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2355 tlvStruct->length = sizeof(tANI_U32);
2356 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2357
2358 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2359 configDataValue ) != eSIR_SUCCESS)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2362 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2363 goto handle_failure;
2364 }
2365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2366 + sizeof(tHalCfg) + tlvStruct->length) ;
2367
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302368 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2369 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2370 tlvStruct->length = sizeof(tANI_U32);
2371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2372
2373 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2374 configDataValue ) != eSIR_SUCCESS)
2375 {
2376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2377 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2378 goto handle_failure;
2379 }
2380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2381 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302382
2383 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2384 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2385 tlvStruct->length = sizeof(tANI_U32);
2386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2387
2388 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2389 configDataValue ) != eSIR_SUCCESS)
2390 {
2391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2392 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2393 goto handle_failure;
2394 }
2395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2396 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302397 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2398 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2399 tlvStruct->length = sizeof(tANI_U32);
2400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2401
2402 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2403 configDataValue ) != eSIR_SUCCESS)
2404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2406 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2407 goto handle_failure;
2408 }
2409 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2410 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302411
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302412 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2413 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2414 tlvStruct->length = sizeof(tANI_U32);
2415 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2416
2417 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2418 configDataValue ) != eSIR_SUCCESS)
2419 {
2420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2421 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2422 goto handle_failure;
2423 }
2424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2425 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302426
2427 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2428 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2429 tlvStruct->length = sizeof(tANI_U32);
2430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2431 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2432 != eSIR_SUCCESS)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2435 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2436 goto handle_failure;
2437 }
2438
2439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2440 + sizeof(tHalCfg) + tlvStruct->length);
2441
2442 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2443 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2444 tlvStruct->length = sizeof(tANI_U32);
2445 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2446 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2447 != eSIR_SUCCESS)
2448 {
2449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2450 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2451 goto handle_failure;
2452 }
2453
2454 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2455 + sizeof(tHalCfg) + tlvStruct->length);
2456
Ashish Kumar Dhanotiyabf6bcea2017-08-17 19:14:33 +05302457 /* QWLAN_HAL_CFG_TRIGGER_NULLFRAME_BEFORE_HB */
2458 tlvStruct->type = QWLAN_HAL_CFG_TRIGGER_NULLFRAME_BEFORE_HB;
2459 tlvStruct->length = sizeof(tANI_U32);
2460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2461 if(wlan_cfgGetInt(pMac, WNI_CFG_TRIGGER_NULLFRAME_BEFORE_HB,
2462 configDataValue) != eSIR_SUCCESS)
2463 {
2464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2465 "Failed to get WNI_CFG_TRIGGER_NULLFRAME_BEFORE_HB");
2466 goto handle_failure;
2467 }
2468
2469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2470 + sizeof(tHalCfg) + tlvStruct->length);
Ashish Kumar Dhanotiya17866e12018-01-16 19:53:43 +05302471
2472 /* QWLAN_HAL_CFG_ENABLE_POWERSAVE_OFFLOAD */
2473 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_POWERSAVE_OFFLOAD;
2474 tlvStruct->length = sizeof(tANI_U32);
2475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2476 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_POWERSAVE_OFFLOAD,
2477 configDataValue) != eSIR_SUCCESS)
2478 {
2479 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2480 "Failed to get WNI_CFG_ENABLE_POWERSAVE_OFFLOAD");
2481 goto handle_failure;
2482 }
2483
2484 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2485 + sizeof(tHalCfg) + tlvStruct->length);
2486 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487#ifdef WLAN_DEBUG
2488 {
2489 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2491 "****** Dumping CFG TLV ***** ");
2492 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2493 {
2494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2495 "%02x %02x %02x %02x %02x %02x %02x %02x",
2496 tlvStructStart[i],
2497 tlvStructStart[i+1],
2498 tlvStructStart[i+2],
2499 tlvStructStart[i+3],
2500 tlvStructStart[i+4],
2501 tlvStructStart[i+5],
2502 tlvStructStart[i+6],
2503 tlvStructStart[i+7]);
2504 }
2505 /* Dump the bytes in the last line*/
2506 for (; i < wdiStartParams->usConfigBufferLen; i++)
2507 {
2508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2509 "%02x ",tlvStructStart[i]);
2510 }
2511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2512 "**************************** ");
2513 }
2514#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516handle_failure:
2517 vos_mem_free(configParam);
2518 return VOS_STATUS_E_FAILURE;
2519}
Anurag Chouhan83026002016-12-13 22:46:21 +05302520
2521#ifdef DHCP_SERVER_OFFLOAD
2522/**
2523 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2524 * @wdi_rsp: pointer to the dhcp server offload response
2525 * @user_data: pointer to user data
2526 *
2527 * Return: None
2528 */
2529void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2530 wdi_rsp,
2531 void* user_data)
2532{
2533 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2534 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2535 VOS_STATUS status;
2536
2537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2538 "<------ %s " ,__func__);
2539
2540 if(NULL == wda_params)
2541 {
2542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2543 "%s: pWdaParams received NULL", __func__);
2544 VOS_ASSERT(0);
2545 return;
2546 }
2547
2548 if(NULL == wda_params->wdaMsgParam)
2549 {
2550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2551 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2552 VOS_ASSERT(0);
2553 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2554 vos_mem_free(wda_params);
2555 return;
2556 }
2557
2558 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2559 wda_params->wdaMsgParam;
2560
2561 if(dhcp_srv_offload_info->dhcp_offload_callback)
2562 {
2563 dhcp_srv_offload_info->dhcp_offload_callback(
2564 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2565 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2566 }
2567 else
2568 {
2569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2570 "%s: pFWLoggingInitParams callback is NULL", __func__);
2571 }
2572
2573 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2574 if (status)
2575 {
2576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2577 "%s: DHCP server offload failed with status=%d", __func__, status);
2578 VOS_ASSERT(0);
2579 }
2580
2581 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2582 vos_mem_free(wda_params->wdaMsgParam);
2583 vos_mem_free(wda_params);
2584 return;
2585}
2586#endif /* DHCP_SERVER_OFFLOAD */
2587
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302588#ifdef MDNS_OFFLOAD
2589/**
2590 * wda_mdns_enable_rsp_callback() - response to the mdns enable server offload
2591 * @wdi_rsp: pointer to the mdns enable offload response
2592 * @user_data: pointer to user data
2593 *
2594 * Return: None
2595 */
2596void wda_mdns_enable_rsp_callback(wdi_mdns_enable_offload_rsp_param_t*
2597 wdi_rsp,
2598 void* user_data)
2599{
2600 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2601 sir_mdns_offload_info_t *mdns_offload_info;
2602 VOS_STATUS status;
2603
2604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2605 "<------ %s " ,__func__);
2606
2607 if(NULL == wda_params)
2608 {
2609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2610 "%s: pWdaParams received NULL", __func__);
2611 VOS_ASSERT(0);
2612 return ;
2613 }
2614
2615 if(NULL == wda_params->wdaMsgParam)
2616 {
2617 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2618 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2619 VOS_ASSERT(0);
2620 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2621 vos_mem_free(wda_params);
2622 return ;
2623 }
2624
2625 mdns_offload_info = (sir_mdns_offload_info_t *)
2626 wda_params->wdaMsgParam;
2627
2628 if(mdns_offload_info->mdns_enable_callback)
2629 {
2630 mdns_offload_info->mdns_enable_callback(mdns_offload_info->
2631 mdns_enable_cb_context,
2632 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2633 status));
2634 }
2635 else
2636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2638 "%s: mdns_enable callback is NULL", __func__);
2639 }
2640
2641 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2642 if (status)
2643 {
2644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "%s: MDNS offload failed with status=%d", __func__, status);
2646 VOS_ASSERT(0);
2647 }
2648
2649 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2650 vos_mem_free(wda_params->wdaMsgParam);
2651 vos_mem_free(wda_params);
2652
2653 return;
2654}
2655
2656/**
2657 * wda_mdns_fqdn_rsp_callback() - response to the mdns fqdn offload
2658 * @wdi_rsp: pointer to the mdns fqdn offload response
2659 * @user_data: pointer to user data
2660 *
2661 * Return: None
2662 */
2663void wda_mdns_fqdn_rsp_callback(wdi_mdns_set_fqdn_rsp_param_t*
2664 wdi_rsp,
2665 void* user_data)
2666{
2667 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2668 sir_mdns_fqdn_info_t *mdns_fqdn_info;
2669 VOS_STATUS status;
2670
2671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2672 "<------ %s " ,__func__);
2673
2674 if(NULL == wda_params)
2675 {
2676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2677 "%s: pWdaParams received NULL", __func__);
2678 VOS_ASSERT(0);
2679 return ;
2680 }
2681
2682 if(NULL == wda_params->wdaMsgParam)
2683 {
2684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2685 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2686 VOS_ASSERT(0);
2687 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2688 vos_mem_free(wda_params);
2689 return ;
2690 }
2691
2692 mdns_fqdn_info = (sir_mdns_fqdn_info_t *)
2693 wda_params->wdaMsgParam;
2694
2695 if(mdns_fqdn_info->mdns_fqdn_callback)
2696 {
2697 mdns_fqdn_info->mdns_fqdn_callback(mdns_fqdn_info->
2698 mdns_fqdn_cb_context,
2699 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2700 status));
2701 }
2702 else
2703 {
2704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2705 "%s: mdns_fqdn callback is NULL", __func__);
2706 }
2707
2708 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2709 if (status)
2710 {
2711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2712 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2713 VOS_ASSERT(0);
2714 }
2715
2716 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2717 vos_mem_free(wda_params->wdaMsgParam);
2718 vos_mem_free(wda_params);
2719
2720 return;
2721}
2722
2723/**
2724 * wda_mdns_resp_rsp_callback() - response to the mdns resp offload
2725 * @wdi_rsp: pointer to the mdns fqdn offload response
2726 * @user_data: pointer to user data
2727 *
2728 * Return: None
2729 */
2730void wda_mdns_resp_rsp_callback
2731(
2732 wdi_mdns_set_rsp_param_t*
2733 wdi_rsp,
2734 void* user_data)
2735{
2736 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2737 sir_mdns_resp_info_t *mdns_resp_info;
2738 VOS_STATUS status;
2739
2740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2741 "<------ %s " ,__func__);
2742
2743 if(NULL == wda_params)
2744 {
2745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2746 "%s: pWdaParams received NULL", __func__);
2747 VOS_ASSERT(0);
2748 return ;
2749 }
2750
2751 if(NULL == wda_params->wdaMsgParam)
2752 {
2753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2754 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2755 VOS_ASSERT(0);
2756 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2757 vos_mem_free(wda_params);
2758 return ;
2759 }
2760
2761 mdns_resp_info = (sir_mdns_resp_info_t *)
2762 wda_params->wdaMsgParam;
2763
2764 if(mdns_resp_info->mdns_resp_callback)
2765 {
2766 mdns_resp_info->mdns_resp_callback(mdns_resp_info->
2767 mdns_resp_cb_context,
2768 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2769 status));
2770 }
2771 else
2772 {
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2774 "%s: mdns_fqdn callback is NULL", __func__);
2775 }
2776
2777 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2778 if (status)
2779 {
2780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2781 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2782 VOS_ASSERT(0);
2783 }
2784
2785 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2786 vos_mem_free(wda_params->wdaMsgParam);
2787 vos_mem_free(wda_params);
2788
2789 return;
2790}
2791
2792/**
2793 * wda_get_stats_rsp_callback() - response to the mdns stats offload
2794 * @wdi_rsp: pointer to the mdns fqdn offload response
2795 * @user_data: pointer to user data
2796 *
2797 * Return: None
2798 */
2799void wda_get_stats_rsp_callback
2800(
2801 wdi_mdns_stats_rsp_param_t*
2802 wdi_rsp,
2803 void* user_data)
2804{
2805 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2806 sir_get_mdns_stats_info_t *mdns_stats_info;
2807 VOS_STATUS status;
2808
2809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2810 "<------ %s " ,__func__);
2811
2812 if(NULL == wda_params)
2813 {
2814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2815 "%s: pWdaParams received NULL", __func__);
2816 VOS_ASSERT(0);
2817 return ;
2818 }
2819
2820 if(NULL == wda_params->wdaMsgParam)
2821 {
2822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2823 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2824 VOS_ASSERT(0);
2825 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2826 vos_mem_free(wda_params);
2827 return ;
2828 }
2829
2830 mdns_stats_info = (sir_get_mdns_stats_info_t *)
2831 wda_params->wdaMsgParam;
2832
2833 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2834 if (status)
2835 {
2836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2837 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2838 VOS_ASSERT(0);
2839 }
2840
2841 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2842 vos_mem_free(wda_params->wdaMsgParam);
2843 vos_mem_free(wda_params);
2844
2845 return;
2846}
2847#endif /* MDNS_OFFLOAD */
2848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849/*
2850 * FUNCTION: WDA_wdiCompleteCB
2851 * call the voss call back function
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302852 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002853void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002854{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2856 tWDA_CbContext *wdaContext;
2857
2858 if(NULL == pWdaParams)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002861 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002862 VOS_ASSERT(0) ;
2863 return ;
2864 }
2865
2866 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2867
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 if (NULL == wdaContext)
2869 {
2870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002871 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 return ;
2873 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002874
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002876 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002880 vos_mem_free(pWdaParams);
2881
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 if(WDI_STATUS_SUCCESS != status)
2883 {
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2885 "WDI stop callback returned failure" );
2886 VOS_ASSERT(0) ;
2887 }
2888 else
2889 {
2890 wdaContext->wdaState = WDA_STOP_STATE;
2891 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002892
Leo Chang9d76f622013-08-23 16:34:52 -07002893 /* FTM Driver stop procedure should be synced.
2894 * Stop and Close will happen on same context */
2895 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2896 {
2897 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2898 {
2899 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2900 "%s: FTM Stop Event Set Fail", __func__);
2901 VOS_ASSERT(0);
2902 }
2903 }
2904
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002906 vos_WDAComplete_cback(wdaContext->pVosContext);
2907
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 return ;
2909}
Jeff Johnson295189b2012-06-20 16:38:30 -07002910/*
2911 * FUNCTION: WDA_stop
2912 * call WDI_stop
2913 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002914VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2915{
2916 WDI_Status wdiStatus;
2917 VOS_STATUS status = VOS_STATUS_SUCCESS;
2918 WDI_StopReqParamsType *wdiStopReq;
2919 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002920 tWDA_ReqParams *pWdaParams ;
2921
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 if (NULL == pWDA)
2923 {
2924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 VOS_ASSERT(0);
2927 return VOS_STATUS_E_FAILURE;
2928 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002929 if (pWDA->wdiFailed == true)
2930 {
2931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002932 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002933 return VOS_STATUS_E_ALREADY;
2934 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002935
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* FTM mode stay START_STATE */
2937 if( (WDA_READY_STATE != pWDA->wdaState) &&
2938 (WDA_INIT_STATE != pWDA->wdaState) &&
2939 (WDA_START_STATE != pWDA->wdaState) )
2940 {
2941 VOS_ASSERT(0);
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 wdiStopReq = (WDI_StopReqParamsType *)
2944 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2945 if(NULL == wdiStopReq)
2946 {
2947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 VOS_ASSERT(0);
2950 return VOS_STATUS_E_NOMEM;
2951 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 wdiStopReq->wdiStopReason = reason;
2954 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302955
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2957 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_ASSERT(0);
2962 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002963 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002965
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002966 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2967 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 {
2969 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002970 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002972
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002973 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2974 pWdaParams->wdaMsgParam = NULL;
2975 pWdaParams->pWdaContext = pWDA;
2976
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 /* call WDI stop */
2978 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002979 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2980
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2982 {
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2984 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2986 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 status = VOS_STATUS_E_FAILURE;
2988 }
Leo Chang9d76f622013-08-23 16:34:52 -07002989
2990 /* FTM Driver stop procedure should be synced.
2991 * Stop and Close will happen on same context */
2992 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2993 {
2994 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2995 WDI_RESPONSE_TIMEOUT);
2996 if (status != VOS_STATUS_SUCCESS)
2997 {
2998 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2999 "%s: FTM Stop Timepoout", __func__);
3000 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07003001 }
c_hpothu0d36bc42014-07-03 17:43:45 +05303002 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07003003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 return status;
3005}
Jeff Johnson295189b2012-06-20 16:38:30 -07003006/*
3007 * FUNCTION: WDA_close
3008 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303009 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003010VOS_STATUS WDA_close(v_PVOID_t pVosContext)
3011{
Jeff Johnson43971f52012-07-17 12:26:56 -07003012 VOS_STATUS status = VOS_STATUS_SUCCESS;
3013 WDI_Status wstatus;
3014 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 if (NULL == wdaContext)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 return VOS_STATUS_E_FAILURE;
3021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 if((WDA_INIT_STATE != wdaContext->wdaState) &&
3023 (WDA_STOP_STATE != wdaContext->wdaState))
3024 {
3025 VOS_ASSERT(0);
3026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07003028 wstatus = WDI_Close();
3029 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 {
3031 status = VOS_STATUS_E_FAILURE;
3032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07003035 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
3036 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 {
3038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003039 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 status = VOS_STATUS_E_FAILURE;
3041 }
3042
Jeff Johnson43971f52012-07-17 12:26:56 -07003043 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003044 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003047 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 status = VOS_STATUS_E_FAILURE;
3049 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003050 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003051 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 {
3053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003054 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 status = VOS_STATUS_E_FAILURE;
3056 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003057 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07003058 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 {
3060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003061 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 status = VOS_STATUS_E_FAILURE;
3063 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303064
3065 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
3066
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07003068 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07003069 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 {
3071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3072 "error in WDA close " );
3073 status = VOS_STATUS_E_FAILURE;
3074 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303075
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 return status;
3077}
Jeff Johnson295189b2012-06-20 16:38:30 -07003078/*
3079 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
3080 * returns 1 if the compiled version is greater than or equal to the input version
3081 */
3082
3083uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3084{
3085 VOS_STATUS status = VOS_STATUS_SUCCESS;
3086 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3087 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
3090 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
3091 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
3092 (compiledVersion.revision >= revision)))
3093 return 1;
3094 else
3095 return 0;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*
3098 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
3099 * returns 1 if the compiled version is greater than or equal to the input version
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3102{
3103 VOS_STATUS status = VOS_STATUS_SUCCESS;
3104 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3105 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
3108 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
3109 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
3110 (reportedVersion.revision >= revision)))
3111 return 1;
3112 else
3113 return 0;
3114}
Jeff Johnson295189b2012-06-20 16:38:30 -07003115/*
3116 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
3117 * Returns the version of the WCNSS WLAN API with which the HOST
3118 * device driver was compiled
3119 */
3120VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
3121 tSirVersionType *pVersion)
3122{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303123 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if ((NULL == pvosGCtx) || (NULL == pVersion))
3125 {
3126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0);
3129 return VOS_STATUS_E_FAILURE;
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3132 if (NULL == pWDA )
3133 {
3134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003135 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 VOS_ASSERT(0);
3137 return VOS_STATUS_E_FAILURE;
3138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 *pVersion = pWDA->wcnssWlanCompiledVersion;
3140 return VOS_STATUS_SUCCESS;
3141}
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_GetWcnssWlanReportedVersion
3144 * Returns the version of the WCNSS WLAN API with which the WCNSS
3145 * device driver was compiled
3146 */
3147VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
3148 tSirVersionType *pVersion)
3149{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303150 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 if ((NULL == pvosGCtx) || (NULL == pVersion))
3152 {
3153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003154 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 VOS_ASSERT(0);
3156 return VOS_STATUS_E_FAILURE;
3157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3159 if (NULL == pWDA )
3160 {
3161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003162 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 VOS_ASSERT(0);
3164 return VOS_STATUS_E_FAILURE;
3165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 *pVersion = pWDA->wcnssWlanReportedVersion;
3167 return VOS_STATUS_SUCCESS;
3168}
Jeff Johnson295189b2012-06-20 16:38:30 -07003169/*
3170 * FUNCTION: WDA_GetWcnssSoftwareVersion
3171 * Returns the WCNSS Software version string
3172 */
3173VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
3174 tANI_U8 *pVersion,
3175 tANI_U32 versionBufferSize)
3176{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303177 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if ((NULL == pvosGCtx) || (NULL == pVersion))
3181 {
3182 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0);
3185 return VOS_STATUS_E_FAILURE;
3186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3188 if (NULL == pWDA )
3189 {
3190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003191 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 VOS_ASSERT(0);
3193 return VOS_STATUS_E_FAILURE;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
3196 return VOS_STATUS_SUCCESS;
3197}
Jeff Johnson295189b2012-06-20 16:38:30 -07003198/*
3199 * FUNCTION: WDA_GetWcnssHardwareVersion
3200 * Returns the WCNSS Hardware version string
3201 */
3202VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
3203 tANI_U8 *pVersion,
3204 tANI_U32 versionBufferSize)
3205{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303206 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003208 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 if ((NULL == pvosGCtx) || (NULL == pVersion))
3210 {
3211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003212 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 VOS_ASSERT(0);
3214 return VOS_STATUS_E_FAILURE;
3215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3217 if (NULL == pWDA )
3218 {
3219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0);
3222 return VOS_STATUS_E_FAILURE;
3223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
3225 return VOS_STATUS_SUCCESS;
3226}
Jeff Johnson295189b2012-06-20 16:38:30 -07003227/*
3228 * FUNCTION: WDA_WniCfgDnld
3229 * Trigger CFG Download
3230 */
3231VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
3232{
3233 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303234 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07003235
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 if (NULL == pMac )
3237 {
3238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003239 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_ASSERT(0);
3241 return VOS_STATUS_E_FAILURE;
3242 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303243 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 return vosStatus;
3245}
Jeff Johnson295189b2012-06-20 16:38:30 -07003246/* -----------------------------------------------------------------
3247 * WDI interface
3248 * -----------------------------------------------------------------
3249 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003250/*
3251 * FUNCTION: WDA_suspendDataTxCallback
3252 * call back function called from TL after suspend Transmission
3253 */
3254VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
3255 v_U8_t* ucSTAId,
3256 VOS_STATUS vosStatus)
3257{
3258 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003260 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 if (NULL == pWDA )
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003264 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 VOS_ASSERT(0);
3266 return VOS_STATUS_E_FAILURE;
3267 }
3268 if(VOS_IS_STATUS_SUCCESS(vosStatus))
3269 {
3270 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
3271 }
3272 else
3273 {
3274 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
3275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 /* Trigger the event to bring the WDA TL suspend function to come
3277 * out of wait*/
3278 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
3279 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
3280 {
3281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003282 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 /* If TL suspended had timedout before this callback was called, resume back
3285 * TL.*/
3286 if (pWDA->txSuspendTimedOut)
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003289 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 WDA_ResumeDataTx(pWDA);
3291 pWDA->txSuspendTimedOut = FALSE;
3292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return VOS_STATUS_SUCCESS;
3294}
Jeff Johnson295189b2012-06-20 16:38:30 -07003295/*
3296 * FUNCTION: WDA_suspendDataTx
3297 * Update TL to suspend the data Transmission
3298 */
3299VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3300{
3301 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3302 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 if (pWDA->txSuspendTimedOut)
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003310 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 return status;
3312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 /* Reset the event to be not signalled */
3314 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3315 if(!VOS_IS_STATUS_SUCCESS(status))
3316 {
3317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003318 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return VOS_STATUS_E_FAILURE;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003322 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 WDA_SuspendDataTxCallback);
3324 if(status != VOS_STATUS_SUCCESS)
3325 {
3326 return status;
3327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 /* Wait for the event to be set by the TL, to get the response of
3329 * suspending the TX queues, this event should be set by the Callback
3330 * function called by TL*/
3331 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3332 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3333 if(!VOS_IS_STATUS_SUCCESS(status))
3334 {
3335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3336 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003337 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 /* Set this flag to true when TL suspend times out, so that when TL
3339 * suspend eventually happens and calls the callback, TL can be resumed
3340 * right away by looking at this flag when true.*/
3341 pWDA->txSuspendTimedOut = TRUE;
3342 }
3343 else
3344 {
3345 pWDA->txSuspendTimedOut = FALSE;
3346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3348 {
3349 status = VOS_STATUS_SUCCESS;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 return status;
3352}
Jeff Johnson295189b2012-06-20 16:38:30 -07003353/*
3354 * FUNCTION: WDA_resumeDataTx
3355 * Update TL to resume the data Transmission
3356 */
3357VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3358{
3359 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003362 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003363
3364 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 return status;
3366}
Jeff Johnson295189b2012-06-20 16:38:30 -07003367/*
3368 * FUNCTION: WDA_InitScanReqCallback
3369 * Trigger Init SCAN callback
3370 */
3371void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3372{
3373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3374 tWDA_CbContext *pWDA;
3375 tInitScanParams *pWDA_ScanParam ;
3376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 if(NULL == pWdaParams)
3380 {
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 VOS_ASSERT(0) ;
3384 return ;
3385 }
3386 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3387 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 if(NULL == pWDA_ScanParam)
3389 {
3390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003391 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003392 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3394 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 return ;
3396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 if(WDI_STATUS_SUCCESS != wdiStatus)
3398 {
3399 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 if(VOS_STATUS_SUCCESS != status)
3401 {
3402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 }
3405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 /* free WDI command buffer */
3407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303409
3410
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003412 /* without converting the Status to Failure or Success Just
3413 pass the same status to lim */
3414 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 /* send SCAN RSP message back to PE */
3416 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 return ;
3418}
3419
3420/*
3421 * FUNCTION: WDA_ProcessInitScanReq
3422 * Trigger Init SCAN in DAL
3423 */
3424VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3425 tInitScanParams *initScanParams)
3426{
3427 WDI_Status status = WDI_STATUS_SUCCESS ;
3428 WDI_InitScanReqParamsType *wdiInitScanParam =
3429 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3430 sizeof(WDI_InitScanReqParamsType)) ;
3431 tWDA_ReqParams *pWdaParams;
3432 tANI_U8 i = 0;
3433
3434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 if(NULL == wdiInitScanParam)
3437 {
3438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003439 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 VOS_ASSERT(0);
3441 return VOS_STATUS_E_NOMEM;
3442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3444 if(NULL == pWdaParams)
3445 {
3446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_ASSERT(0);
3449 vos_mem_free(wdiInitScanParam);
3450 return VOS_STATUS_E_NOMEM;
3451 }
3452
3453 /* Copy init Scan params to WDI structure */
3454 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3455 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3456 sizeof(tSirMacAddr)) ;
3457 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3458 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3459 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3461 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3463 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3465 {
3466 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3467 initScanParams->scanEntry.bssIdx[i] ;
3468 }
3469
3470 /* if Frame length, copy macMgmtHdr or WDI structure */
3471 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3472 {
3473 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3474 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3475 }
3476 wdiInitScanParam->wdiReqStatusCB = NULL ;
3477
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 /* Store Init Req pointer, as this will be used for response */
3479 pWdaParams->pWdaContext = pWDA;
3480 pWdaParams->wdaMsgParam = initScanParams;
3481 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 /* first try to suspend TX */
3483 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 if(WDI_STATUS_SUCCESS != status)
3485 {
3486 goto handleWdiFailure;
3487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 /* call DAL API to pass init scan request to DAL */
3489 status = WDI_InitScanReq(wdiInitScanParam,
3490 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 if(IS_WDI_STATUS_FAILURE(status))
3492 {
3493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3494 "error in WDA Init Scan, Resume Tx " );
3495 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 VOS_ASSERT(0) ;
3497
3498 goto handleWdiFailure;
3499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501handleWdiFailure:
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3503 "Failure in WDI Api, free all the memory " );
3504 /* free WDI command buffer */
3505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 /* send Failure to PE */
3508 initScanParams->status = eSIR_FAILURE ;
3509 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 return CONVERT_WDI2VOS_STATUS(status) ;
3511}
3512
Jeff Johnson295189b2012-06-20 16:38:30 -07003513/*
3514 * FUNCTION: WDA_StartScanReqCallback
3515 * send Start SCAN RSP back to PE
3516 */
3517void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3518 void* pUserData)
3519{
3520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3521 tWDA_CbContext *pWDA;
3522 tStartScanParams *pWDA_ScanParam;
3523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 if(NULL == pWdaParams)
3526 {
3527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_ASSERT(0) ;
3530 return ;
3531 }
3532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3533 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 if(NULL == pWDA_ScanParam)
3535 {
3536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003539 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 return ;
3541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3543 {
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003545 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003547 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 return ;
3549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3551 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003552
Jeff Johnson295189b2012-06-20 16:38:30 -07003553
3554 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003555 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 /* send SCAN RSP message back to PE */
3557 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 return ;
3559}
3560
Jeff Johnson295189b2012-06-20 16:38:30 -07003561/*
3562 * FUNCTION: WDA_ProcessStartScanReq
3563 * Trigger start SCAN in WDI
3564 */
3565VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3566 tStartScanParams *startScanParams)
3567{
3568 WDI_Status status = WDI_STATUS_SUCCESS;
3569 WDI_StartScanReqParamsType *wdiStartScanParams =
3570 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3571 sizeof(WDI_StartScanReqParamsType)) ;
3572 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(NULL == wdiStartScanParams)
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 VOS_ASSERT(0);
3580 return VOS_STATUS_E_NOMEM;
3581 }
3582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3583 if(NULL == pWdaParams)
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0);
3588 vos_mem_free(wdiStartScanParams);
3589 return VOS_STATUS_E_NOMEM;
3590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 /* Copy init Scan params to WDI structure */
3592 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3593 wdiStartScanParams->wdiReqStatusCB = NULL ;
3594
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 /* Store Init Req pointer, as this will be used for response */
3596 /* store Params pass it to WDI */
3597 pWdaParams->pWdaContext = pWDA;
3598 pWdaParams->wdaMsgParam = startScanParams;
3599 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 /* call DAL API to pass init scan request to DAL */
3601 status = WDI_StartScanReq(wdiStartScanParams,
3602 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 /* failure returned by WDI API */
3604 if(IS_WDI_STATUS_FAILURE(status))
3605 {
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3607 "Failure in Start Scan WDI API, free all the memory "
3608 "It should be due to previous abort scan." );
3609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3610 vos_mem_free(pWdaParams) ;
3611 startScanParams->status = eSIR_FAILURE ;
3612 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 return CONVERT_WDI2VOS_STATUS(status) ;
3615}
Jeff Johnson295189b2012-06-20 16:38:30 -07003616/*
3617 * FUNCTION: WDA_EndScanReqCallback
3618 * END SCAN callback
3619 */
3620void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3621{
3622 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3623 tWDA_CbContext *pWDA;
3624 tEndScanParams *endScanParam;
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 if(NULL == pWdaParams)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003630 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 VOS_ASSERT(0) ;
3632 return ;
3633 }
3634 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3635 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 if(NULL == endScanParam)
3637 {
3638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003639 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3642 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 return ;
3644 }
3645
3646 /* Free WDI command buffer */
3647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3648 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003650 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 /* send response back to PE */
3652 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3653 return ;
3654}
3655
Jeff Johnson295189b2012-06-20 16:38:30 -07003656/*
3657 * FUNCTION: WDA_ProcessEndScanReq
3658 * Trigger END SCAN in WDI
3659 */
3660VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3661 tEndScanParams *endScanParams)
3662{
3663 WDI_Status status = WDI_STATUS_SUCCESS;
3664 WDI_EndScanReqParamsType *wdiEndScanParams =
3665 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3666 sizeof(WDI_EndScanReqParamsType)) ;
3667 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 if(NULL == wdiEndScanParams)
3671 {
3672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 VOS_ASSERT(0);
3675 return VOS_STATUS_E_NOMEM;
3676 }
3677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3678 if(NULL == pWdaParams)
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 VOS_ASSERT(0);
3683 vos_mem_free(wdiEndScanParams);
3684 return VOS_STATUS_E_NOMEM;
3685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 /* Copy init Scan params to WDI structure */
3687 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3688 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 /* Store Init Req pointer, as this will be used for response */
3690 /* store Params pass it to WDI */
3691 pWdaParams->pWdaContext = pWDA;
3692 pWdaParams->wdaMsgParam = endScanParams;
3693 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 /* call DAL API to pass init scan request to DAL */
3695 status = WDI_EndScanReq(wdiEndScanParams,
3696 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(IS_WDI_STATUS_FAILURE(status))
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3700 "Failure in End Scan WDI API, free all the memory "
3701 "It should be due to previous abort scan." );
3702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3703 vos_mem_free(pWdaParams) ;
3704 endScanParams->status = eSIR_FAILURE ;
3705 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 return CONVERT_WDI2VOS_STATUS(status) ;
3708}
Jeff Johnson295189b2012-06-20 16:38:30 -07003709/*
3710 * FUNCTION: WDA_FinishScanReqCallback
3711 * Trigger Finish SCAN callback
3712 */
3713void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3714{
3715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3716 tWDA_CbContext *pWDA;
3717 tFinishScanParams *finishScanParam;
3718 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 if(NULL == pWdaParams)
3722 {
3723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 VOS_ASSERT(0) ;
3726 return ;
3727 }
3728
3729 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3730 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(NULL == finishScanParam)
3732 {
3733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003734 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3737 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 return ;
3739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 /*
3743 * Now Resume TX, if we reached here means, TX is already suspended, we
3744 * have to resume it unconditionaly
3745 */
3746 status = WDA_ResumeDataTx(pWDA) ;
3747
3748 if(VOS_STATUS_SUCCESS != status)
3749 {
3750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003751 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003753 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3755 return ;
3756}
Jeff Johnson295189b2012-06-20 16:38:30 -07003757/*
3758 * FUNCTION: WDA_ProcessFinshScanReq
3759 * Trigger Finish SCAN in WDI
3760 */
3761VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3762 tFinishScanParams *finishScanParams)
3763{
3764 WDI_Status status = WDI_STATUS_SUCCESS;
3765 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3766 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3767 sizeof(WDI_FinishScanReqParamsType)) ;
3768 tWDA_ReqParams *pWdaParams ;
3769 tANI_U8 i = 0;
3770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(NULL == wdiFinishScanParams)
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 VOS_ASSERT(0);
3777 return VOS_STATUS_E_NOMEM;
3778 }
3779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3780 if(NULL == pWdaParams)
3781 {
3782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 VOS_ASSERT(0);
3785 vos_mem_free(wdiFinishScanParams);
3786 return VOS_STATUS_E_NOMEM;
3787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 /* Copy init Scan params to WDI structure */
3789 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3790 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3791 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3793 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3794 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3795 finishScanParams->frameLength ;
3796 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3797 finishScanParams->currentOperChannel ;
3798 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3799 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3800 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3802 {
3803 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3804 finishScanParams->scanEntry.bssIdx[i] ;
3805 }
3806
3807
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 /* if Frame length, copy macMgmtHdr ro WDI structure */
3809 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3810 {
3811 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3812 &finishScanParams->macMgmtHdr,
3813 sizeof(WDI_MacMgmtHdr)) ;
3814 }
3815 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 /* Store Init Req pointer, as this will be used for response */
3817 /* store Params pass it to WDI */
3818 pWdaParams->pWdaContext = pWDA;
3819 pWdaParams->wdaMsgParam = finishScanParams;
3820 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 /* call DAL API to pass init scan request to DAL */
3822 status = WDI_FinishScanReq(wdiFinishScanParams,
3823 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003824
Jeff Johnson295189b2012-06-20 16:38:30 -07003825
3826 /*
3827 * WDI API returns failure..
3828 */
3829 if(IS_WDI_STATUS_FAILURE( status))
3830 {
3831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3832 "Failure in Finish Scan WDI API, free all the memory " );
3833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3834 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 finishScanParams->status = eSIR_FAILURE ;
3836 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 return CONVERT_WDI2VOS_STATUS(status) ;
3839}
Jeff Johnson295189b2012-06-20 16:38:30 -07003840/*---------------------------------------------------------------------
3841 * ASSOC API's
3842 *---------------------------------------------------------------------
3843 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303845 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 * Trigger Init SCAN callback
3847 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303848void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003849{
3850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3851 tWDA_CbContext *pWDA;
3852 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003854 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 if(NULL == pWdaParams)
3856 {
3857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003858 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 VOS_ASSERT(0) ;
3860 return ;
3861 }
3862 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3863 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 /* reset macBSSID */
3867 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 /* reset macSTASelf */
3869 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003870 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 return ;
3873}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303874
3875/*
3876 * FUNCTION: WDA_JoinReqCallback
3877 * Free memory and send SWITCH CHANNEL RSP back to PE.
3878 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3879 */
3880void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3881{
3882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3883 tWDA_CbContext *pWDA;
3884 tSwitchChannelParams *joinReqParam;
3885
3886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3887 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3888
3889 if(NULL == pWdaParams)
3890 {
3891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3892 "%s: pWdaParams received NULL", __func__);
3893 VOS_ASSERT(0);
3894 return;
3895 }
3896
3897 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3898 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3899 joinReqParam->status = wdiStatus;
3900
3901 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3902 {
3903 /* reset macBSSID */
3904 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3905 /* reset macSTASelf */
3906 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3907
3908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3909 vos_mem_free(pWdaParams);
3910 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3911 }
3912
3913 return;
3914}
3915
Jeff Johnson295189b2012-06-20 16:38:30 -07003916/*
3917 * FUNCTION: WDA_ProcessJoinReq
3918 * Trigger Join REQ in WDI
3919 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003920VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3921 tSwitchChannelParams* joinReqParam)
3922{
3923 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 WDI_JoinReqParamsType *wdiJoinReqParam =
3925 (WDI_JoinReqParamsType *)vos_mem_malloc(
3926 sizeof(WDI_JoinReqParamsType)) ;
3927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(NULL == wdiJoinReqParam)
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003935 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 return VOS_STATUS_E_NOMEM;
3937 }
3938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3939 if(NULL == pWdaParams)
3940 {
3941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 VOS_ASSERT(0);
3944 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003945 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 return VOS_STATUS_E_NOMEM;
3947 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003948
3949 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3950 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3951 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3952 {
3953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3954 "%s: received join request when BSSID or self-STA is NULL "
3955 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003956 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003957 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3958 VOS_ASSERT(0);
3959 vos_mem_free(wdiJoinReqParam);
3960 vos_mem_free(pWdaParams);
3961 joinReqParam->status = eSIR_FAILURE ;
3962 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3963 return VOS_STATUS_E_INVAL;
3964 }
3965
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 /* copy the BSSID for pWDA */
3967 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3968 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3970 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3972 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003973#ifdef WLAN_FEATURE_VOWIFI
3974 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3975 joinReqParam->maxTxPower ;
3976#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3978 joinReqParam->localPowerConstraint ;
3979#endif
3980 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3981 joinReqParam->secondaryChannelOffset ;
3982 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3983
Sachin Ahuja935eda782014-07-30 14:57:41 +05303984 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3985 wdiJoinReqParam->pUserData = pWdaParams;
3986
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 /* Store Init Req pointer, as this will be used for response */
3988 /* store Params pass it to WDI */
3989 pWdaParams->pWdaContext = pWDA;
3990 pWdaParams->wdaMsgParam = joinReqParam;
3991 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303993 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 if(IS_WDI_STATUS_FAILURE(status))
3995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3997 "Failure in Join WDI API, free all the memory " );
3998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3999 vos_mem_free(pWdaParams) ;
4000 joinReqParam->status = eSIR_FAILURE ;
4001 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
4002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 return CONVERT_WDI2VOS_STATUS(status) ;
4004}
Jeff Johnson295189b2012-06-20 16:38:30 -07004005/*
4006 * FUNCTION: WDA_SwitchChannelReqCallback
4007 * send Switch channel RSP back to PE
4008 */
4009void WDA_SwitchChannelReqCallback(
4010 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
4011{
4012 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4013 tWDA_CbContext *pWDA;
4014 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004016 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 if(NULL == pWdaParams)
4018 {
4019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004020 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 VOS_ASSERT(0) ;
4022 return ;
4023 }
4024 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4025 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4026
4027#ifdef WLAN_FEATURE_VOWIFI
4028 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
4029#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4031 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004033 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 return ;
4036}
Jeff Johnson295189b2012-06-20 16:38:30 -07004037/*
4038 * FUNCTION: WDA_ProcessChannelSwitchReq
4039 * Request to WDI to switch channel REQ params.
4040 */
4041VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
4042 tSwitchChannelParams *pSwitchChanParams)
4043{
4044 WDI_Status status = WDI_STATUS_SUCCESS ;
4045 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
4046 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
4047 sizeof(WDI_SwitchChReqParamsType)) ;
4048 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 if(NULL == wdiSwitchChanParam)
4052 {
4053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_ASSERT(0);
4056 return VOS_STATUS_E_NOMEM;
4057 }
4058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4059 if(NULL == pWdaParams)
4060 {
4061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 VOS_ASSERT(0);
4064 vos_mem_free(wdiSwitchChanParam);
4065 return VOS_STATUS_E_NOMEM;
4066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
4068#ifndef WLAN_FEATURE_VOWIFI
4069 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4070 pSwitchChanParams->localPowerConstraint;
4071#endif
4072 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4073 pSwitchChanParams->secondaryChannelOffset;
4074 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 /* Store req pointer, as this will be used for response */
4076 /* store Params pass it to WDI */
4077 pWdaParams->pWdaContext = pWDA;
4078 pWdaParams->wdaMsgParam = pSwitchChanParams;
4079 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080#ifdef WLAN_FEATURE_VOWIFI
4081 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
4082 = pSwitchChanParams->maxTxPower;
4083 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4084 pSwitchChanParams ->selfStaMacAddr,
4085 sizeof(tSirMacAddr));
4086#endif
4087 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4088 pSwitchChanParams->bssId,
4089 sizeof(tSirMacAddr));
4090
4091 status = WDI_SwitchChReq(wdiSwitchChanParam,
4092 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 if(IS_WDI_STATUS_FAILURE(status))
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4096 "Failure in process channel switch Req WDI API, free all the memory " );
4097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4098 vos_mem_free(pWdaParams) ;
4099 pSwitchChanParams->status = eSIR_FAILURE ;
4100 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
4101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 return CONVERT_WDI2VOS_STATUS(status) ;
4103}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08004104
4105/*
4106 * FUNCTION: WDA_SwitchChannelReqCallback_V1
4107 * send Switch channel RSP back to PE
4108 */
4109void WDA_SwitchChannelReqCallback_V1(
4110 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
4111 void* pUserData)
4112{
4113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4114 tWDA_CbContext *pWDA;
4115 tSwitchChannelParams *pSwitchChanParams;
4116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4117 "<------ %s " ,__func__);
4118
4119 if (NULL == pWdaParams)
4120 {
4121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4122 "%s: pWdaParams received NULL", __func__);
4123 VOS_ASSERT(0);
4124 return ;
4125 }
4126 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4127 pSwitchChanParams =
4128 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4129 pSwitchChanParams->channelSwitchSrc =
4130 wdiSwitchChanRsp->channelSwitchSrc;
4131#ifdef WLAN_FEATURE_VOWIFI
4132 pSwitchChanParams->txMgmtPower =
4133 wdiSwitchChanRsp->ucTxMgmtPower;
4134#endif
4135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4136 vos_mem_free(pWdaParams);
4137 pSwitchChanParams->status =
4138 wdiSwitchChanRsp->wdiStatus ;
4139 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4140 (void *)pSwitchChanParams , 0);
4141 return;
4142}
4143
4144/*
4145 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
4146 * Request to WDI to switch channel REQ params.
4147 */
4148VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
4149 tSwitchChannelParams *pSwitchChanParams)
4150{
4151 WDI_Status status = WDI_STATUS_SUCCESS ;
4152 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
4153 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
4154 sizeof(WDI_SwitchChReqParamsType_V1)) ;
4155 tWDA_ReqParams *pWdaParams ;
4156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4157 "------> %s " ,__func__);
4158 if (NULL == wdiSwitchChanParam)
4159 {
4160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4161 "%s: VOS MEM Alloc Failure", __func__);
4162 VOS_ASSERT(0);
4163 return VOS_STATUS_E_NOMEM;
4164 }
4165 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4166 if (NULL == pWdaParams)
4167 {
4168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4169 "%s: VOS MEM Alloc Failure", __func__);
4170 VOS_ASSERT(0);
4171 vos_mem_free(wdiSwitchChanParam);
4172 return VOS_STATUS_E_NOMEM;
4173 }
4174 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
4175 pSwitchChanParams->channelSwitchSrc;
4176
4177 wdiSwitchChanParam->wdiChInfo.ucChannel =
4178 pSwitchChanParams->channelNumber;
4179#ifndef WLAN_FEATURE_VOWIFI
4180 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4181 pSwitchChanParams->localPowerConstraint;
4182#endif
4183 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4184 pSwitchChanParams->secondaryChannelOffset;
4185 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
4186 /* Store req pointer, as this will be used for response */
4187 /* store Params pass it to WDI */
4188 pWdaParams->pWdaContext = pWDA;
4189 pWdaParams->wdaMsgParam = pSwitchChanParams;
4190 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
4191#ifdef WLAN_FEATURE_VOWIFI
4192 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
4193 pSwitchChanParams->maxTxPower;
4194 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4195 pSwitchChanParams ->selfStaMacAddr,
4196 sizeof(tSirMacAddr));
4197#endif
4198 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4199 pSwitchChanParams->bssId,
4200 sizeof(tSirMacAddr));
4201
4202 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
4203 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
4204 pWdaParams);
4205 if (IS_WDI_STATUS_FAILURE(status))
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4208 "Failure in process channel switch Req WDI "
4209 "API, free all the memory " );
4210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4211 vos_mem_free(pWdaParams) ;
4212 pSwitchChanParams->status = eSIR_FAILURE ;
4213 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4214 (void *)pSwitchChanParams, 0) ;
4215 }
4216 return CONVERT_WDI2VOS_STATUS(status) ;
4217}
4218
Jeff Johnson295189b2012-06-20 16:38:30 -07004219/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304220 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 * config BSS Req Callback, called by WDI
4222 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304223void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 ,void* pUserData)
4225{
4226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4227 tWDA_CbContext *pWDA;
4228 tAddBssParams *configBssReqParam;
4229 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 if(NULL == pWdaParams)
4233 {
4234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_ASSERT(0) ;
4237 return ;
4238 }
4239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4240 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
4241 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004243 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
4245 {
4246 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
4247 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
4249 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
4250 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
4251
4252 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
4253 {
4254 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
4255 {
4256 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
4257 staConfigBssParam->staType = STA_ENTRY_BSSID;
4258 }
4259 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
4260 (staConfigBssParam->staType == STA_ENTRY_SELF))
4261 {
4262 /* This is the 1st add BSS Req for the BTAMP STA */
4263 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4264 staConfigBssParam->staType = STA_ENTRY_BSSID;
4265 }
4266 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4267 (staConfigBssParam->staType == STA_ENTRY_PEER))
4268 {
4269 /* This is the 2nd ADD BSS Request that is sent
4270 * on the BTAMP STA side. The Sta type is
4271 * set to STA_ENTRY_PEER here.*/
4272 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4273 }
4274 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4275 (staConfigBssParam->staType == STA_ENTRY_SELF))
4276 {
4277 /* statype is already set by PE.
4278 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
4279 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
4280 staConfigBssParam->staType = STA_ENTRY_BSSID;
4281 }
4282 else
4283 {
4284 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
4285 staConfigBssParam->staType = STA_ENTRY_PEER;
4286 }
4287 }
4288 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4289 {
4290 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4291 staConfigBssParam->staType = STA_ENTRY_SELF;
4292 }
4293 else
4294 {
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4296 "Invalid operation mode specified");
4297 VOS_ASSERT(0);
4298 }
4299
4300 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4305 sizeof(tSirMacAddr));
4306 staConfigBssParam->txChannelWidthSet =
4307 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4309 staConfigBssParam->htCapable)
4310 {
4311 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4312 wdiConfigBssRsp->ucBSSIdx;
4313 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4314 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304315 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4316 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4319 wdiConfigBssRsp->ucBSSIdx,
4320 wdiConfigBssRsp->ucSTAIdx))
4321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_ASSERT(0) ;
4325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_ASSERT(0) ;
4331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004332#ifdef WLAN_FEATURE_VOWIFI
4333 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4334#endif
4335 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304336 else
4337 {
4338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4339 "%s: Failure with status %d", __func__,
4340 wdiConfigBssRsp->wdiStatus);
4341 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4342 WLAN_LOG_INDICATOR_HOST_DRIVER,
4343 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4344 FALSE, TRUE);
4345 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304346 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4347 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4349 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 return ;
4352}
Jeff Johnson295189b2012-06-20 16:38:30 -07004353/*
4354 * FUNCTION: WDA_UpdateEdcaParamsForAC
4355 * Update WDI EDCA params with PE edca params
4356 */
4357void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4358 WDI_EdcaParamRecord *wdiEdcaParam,
4359 tSirMacEdcaParamRecord *macEdcaParam)
4360{
4361 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4362 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4363 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4364 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4365 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4366 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4367}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304368void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4369 void* pUserData)
4370{
4371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4372 tWDA_CbContext *pWDA;
4373 tAddBssParams *addBssParams;
4374
4375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4376 "<------ %s, wdiStatus: %d",
4377 __func__, wdiStatus);
4378
4379 if (NULL == pWdaParams)
4380 {
4381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4382 "%s: Invalid pWdaParams pointer", __func__);
4383 VOS_ASSERT(0);
4384 return;
4385 }
4386
4387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4388 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4389
4390 addBssParams->status = wdiStatus;
4391
4392 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4393 {
4394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4395 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304396 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4397 WLAN_LOG_INDICATOR_HOST_DRIVER,
4398 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4399 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304400 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4401 }
4402
4403 return ;
4404}
4405
Jeff Johnson295189b2012-06-20 16:38:30 -07004406/*
4407 * FUNCTION: WDA_ProcessConfigBssReq
4408 * Configure BSS before starting Assoc with AP
4409 */
4410VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4411 tAddBssParams* configBssReqParam)
4412{
4413 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304414 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304418 if (NULL == configBssReqParam)
4419 {
4420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4421 "%s: configBssReqParam is NULL", __func__);
4422 return VOS_STATUS_E_INVAL;
4423 }
4424
4425 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4426 sizeof(WDI_ConfigBSSReqParamsType)) ;
4427
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(NULL == wdiConfigBssReqParam)
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 VOS_ASSERT(0);
4433 return VOS_STATUS_E_NOMEM;
4434 }
4435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4436 if(NULL == pWdaParams)
4437 {
4438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 VOS_ASSERT(0);
4441 vos_mem_free(wdiConfigBssReqParam);
4442 return VOS_STATUS_E_NOMEM;
4443 }
Kiran4a17ebe2013-01-31 10:43:43 -08004444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4445 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4448 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304449 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4450 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 /* Store Init Req pointer, as this will be used for response */
4452 /* store Params pass it to WDI */
4453 pWdaParams->pWdaContext = pWDA;
4454 pWdaParams->wdaMsgParam = configBssReqParam;
4455 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304457 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 if(IS_WDI_STATUS_FAILURE(status))
4459 {
4460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4461 "Failure in Config BSS WDI API, free all the memory " );
4462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4463 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 return CONVERT_WDI2VOS_STATUS(status) ;
4468}
Jeff Johnson295189b2012-06-20 16:38:30 -07004469#ifdef ENABLE_HAL_COMBINED_MESSAGES
4470/*
4471 * FUNCTION: WDA_PostAssocReqCallback
4472 * Post ASSOC req callback, send RSP back to PE
4473 */
4474void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4475 void* pUserData)
4476{
4477 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4478 tPostAssocParams *postAssocReqParam =
4479 (tPostAssocParams *)pWDA->wdaMsgParam ;
4480 /*STA context within the BSS Params*/
4481 tAddStaParams *staPostAssocParam =
4482 &postAssocReqParam->addBssParams.staContext ;
4483 /*STA Params for self STA*/
4484 tAddStaParams *selfStaPostAssocParam =
4485 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004487 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004489 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4491 {
4492 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4493 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4494 sizeof(tSirMacAddr)) ;
4495 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4496 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4497 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4499 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304500 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4502 pWDA->wdaWdiApiMsgParam = NULL;
4503 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 return ;
4506}
Jeff Johnson295189b2012-06-20 16:38:30 -07004507/*
4508 * FUNCTION: WDA_ProcessPostAssocReq
4509 * Trigger POST ASSOC processing in WDI
4510 */
4511VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4512 tPostAssocParams *postAssocReqParam)
4513{
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 WDI_Status status = WDI_STATUS_SUCCESS ;
4515
4516 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4517 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4518 sizeof(WDI_PostAssocReqParamsType)) ;
4519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 if(NULL == wdiPostAssocReqParam)
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_ASSERT(0);
4527 return VOS_STATUS_E_NOMEM;
4528 }
4529
4530 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4531 {
4532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004533 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 VOS_ASSERT(0);
4535 return VOS_STATUS_E_FAILURE;
4536 }
4537
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 /* update BSS params into WDI structure */
4539 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4540 &postAssocReqParam->addBssParams) ;
4541 /* update STA params into WDI structure */
4542 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4543 &postAssocReqParam->addStaParams) ;
4544
4545 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4546 postAssocReqParam->addBssParams.highPerformance;
4547 WDA_UpdateEdcaParamsForAC(pWDA,
4548 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4549 &postAssocReqParam->addBssParams.acbe);
4550 WDA_UpdateEdcaParamsForAC(pWDA,
4551 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4552 &postAssocReqParam->addBssParams.acbk);
4553 WDA_UpdateEdcaParamsForAC(pWDA,
4554 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4555 &postAssocReqParam->addBssParams.acvi);
4556 WDA_UpdateEdcaParamsForAC(pWDA,
4557 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4558 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 /* Store Init Req pointer, as this will be used for response */
4560 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 /* store Params pass it to WDI */
4562 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4564 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 if(IS_WDI_STATUS_FAILURE(status))
4566 {
4567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4568 "Failure in Post Assoc WDI API, free all the memory " );
4569 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4570 pWDA->wdaWdiApiMsgParam = NULL;
4571 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 return CONVERT_WDI2VOS_STATUS(status) ;
4576}
4577#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004578/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304579 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 * ADD STA req callback, send RSP back to PE
4581 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304582void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 void* pUserData)
4584{
4585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4586 tWDA_CbContext *pWDA;
4587 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 if(NULL == pWdaParams)
4591 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 VOS_ASSERT(0) ;
4594 return ;
4595 }
4596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4597 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004599 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4601 {
4602 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4603 /*TODO: UMAC structure doesn't have these fields*/
4604 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4605 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4606 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4607 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4608 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4609 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004610#ifdef FEATURE_WLAN_TDLS
4611 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4612 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4613#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004615#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 {
4617 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4618 wdiConfigStaRsp->ucBssIdx;
4619 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4620 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304621 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4622 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 }
4624 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4625 {
4626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004627 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 VOS_ASSERT(0) ;
4629 return ;
4630 }
4631 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304632 else
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4635 "%s: Failure with status %d", __func__,
4636 wdiConfigStaRsp->wdiStatus);
4637 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4638 WLAN_LOG_INDICATOR_HOST_DRIVER,
4639 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4640 FALSE, TRUE);
4641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4643 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 return ;
4646}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304647void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4648 void* pUserData)
4649{
4650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4651 tWDA_CbContext *pWDA;
4652 tAddStaParams *addStaParams;
4653
4654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4655 "<------ %s, wdiStatus: %d",
4656 __func__, wdiStatus);
4657
4658 if (NULL == pWdaParams)
4659 {
4660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4661 "%s: Invalid pWdaParams pointer", __func__);
4662 VOS_ASSERT(0);
4663 return;
4664 }
4665
4666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4667 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4668
4669 addStaParams->status = wdiStatus;
4670
4671 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4672 {
4673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4674 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304675 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4676 WLAN_LOG_INDICATOR_HOST_DRIVER,
4677 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4678 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304679 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4680 }
4681
4682 return ;
4683}
4684
Jeff Johnson295189b2012-06-20 16:38:30 -07004685/*
4686 * FUNCTION: WDA_ConfigStaReq
4687 * Trigger Config STA processing in WDI
4688 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304689VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 tAddStaParams *addStaReqParam)
4691{
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4694 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4695 sizeof(WDI_ConfigSTAReqParamsType)) ;
4696 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 if(NULL == wdiConfigStaReqParam)
4700 {
4701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 VOS_ASSERT(0);
4704 return VOS_STATUS_E_NOMEM;
4705 }
4706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4707 if(NULL == pWdaParams)
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 VOS_ASSERT(0);
4712 vos_mem_free(wdiConfigStaReqParam);
4713 return VOS_STATUS_E_NOMEM;
4714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 /* update STA params into WDI structure */
4717 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4718 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304719 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4720 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 /* Store Init Req pointer, as this will be used for response */
4722 /* store Params pass it to WDI */
4723 pWdaParams->pWdaContext = pWDA;
4724 pWdaParams->wdaMsgParam = addStaReqParam;
4725 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304726
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304728 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 if(IS_WDI_STATUS_FAILURE(status))
4730 {
4731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4732 "Failure in Config STA WDI API, free all the memory " );
4733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4734 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 return CONVERT_WDI2VOS_STATUS(status) ;
4739}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304740#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304741
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304742/**
4743 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4744 *
4745 * @pWDA: WDA Call back context
4746 * @addStaReqParam: Add sta request params
4747 *
4748 * This function process sta params and store them to WDA layer.
4749 * It will register station entry to mempool as well.
4750 * As station is already in associated state in firmware this
4751 * function doesnt send any request to firmware and wait for response,
4752 * instead of that this function will send response from here.
4753 *
4754 * Return: Return VOS_STATUS
4755 */
4756VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4757 tAddStaParams *addStaReqParam)
4758{
4759 WDI_Status status = WDI_STATUS_SUCCESS ;
4760 WDI_AddStaParams wdiAddSTAParam = {0};
4761 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4762 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4763 sizeof(WDI_ConfigSTAReqParamsType)) ;
4764
4765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4766 "------> %s " ,__func__);
4767
4768 if (NULL == wdiConfigStaReqParam)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4771 "%s: VOS MEM Alloc Failure", __func__);
4772 VOS_ASSERT(0);
4773 return VOS_STATUS_E_NOMEM;
4774 }
4775
4776 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4777 /* update STA params into WDI structure */
4778 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4779 addStaReqParam);
4780 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4781 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4782 /* MAC Address of STA */
4783 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4784 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4785 WDI_MAC_ADDR_LEN);
4786
4787 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4788 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4789 WDI_MAC_ADDR_LEN);
4790
4791 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4792 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4793 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4794 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4795 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4796 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
Agrawal Ashishedd0f622016-12-19 20:27:02 +05304797 wdiAddSTAParam.ucWmmEnabled = addStaReqParam->wmmEnabled;
4798 wdiAddSTAParam.ucRmfEnabled = addStaReqParam->rmfEnabled;
4799 wdiAddSTAParam.ucBSSIdx = addStaReqParam->bssIdx;
4800 wdiAddSTAParam.ucHTCapable = addStaReqParam->htCapable;
4801
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304802
4803 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4804 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4805 WDA_VALID_STA_INDEX;
4806 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4807 addStaReqParam->currentOperChan;
4808
4809 if (WDI_STATUS_SUCCESS !=
4810 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4811 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4812 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4815 "%s: Failed to get selfStaIdx!", __func__);
4816 }
4817 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4818 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4819 {
4820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4821 "%s: add STA into mempool fail", __func__);
4822 VOS_ASSERT(0) ;
4823 }
4824 vos_mem_free(wdiConfigStaReqParam);
4825 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4826 return status;
4827}
4828#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004829/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304830 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304832 */
4833void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 void* pUserData)
4835{
4836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4837 tWDA_CbContext *pWDA;
4838 tDeleteBssParams *delBssReqParam;
4839 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(NULL == pWdaParams)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0) ;
4847 return ;
4848 }
4849 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4850 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004851 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4853 {
4854 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4855 sizeof(tSirMacAddr)) ;
4856 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304857 else
4858 {
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4860 "%s: Failure with status %d", __func__,
4861 wdiDelBssRsp->wdiStatus);
4862 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4863 WLAN_LOG_INDICATOR_HOST_DRIVER,
4864 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4865 FALSE, TRUE);
4866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4868 {
4869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004870 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 VOS_ASSERT(0) ;
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4874 {
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 VOS_ASSERT(0) ;
4878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4880 {
4881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004882 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 VOS_ASSERT(0) ;
4884 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304885
4886 WLANTL_StartForwarding(staIdx,0,0);
4887
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4889 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 /* reset the the system role*/
4891 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4892
4893 /* Reset the BA related information */
4894 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4895 {
4896 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4897 {
4898 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4899 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304900 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 /* Reset framesTxed counters here */
4902 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4903 {
4904 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4905 }
4906 }
4907 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304908
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 return ;
4911}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304912void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4913 void* pUserData)
4914{
4915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4916 tWDA_CbContext *pWDA;
4917 tDeleteBssParams *delbssParams;
4918
4919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4920 "<------ %s, wdiStatus: %d",
4921 __func__, wdiStatus);
4922
4923 if (NULL == pWdaParams)
4924 {
4925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4926 "%s: Invalid pWdaParams pointer", __func__);
4927 VOS_ASSERT(0);
4928 return;
4929 }
4930
4931 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4932 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4933
4934 delbssParams->status = wdiStatus ;
4935
4936 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4937 {
4938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4939 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304940 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4941 WLAN_LOG_INDICATOR_HOST_DRIVER,
4942 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4943 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304944 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4945 }
4946
4947 return ;
4948}
Jeff Johnson295189b2012-06-20 16:38:30 -07004949
Jeff Johnson295189b2012-06-20 16:38:30 -07004950/*
4951 * FUNCTION: WDA_ProcessDelBssReq
4952 * Init DEL BSS req with WDI
4953 */
4954VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4955 tDeleteBssParams *delBssParam)
4956{
4957 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4959 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4960 sizeof(WDI_DelBSSReqParamsType)) ;
4961 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004963 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 if(NULL == wdiDelBssReqParam)
4965 {
4966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 VOS_ASSERT(0);
4969 return VOS_STATUS_E_NOMEM;
4970 }
4971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4972 if(NULL == pWdaParams)
4973 {
4974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 VOS_ASSERT(0);
4977 vos_mem_free(wdiDelBssReqParam);
4978 return VOS_STATUS_E_NOMEM;
4979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304981 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4982 wdiDelBssReqParam->pUserData = pWdaParams;
4983
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 /* Store Init Req pointer, as this will be used for response */
4985 /* store Params pass it to WDI */
4986 pWdaParams->pWdaContext = pWDA;
4987 pWdaParams->wdaMsgParam = delBssParam;
4988 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304989
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304991 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 if(IS_WDI_STATUS_FAILURE(status))
4993 {
4994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4995 "Failure in Del BSS WDI API, free all the memory " );
4996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4997 vos_mem_free(pWdaParams) ;
4998 delBssParam->status = eSIR_FAILURE ;
4999 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
5000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 return CONVERT_WDI2VOS_STATUS(status) ;
5002}
Jeff Johnson295189b2012-06-20 16:38:30 -07005003/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305004 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305006 */
5007void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 void* pUserData)
5009{
5010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5011 tWDA_CbContext *pWDA;
5012 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005014 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 if(NULL == pWdaParams)
5016 {
5017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005018 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305019 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 return ;
5021 }
5022 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5023 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005024 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
5026 {
5027 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
5028 {
5029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005030 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 VOS_ASSERT(0) ;
5032 }
5033 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05305034 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 }
Abhishek Singh837adf22015-10-01 17:37:37 +05305036 else
5037 {
5038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5039 "%s: Failure with status %d", __func__,
5040 wdiDelStaRsp->wdiStatus);
5041 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5042 WLAN_LOG_INDICATOR_HOST_DRIVER,
5043 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5044 FALSE, TRUE);
5045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5047 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 /*Reset the BA information corresponding to this STAIdx */
5049 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
5050 WDA_INVALID_STA_INDEX;
5051 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05305052 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 return ;
5055}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305056void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
5057 void* pUserData)
5058{
5059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5060 tWDA_CbContext *pWDA;
5061 tDeleteStaParams *delStaParams;
5062
5063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5064 "<------ %s, wdiStatus: %d",
5065 __func__, wdiStatus);
5066
5067 if (NULL == pWdaParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5070 "%s: Invalid pWdaParams pointer", __func__);
5071 VOS_ASSERT(0);
5072 return;
5073 }
5074
5075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5076 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
5077
5078 delStaParams->status = wdiStatus ;
5079
5080 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5081 {
5082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5083 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305084 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5085 WLAN_LOG_INDICATOR_HOST_DRIVER,
5086 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5087 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305088 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
5089 }
5090
5091 return ;
5092}
5093
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305094#ifdef SAP_AUTH_OFFLOAD
5095/**
5096 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
5097 *
5098 * @pWDA: WDA Call back context
5099 * @delStaParam: Del sta request params
5100 *
5101 * This function process sta params and remove entry from WDA layer.
5102 * It will unregister station entry from mempool as well.
5103 * As station is already in disassociated state in firmware this
5104 * function doesn't send any request to firmware and wait for response,
5105 * instead of that this function will send response from here.
5106 *
5107 * Return: Return VOS_STATUS
5108 */
5109void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
5110 tDeleteStaParams *delStaParam)
5111
5112{
5113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5114 "------> %s " ,__func__);
5115
5116 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
5117 {
5118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5119 "%s: DEL STA from MemPool Fail", __func__);
5120 // VOS_ASSERT(0) ;
5121 }
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305122 WLANTL_StartForwarding(delStaParam->staIdx, 0, 0);
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305123 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
5124 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
5125 WDA_INVALID_STA_INDEX;
5126 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305127 pWDA->wdaStaInfo[delStaParam->staIdx].ucUseBaBitmap = 0;
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305128 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
5129 return ;
5130}
5131#endif
5132
Jeff Johnson295189b2012-06-20 16:38:30 -07005133/*
5134 * FUNCTION: WDA_ProcessDelStaReq
5135 * Init DEL STA req with WDI
5136 */
5137VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
5138 tDeleteStaParams *delStaParam)
5139{
5140 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
5142 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
5143 sizeof(WDI_DelSTAReqParamsType)) ;
5144 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(NULL == wdiDelStaReqParam)
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 VOS_ASSERT(0);
5152 return VOS_STATUS_E_NOMEM;
5153 }
5154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0);
5160 vos_mem_free(wdiDelStaReqParam);
5161 return VOS_STATUS_E_NOMEM;
5162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305164 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
5165 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 /* Store Init Req pointer, as this will be used for response */
5167 /* store Params pass it to WDI */
5168 pWdaParams->pWdaContext = pWDA;
5169 pWdaParams->wdaMsgParam = delStaParam;
5170 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305171
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305173 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(IS_WDI_STATUS_FAILURE(status))
5175 {
5176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5177 "Failure in Del STA WDI API, free all the memory status = %d",
5178 status );
5179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5180 vos_mem_free(pWdaParams) ;
5181 delStaParam->status = eSIR_FAILURE ;
5182 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
5183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 return CONVERT_WDI2VOS_STATUS(status) ;
5185}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305186void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07005187{
5188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5189 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305190 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005192 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 if(NULL == pWdaParams)
5194 {
5195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005196 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_ASSERT(0) ;
5198 return ;
5199 }
5200 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5201 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5203 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
5205 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
5206 pwdiAddSTASelfRsp->macSelfSta,
5207 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305208 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
5209 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
5210 if (pAddStaSelfRsp->status == eSIR_FAILURE)
5211 {
5212 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
5213 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5215 "%s: Failure with status %d failcnter %d", __func__,
5216 pwdiAddSTASelfRsp->wdiStatus,
5217 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5218 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5219 WLAN_LOG_INDICATOR_HOST_DRIVER,
5220 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5221 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 return ;
5225}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305226void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
5227 void* pUserData)
5228{
5229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5230 tWDA_CbContext *pWDA;
5231 tAddStaSelfParams *addStaSelfParams;
5232
5233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5234 "<------ %s, wdiStatus: %d",
5235 __func__, wdiStatus);
5236
5237 if (NULL == pWdaParams)
5238 {
5239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5240 "%s: Invalid pWdaParams pointer", __func__);
5241 VOS_ASSERT(0);
5242 return;
5243 }
5244
5245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5246 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
5247
5248 addStaSelfParams->status = wdiStatus ;
5249
5250 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5251 {
5252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5253 vos_mem_free(pWdaParams) ;
5254 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
5255 = WDA_ADDSTA_REQ_WDI_FAIL;
5256 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "%s: Failure with status %d failcnter %d", __func__,
5259 wdiStatus,
5260 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5261 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5262 WLAN_LOG_INDICATOR_HOST_DRIVER,
5263 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5264 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305265 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
5266 }
5267
5268 return ;
5269}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305270
Jeff Johnson295189b2012-06-20 16:38:30 -07005271/*
5272 * FUNCTION: WDA_ProcessAddStaSelfReq
5273 *
5274 */
5275VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
5276{
5277 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005278 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
5280 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
5281 sizeof(WDI_AddSTASelfReqParamsType)) ;
5282 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005284 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305285 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 if( NULL == wdiAddStaSelfReq )
5287 {
5288 VOS_ASSERT( 0 );
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305291 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5292 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 return( VOS_STATUS_E_NOMEM );
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 if( NULL == pWdaParams )
5297 {
5298 VOS_ASSERT( 0 );
5299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005300 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305301 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5302 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 vos_mem_free(wdiAddStaSelfReq) ;
5304 return( VOS_STATUS_E_NOMEM );
5305 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305306 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5307 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005309 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 /* Store Init Req pointer, as this will be used for response */
5311 /* store Params pass it to WDI */
5312 pWdaParams->pWdaContext = pWDA;
5313 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305314 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5315
5316 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5317 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318
Jeff Johnson43971f52012-07-17 12:26:56 -07005319 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 {
5321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5322 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005323 wstatus );
5324 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5326 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305327 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5328 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 pAddStaSelfReq->status = eSIR_FAILURE ;
5330 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5331 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005332 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333}
Jeff Johnson295189b2012-06-20 16:38:30 -07005334/*
5335 * FUNCTION: WDA_DelSTASelfRespCallback
5336 *
5337 */
5338void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5339 wdiDelStaSelfRspParams , void* pUserData)
5340{
5341 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5342 tWDA_CbContext *pWDA;
5343 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005345 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 if (NULL == pWdaParams)
5347 {
5348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005349 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 VOS_ASSERT(0);
5351 return;
5352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5354 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005356 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005357
5358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5359 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305360 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305361 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5363 "%s: Failure with status %d", __func__,
5364 wdiDelStaSelfRspParams->wdiStatus);
5365 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5366 WLAN_LOG_INDICATOR_HOST_DRIVER,
5367 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5368 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 return ;
5372}
Jeff Johnson295189b2012-06-20 16:38:30 -07005373/*
5374 * FUNCTION: WDA_DelSTASelfReqCallback
5375 *
5376 */
5377void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5378 void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tDelStaSelfParams *delStaSelfParams;
5383
5384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson2ef57602017-09-19 08:31:46 -07005385 "<------ %s, wdiStatus: %d pWdaParams: %pK",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387
5388 if (NULL == pWdaParams)
5389 {
5390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005391 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 VOS_ASSERT(0);
5393 return;
5394 }
5395
5396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5397 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5398
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005399 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400
5401 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5402 {
5403 VOS_ASSERT(0);
5404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5405 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305406 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5407 WLAN_LOG_INDICATOR_HOST_DRIVER,
5408 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5409 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5411 }
5412
5413 return ;
5414}
5415
5416/*
5417 * FUNCTION: WDA_DelSTASelfReq
5418 * Trigger Config STA processing in WDI
5419 */
5420VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5421 tDelStaSelfParams* pDelStaSelfReqParam)
5422{
5423 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005424 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 tWDA_ReqParams *pWdaParams = NULL;
5426 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5427 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5428 sizeof(WDI_DelSTASelfReqParamsType)) ;
5429
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 if( NULL == wdiDelStaSelfReq )
5433 {
5434 VOS_ASSERT( 0 );
5435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005436 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 return( VOS_STATUS_E_NOMEM );
5438 }
5439
5440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5441 if( NULL == pWdaParams )
5442 {
5443 VOS_ASSERT( 0 );
5444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005445 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 vos_mem_free(wdiDelStaSelfReq) ;
5447 return( VOS_STATUS_E_NOMEM );
5448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 pWdaParams->pWdaContext = pWDA;
5450 /* Store param pointer as passed in by caller */
5451 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5452 /* store Params pass it to WDI */
5453 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5455 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5456
5457 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5458 wdiDelStaSelfReq->pUserData = pWdaParams;
5459
Jeff Johnson43971f52012-07-17 12:26:56 -07005460 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5462
Jeff Johnson43971f52012-07-17 12:26:56 -07005463 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 {
5465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5466 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5467 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005468 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5470 vos_mem_free(pWdaParams) ;
5471 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5472 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5473 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005474 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005475}
5476
Jeff Johnson295189b2012-06-20 16:38:30 -07005477/*
5478 * FUNCTION: WDA_SendMsg
5479 * Send Message back to PE
5480 */
5481void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5482 void *pBodyptr, tANI_U32 bodyVal)
5483{
5484 tSirMsgQ msg = {0} ;
5485 tANI_U32 status = VOS_STATUS_SUCCESS ;
5486 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 msg.type = msgType;
5488 msg.bodyval = bodyVal;
5489 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 if (VOS_STATUS_SUCCESS != status)
5492 {
5493 if(NULL != pBodyptr)
5494 {
5495 vos_mem_free(pBodyptr);
5496 }
5497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005498 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 VOS_ASSERT(0) ;
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return ;
5502}
Jeff Johnson295189b2012-06-20 16:38:30 -07005503/*
5504 * FUNCTION: WDA_UpdateBSSParams
5505 * Translated WDA/PE BSS info into WDI BSS info..
5506 */
5507void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5508 WDI_ConfigBSSReqInfoType *wdiBssParams,
5509 tAddBssParams *wdaBssParams)
5510{
5511 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305512 v_U8_t i = 0;
5513
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 /* copy bssReq Params to WDI structure */
5515 vos_mem_copy(wdiBssParams->macBSSID,
5516 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5517 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5518 sizeof(tSirMacAddr)) ;
5519 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5520 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5521 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 wdiBssParams->ucShortSlotTimeSupported =
5523 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5525 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5526 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5527 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5528 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5529
5530 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5531 wdiBssParams->ucTXOPProtectionFullSupport =
5532 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5534 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5537 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5538 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5539 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5540
Chet Lanctot186b5732013-03-18 10:26:30 -07005541 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5542
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 /* copy SSID into WDI structure */
5544 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5545 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5546 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5548 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550#ifdef WLAN_FEATURE_VOWIFI
5551 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5552#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005555#ifdef WLAN_FEATURE_VOWIFI_11R
5556 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 if(wdiBssParams->bExtSetStaKeyParamValid)
5558 {
5559 /* copy set STA key params to WDI structure */
5560 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5561 wdaBssParams->extSetStaKeyParam.staIdx;
5562 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5563 wdaBssParams->extSetStaKeyParam.encType;
5564 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5565 wdaBssParams->extSetStaKeyParam.wepType;
5566 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5567 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5569 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005570 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5572 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5573 {
5574 WDA_GetWepKeysFromCfg( pWDA,
5575 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5576 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5577 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5578 }
5579 else
5580 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5582 keyIndex++)
5583 {
5584 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5585 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5586 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5587 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5588 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5589 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305590
5591 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5592 {
5593 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5594 {
5595 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5596 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5597 }
5598
5599 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5600 {
5601 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5602 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5603 }
5604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5605 FL("%s: Negated Keys"), __func__);
5606 }
5607 else
5608 {
5609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5610 FL("%s: No change in Keys "), __func__);
5611 vos_mem_copy(
5612 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5613 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5614 WLAN_MAX_KEY_RSC_LEN);
5615 vos_mem_copy(
5616 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5617 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5618 SIR_MAC_MAX_KEY_LENGTH);
5619 }
5620
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5622 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5623 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5624 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305626 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 }
5629 }
5630 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5631 }
5632 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5633 {
5634 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5635 sizeof(wdaBssParams->extSetStaKeyParam) );
5636 }
5637#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005638#ifdef WLAN_FEATURE_11AC
5639 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5640 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5641#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005642
5643 return ;
5644}
Jeff Johnson295189b2012-06-20 16:38:30 -07005645/*
5646 * FUNCTION: WDA_UpdateSTAParams
5647 * Translated WDA/PE BSS info into WDI BSS info..
5648 */
5649void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5650 WDI_ConfigStaReqInfoType *wdiStaParams,
5651 tAddStaParams *wdaStaParams)
5652{
5653 tANI_U8 i = 0;
5654 /* Update STA params */
5655 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5656 sizeof(tSirMacAddr)) ;
5657 wdiStaParams->usAssocId = wdaStaParams->assocId;
5658 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005659 wdiStaParams->staIdx = wdaStaParams->staIdx;
5660
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 wdiStaParams->ucShortPreambleSupported =
5662 wdaStaParams->shortPreambleSupported;
5663 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5664 sizeof(tSirMacAddr)) ;
5665 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5666
5667 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5668
5669 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5670 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5671 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5672 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5673 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5674 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5675 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5676
5677 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5678 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 wdiStaParams->wdiSupportedRates.opRateMode =
5680 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5682 {
5683 wdiStaParams->wdiSupportedRates.llbRates[i] =
5684 wdaStaParams->supportedRates.llbRates[i];
5685 }
5686 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5687 {
5688 wdiStaParams->wdiSupportedRates.llaRates[i] =
5689 wdaStaParams->supportedRates.llaRates[i];
5690 }
5691 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5692 {
5693 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5694 wdaStaParams->supportedRates.aniLegacyRates[i];
5695 }
5696 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5697 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005698#ifdef WLAN_FEATURE_11AC
5699 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5700 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5701 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5702 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5703#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5705 {
5706 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5707 wdaStaParams->supportedRates.supportedMCSSet[i];
5708 }
5709 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5710 wdaStaParams->supportedRates.rxHighestDataRate;
5711
5712 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5713
5714 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5715
5716 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5717 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5718 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5719
5720 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5721 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5722 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5723 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005725#ifdef WLAN_FEATURE_11AC
5726 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5727 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005728 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305729 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5730 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5731 * must be set by default */
5732 if ( wdiStaParams->vhtTxMUBformeeCapable )
5733 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005734#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005735 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5736 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 return ;
5738}
Jeff Johnson295189b2012-06-20 16:38:30 -07005739/*
5740 * -------------------------------------------------------------------------
5741 * CFG update to WDI
5742 * -------------------------------------------------------------------------
5743 */
5744
5745 /*
5746 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5747 * Convert the WNI CFG ID to HAL CFG ID
5748 */
mukul sharma6b53e202016-11-23 19:29:18 +05305749static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005750{
5751 switch(wniCfgId)
5752 {
5753 case WNI_CFG_STA_ID:
5754 return QWLAN_HAL_CFG_STA_ID;
5755 case WNI_CFG_CURRENT_TX_ANTENNA:
5756 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5757 case WNI_CFG_CURRENT_RX_ANTENNA:
5758 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5759 case WNI_CFG_LOW_GAIN_OVERRIDE:
5760 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5761 case WNI_CFG_POWER_STATE_PER_CHAIN:
5762 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5763 case WNI_CFG_CAL_PERIOD:
5764 return QWLAN_HAL_CFG_CAL_PERIOD;
5765 case WNI_CFG_CAL_CONTROL:
5766 return QWLAN_HAL_CFG_CAL_CONTROL;
5767 case WNI_CFG_PROXIMITY:
5768 return QWLAN_HAL_CFG_PROXIMITY;
5769 case WNI_CFG_NETWORK_DENSITY:
5770 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5771 case WNI_CFG_MAX_MEDIUM_TIME:
5772 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5773 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5774 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5775 case WNI_CFG_RTS_THRESHOLD:
5776 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5777 case WNI_CFG_SHORT_RETRY_LIMIT:
5778 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5779 case WNI_CFG_LONG_RETRY_LIMIT:
5780 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5781 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5782 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5783 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5784 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5785 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5786 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5787 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5788 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5789 case WNI_CFG_FIXED_RATE:
5790 return QWLAN_HAL_CFG_FIXED_RATE;
5791 case WNI_CFG_RETRYRATE_POLICY:
5792 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5793 case WNI_CFG_RETRYRATE_SECONDARY:
5794 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5795 case WNI_CFG_RETRYRATE_TERTIARY:
5796 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5797 case WNI_CFG_FORCE_POLICY_PROTECTION:
5798 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5799 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5800 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5801 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5802 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5803 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5804 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5805 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5806 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5807 case WNI_CFG_MAX_BA_SESSIONS:
5808 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5809 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5810 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5811 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5812 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5813 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5814 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5815 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5816 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5817 case WNI_CFG_STATS_PERIOD:
5818 return QWLAN_HAL_CFG_STATS_PERIOD;
5819 case WNI_CFG_CFP_MAX_DURATION:
5820 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5821#if 0 /*This is not part of CFG*/
5822 case WNI_CFG_FRAME_TRANS_ENABLED:
5823 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5824#endif
5825 case WNI_CFG_DTIM_PERIOD:
5826 return QWLAN_HAL_CFG_DTIM_PERIOD;
5827 case WNI_CFG_EDCA_WME_ACBK:
5828 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5829 case WNI_CFG_EDCA_WME_ACBE:
5830 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5831 case WNI_CFG_EDCA_WME_ACVI:
5832 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5833 case WNI_CFG_EDCA_WME_ACVO:
5834 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5835#if 0
5836 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5837 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5838 case WNI_CFG_TELE_BCN_TRANS_LI:
5839 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5840 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5841 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5842 case WNI_CFG_TELE_BCN_MAX_LI:
5843 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5844 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5845 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5846#endif
5847 case WNI_CFG_ENABLE_CLOSE_LOOP:
5848 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005849 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5850 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305851 case WNI_CFG_ENABLE_CONC_BMISS:
5852 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5853 case WNI_CFG_ENABLE_UNITS_BWAIT:
5854 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305855 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5856 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305857 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5858 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Ravi Kumar bokka7d032762016-12-12 23:33:01 +05305859 case WNI_CFG_HEART_BEAT_THRESHOLD:
5860 return QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
5861
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 default:
5863 {
5864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005865 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305867 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 }
5869 }
5870}
Jeff Johnson295189b2012-06-20 16:38:30 -07005871/*
5872 * FUNCTION: WDA_UpdateCfgCallback
5873 *
5874 */
5875void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5876{
5877 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5878 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5879 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005881 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 /*
5883 * currently there is no response message is expected between PE and
5884 * WDA, Failure return from WDI is a ASSERT condition
5885 */
5886 if(WDI_STATUS_SUCCESS != wdiStatus)
5887 {
5888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005889 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5891 }
5892
5893 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5894 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5895 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 return ;
5897}
Jeff Johnson295189b2012-06-20 16:38:30 -07005898/*
5899 * FUNCTION: WDA_UpdateCfg
5900 *
5901 */
5902VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5903{
5904
5905 WDI_Status status = WDI_STATUS_SUCCESS ;
5906 tANI_U32 val =0;
5907 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5908 tHalCfg *configData;
5909 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5910 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 if (NULL == pMac )
5914 {
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 return VOS_STATUS_E_FAILURE;
5918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(WDA_START_STATE != pWDA->wdaState)
5920 {
5921 return VOS_STATUS_E_FAILURE;
5922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5924 {
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 VOS_ASSERT(0);
5928 return VOS_STATUS_E_FAILURE;
5929 }
mukul sharma6b53e202016-11-23 19:29:18 +05305930
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5932 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 if(NULL == wdiCfgReqParam)
5934 {
5935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 VOS_ASSERT(0);
5938 return VOS_STATUS_E_NOMEM;
5939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5941 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 if(NULL == wdiCfgReqParam->pConfigBuffer)
5943 {
5944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 vos_mem_free(wdiCfgReqParam);
5947 VOS_ASSERT(0);
5948 return VOS_STATUS_E_NOMEM;
5949 }
mukul sharma6b53e202016-11-23 19:29:18 +05305950
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 /*convert the WNI CFG Id to HAL CFG Id*/
5952 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5953 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5954
5955 /*TODO: revisit this for handling string parameters */
5956 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5957 &val) != eSIR_SUCCESS)
5958 {
5959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005960 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5962 vos_mem_free(wdiCfgReqParam);
5963 return eSIR_FAILURE;
5964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5966 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5967 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5968 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5969 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5970
5971 /* store Params pass it to WDI */
5972 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005973#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5974 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5975 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 if(IS_WDI_STATUS_FAILURE(status))
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5979 "Failure in Update CFG WDI API, free all the memory " );
5980 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5981 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5982 pWDA->wdaWdiCfgApiMsgParam = NULL;
5983 /* Failure is not expected */
5984 VOS_ASSERT(0) ;
5985 }
5986#else
5987 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5988 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5989 pWDA->wdaWdiCfgApiMsgParam = NULL;
5990#endif
5991 return CONVERT_WDI2VOS_STATUS(status) ;
5992}
5993
mukul sharma6b53e202016-11-23 19:29:18 +05305994/*
5995 * FUNCTION: WDA_UpdateCfgIntParamCb
5996 *
5997 */
5998void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5999{
6000 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
6001 WDI_UpdateCfgReqParamsType *wdiCfgParam =
6002 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
6003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6004 "<------ %s " ,__func__);
6005 /*
6006 * currently there is no response message is expected between PE and
6007 * WDA, Failure return from WDI is a ASSERT condition
6008 */
6009 if (WDI_STATUS_SUCCESS != wdiStatus)
6010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6011 "%s: CFG (%d) config failure", __func__,
6012 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
6013
6014 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
6015 {
6016 vos_mem_free(wdiCfgParam->pConfigBuffer);
6017 wdiCfgParam->pConfigBuffer = NULL;
6018 }
6019
6020 if (pWDA->wdaWdiCfgUpdateIntMsg)
6021 {
6022 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6023 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6024 }
6025
6026 return ;
6027}
6028
6029/*
6030 * FUNCTION: WDA_UpdateCfgIntParam
6031 *
6032 */
6033VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
6034 tSirUpdateCfgIntParam *cfgParam)
6035{
6036
6037 WDI_Status status = WDI_STATUS_SUCCESS ;
6038 tANI_U32 val =0;
6039 tpAniSirGlobal pMac;
6040 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
6041 tHalCfg *tlvStruct = NULL ;
6042 tANI_U8 *tlvStructStart = NULL ;
6043 v_PVOID_t *configParam;
6044 tANI_U32 configParamSize;
6045 tANI_U32 *configDataValue;
6046 tANI_U32 cfgId;
6047 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
6048
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6050 " ------> %s " ,__func__);
6051
6052 if (cfgParam)
6053 {
6054 cfgId = cfgParam->cfgId;
6055 }
6056 else
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6059 FL("Invoked with NULL cfgParam"));
6060 return VOS_STATUS_E_FAILURE;
6061 }
6062
6063 if (!pWDA)
6064 {
6065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6066 FL("Invoked with invalid WDA context"));
6067 return VOS_STATUS_E_FAILURE;
6068 }
6069
6070 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6073 FL("wdaWdiCfgApiMsgParam is not NULL"));
6074
6075 return VOS_STATUS_E_FAILURE;
6076 }
6077
6078 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
6079 if (NULL == pMac)
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6082 FL("Invoked with invalid MAC context "));
6083 return VOS_STATUS_E_FAILURE;
6084 }
6085
6086 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
6087 {
6088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6089 FL("Fail to cfg get id %d"), cfgId);
6090 return VOS_STATUS_E_FAILURE;
6091 }
6092
6093 /* Get TLV type */
6094 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
6095 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
6096 {
6097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6098 "Failed to Convert cfg to hal id %d", cfgId);
6099 return VOS_STATUS_E_FAILURE;
6100 }
6101
6102 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
6103 sizeof(WDI_UpdateCfgReqParamsType)) ;
6104 if (NULL == wdiCfgReqParam)
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6107 "%s: VOS MEM Alloc Failure", __func__);
6108 return VOS_STATUS_E_NOMEM;
6109 }
6110
6111 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
6112 configParam = vos_mem_malloc(configParamSize);
6113 if (NULL == configParam)
6114 {
6115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6116 "%s: VOS MEM Alloc Failure", __func__);
6117 vos_mem_free(wdiCfgReqParam);
6118 return VOS_STATUS_E_NOMEM;
6119 }
6120
6121 vos_mem_set(configParam, configParamSize, 0);
6122 wdiCfgReqParam->pConfigBuffer = configParam;
6123 tlvStruct = (tHalCfg *)configParam;
6124 tlvStructStart = (tANI_U8 *)configParam;
6125 /* Set TLV type */
6126 tlvStruct->type = tlv_type;
6127 tlvStruct->length = sizeof(tANI_U32);
6128 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6129 *configDataValue = (tANI_U32)val;
6130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6131 "cfg_id %d tlv_type %d tlv_value %d \n",
6132 cfgId, tlvStruct->type, val);
6133 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6134 + sizeof(tHalCfg) + tlvStruct->length)) ;
6135 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
6136 wdiCfgReqParam->wdiReqStatusCB = NULL;
6137 /* store Params pass it to WDI */
6138 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
6139 status = WDI_UpdateCfgReq(wdiCfgReqParam,
6140 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
6141 if (IS_WDI_STATUS_FAILURE(status))
6142 {
6143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6144 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
6145 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
6146 wdiCfgReqParam->pConfigBuffer = NULL;
6147 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6148 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6149 }
6150
6151 return CONVERT_WDI2VOS_STATUS(status);
6152}
6153
Jeff Johnson295189b2012-06-20 16:38:30 -07006154VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
6155 v_U8_t *pDefaultKeyId,
6156 v_U8_t *pNumKeys,
6157 WDI_KeysType *pWdiKeys )
6158{
6159 v_U32_t i, j, defKeyId = 0;
6160 v_U32_t val = SIR_MAC_KEY_LENGTH;
6161 VOS_STATUS status = WDI_STATUS_SUCCESS;
6162 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 if (NULL == pMac )
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006166 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 return VOS_STATUS_E_FAILURE;
6168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
6170 &defKeyId ))
6171 {
6172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6173 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
6174 }
6175
6176 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 /* Need to extract ALL of the configured WEP Keys */
6178 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
6179 {
6180 val = SIR_MAC_KEY_LENGTH;
6181 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
6182 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
6183 pWdiKeys[j].key,
6184 &val ))
6185 {
6186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006187 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 }
6189 else
6190 {
6191 pWdiKeys[j].keyId = (tANI_U8) i;
6192 /*
6193 * Actually, a DC (Don't Care) because
6194 * this is determined (and set) by PE/MLME
6195 */
6196 pWdiKeys[j].unicast = 0;
6197 /*
6198 * Another DC (Don't Care)
6199 */
6200 pWdiKeys[j].keyDirection = eSIR_TX_RX;
6201 /* Another DC (Don't Care). Unused for WEP */
6202 pWdiKeys[j].paeRole = 0;
6203 /* Determined from wlan_cfgGetStr() above.*/
6204 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 j++;
6206 *pNumKeys = (tANI_U8) j;
6207 }
6208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 return status;
6210}
Jeff Johnson295189b2012-06-20 16:38:30 -07006211/*
6212 * FUNCTION: WDA_SetBssKeyReqCallback
6213 * send SET BSS key RSP back to PE
6214 */
6215void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
6216{
6217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6218 tWDA_CbContext *pWDA;
6219 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006221 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 if(NULL == pWdaParams)
6223 {
6224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006225 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 VOS_ASSERT(0) ;
6227 return ;
6228 }
6229 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6230 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306231 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6232 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6234 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006235 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 return ;
6238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_ProcessSetBssKeyReq
6241 * Request to WDI for programming the BSS key( key for
6242 * broadcast/multicast frames Encryption)
6243 */
6244VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
6245 tSetBssKeyParams *setBssKeyParams )
6246{
6247 WDI_Status status = WDI_STATUS_SUCCESS ;
6248 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
6249 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
6250 sizeof(WDI_SetBSSKeyReqParamsType)) ;
6251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(NULL == wdiSetBssKeyParam)
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 VOS_ASSERT(0);
6260 return VOS_STATUS_E_NOMEM;
6261 }
6262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6263 if(NULL == pWdaParams)
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 VOS_ASSERT(0);
6268 vos_mem_free(wdiSetBssKeyParam);
6269 return VOS_STATUS_E_NOMEM;
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 /* copy set BSS params to WDI structure */
6273 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
6274 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
6275 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 if(setBssKeyParams->encType != eSIR_ED_NONE)
6277 {
6278 if( setBssKeyParams->numKeys == 0 &&
6279 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
6280 setBssKeyParams->encType == eSIR_ED_WEP104))
6281 {
6282 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
6284 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
6285 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
6286 }
6287 else
6288 {
6289 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
6290 {
6291 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
6292 setBssKeyParams->key[keyIndex].keyId;
6293 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
6294 setBssKeyParams->key[keyIndex].unicast;
6295 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
6296 setBssKeyParams->key[keyIndex].keyDirection;
6297 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6298 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6299 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6300 setBssKeyParams->key[keyIndex].paeRole;
6301 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6302 setBssKeyParams->key[keyIndex].keyLength;
6303 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6304 setBssKeyParams->key[keyIndex].key,
6305 SIR_MAC_MAX_KEY_LENGTH);
6306 }
6307 }
6308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6310 setBssKeyParams->singleTidRc;
6311 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 /* Store set key pointer, as this will be used for response */
6313 /* store Params pass it to WDI */
6314 pWdaParams->pWdaContext = pWDA;
6315 pWdaParams->wdaMsgParam = setBssKeyParams;
6316 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6318 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6319
6320 if(IS_WDI_STATUS_FAILURE(status))
6321 {
6322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6323 "Failure in Set BSS Key Req WDI API, free all the memory " );
6324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6325 vos_mem_free(pWdaParams) ;
6326 setBssKeyParams->status = eSIR_FAILURE ;
6327 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 return CONVERT_WDI2VOS_STATUS(status) ;
6330}
Jeff Johnson295189b2012-06-20 16:38:30 -07006331/*
6332 * FUNCTION: WDA_RemoveBssKeyReqCallback
6333 * send SET BSS key RSP back to PE
6334 */
6335void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6336{
6337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6338 tWDA_CbContext *pWDA;
6339 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006341 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 if(NULL == pWdaParams)
6343 {
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006345 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 VOS_ASSERT(0) ;
6347 return ;
6348 }
6349 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6350 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6352 vos_mem_free(pWdaParams) ;
6353
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006354 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 return ;
6357}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306358
6359/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306360 * FUNCTION: WDA_GetFrameLogRspCallback
6361 * recieves get frame log response from FW
6362 */
6363void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6364 void* pUserData)
6365{
6366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6367 tWDA_CbContext *pWDA = NULL;
6368 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6369
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6371 "<------ Entering: %s " ,__func__);
6372 if(NULL == pWdaParams)
6373 {
6374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6375 "%s: pWdaParams received NULL", __func__);
6376 VOS_ASSERT(0) ;
6377 return ;
6378 }
6379
6380 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6381 if (NULL == pWDA)
6382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6384 "%s:pWDA is NULL", __func__);
6385 VOS_ASSERT(0);
6386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6387 vos_mem_free(pWdaParams);
6388 return ;
6389 }
6390
6391 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6392 if(NULL == pGetFrameLogReqParams)
6393 {
6394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6395 "%s: pGetFrameLogReqParams received NULL", __func__);
6396 VOS_ASSERT(0);
6397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6398 vos_mem_free(pWdaParams);
6399 return;
6400 }
6401
Siddharth Bhal64246172015-02-27 01:04:37 +05306402 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306404 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6405 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306406 }
6407
6408 /* free WDI command buffer only */
6409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6410 vos_mem_free(pWdaParams->wdaMsgParam);
6411 vos_mem_free(pWdaParams);
6412
6413 return ;
6414
6415}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306416
6417/*
6418 * FUNCTION: WDA_RssiMonitorStopRspCallback
6419 * recieves Rssi Monitor stop response from FW
6420 */
6421void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6422 void* pUserData)
6423{
6424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6425 tSirRssiMonitorReq *pRssiMonitorReqParams;
6426
6427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6428 "<------ %s " ,__func__);
6429
6430 if(NULL == pWdaParams)
6431 {
6432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6433 "%s: pWdaParams received NULL", __func__);
6434 VOS_ASSERT(0);
6435 return ;
6436 }
6437
6438 if(NULL == pWdaParams->wdaMsgParam)
6439 {
6440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6441 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6442 VOS_ASSERT(0);
6443 vos_mem_free(pWdaParams);
6444 return ;
6445 }
6446
6447 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6448
6449 if(pRssiMonitorReqParams->rssiMonitorCallback)
6450 {
6451 pRssiMonitorReqParams->rssiMonitorCallback(
6452 pRssiMonitorReqParams->rssiMonitorCbContext,
6453 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6454 }
6455 else
6456 {
6457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6458 "%s: pFWLoggingInitParams callback is NULL", __func__);
6459 }
6460
6461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6462 vos_mem_free(pWdaParams->wdaMsgParam);
6463 vos_mem_free(pWdaParams);
6464
6465 return;
6466}
6467
6468/*
6469 * FUNCTION: WDA_RssiMonitorStartRspCallback
6470 * recieves Rssi Monitor start response from FW
6471 */
6472void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6473 void* pUserData)
6474{
6475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6476 tSirRssiMonitorReq *pRssiMonitorReqParams;
6477
6478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6479 "<------ %s " ,__func__);
6480
6481 if(NULL == pWdaParams)
6482 {
6483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6484 "%s: pWdaParams received NULL", __func__);
6485 VOS_ASSERT(0);
6486 return ;
6487 }
6488
6489 if(NULL == pWdaParams->wdaMsgParam)
6490 {
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6492 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6493 VOS_ASSERT(0);
6494 vos_mem_free(pWdaParams);
6495 return ;
6496 }
6497
6498 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6499
6500 if(pRssiMonitorReqParams->rssiMonitorCallback)
6501 {
6502 pRssiMonitorReqParams->rssiMonitorCallback(
6503 pRssiMonitorReqParams->rssiMonitorCbContext,
6504 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6505 }
6506 else
6507 {
6508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6509 "%s: pFWLoggingInitParams callback is NULL", __func__);
6510 }
6511
6512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6513 vos_mem_free(pWdaParams->wdaMsgParam);
6514 vos_mem_free(pWdaParams);
6515
6516 return;
6517}
6518
Siddharth Bhal64246172015-02-27 01:04:37 +05306519/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306520 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306521 * recieves Mgmt Logging init response from FW
6522 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306523void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306524 void* pUserData)
6525{
6526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306527 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306528 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306529
6530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6531 "<------ %s " ,__func__);
6532
6533 if(NULL == pWdaParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6536 "%s: pWdaParams received NULL", __func__);
6537 VOS_ASSERT(0);
6538 return ;
6539 }
6540
6541 if(NULL == pWdaParams->wdaMsgParam)
6542 {
6543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6544 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6545 VOS_ASSERT(0);
6546 vos_mem_free(pWdaParams);
6547 return ;
6548 }
6549
c_manjeecfd1efb2015-09-25 19:32:34 +05306550 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6551 if(NULL == pWdaParams)
6552 {
6553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6554 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6555 VOS_ASSERT(0);
6556 vos_mem_free(pWdaParams);
6557 return;
6558 }
6559
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306560 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306561 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306562
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306563 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306564 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306565 pFWLoggingInitParams->fwlogInitCallback(
6566 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306567 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306568 }
6569 else
6570 {
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306572 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306573 }
6574
c_manjeecfd1efb2015-09-25 19:32:34 +05306575 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6577 vos_mem_free(pWdaParams->wdaMsgParam);
6578 vos_mem_free(pWdaParams);
6579
6580 return;
6581}
6582
6583/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306584 * FUNCTION: WDA_SpoofMacAddrRspCallback
6585 * recieves spoof mac addr response from FW
6586 */
6587void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6588{
6589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6590 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306591
Siddharth Bhal171788a2014-09-29 21:02:40 +05306592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6593 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306594
Siddharth Bhal171788a2014-09-29 21:02:40 +05306595 if(NULL == pWdaParams)
6596 {
6597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6598 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306599 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306600 return ;
6601 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306603
Siddharth Bhal029d6732014-10-09 21:31:23 +05306604 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306606 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306607 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306608 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6609 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306610
Siddharth Bhal171788a2014-09-29 21:02:40 +05306611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306612 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306613 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306614
6615 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306616}
6617
Jeff Johnson295189b2012-06-20 16:38:30 -07006618/*
6619 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6620 * Request to WDI to remove the BSS key( key for broadcast/multicast
6621 * frames Encryption)
6622 */
6623VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6624 tRemoveBssKeyParams *removeBssKeyParams )
6625{
6626 WDI_Status status = WDI_STATUS_SUCCESS ;
6627 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6628 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6629 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6630 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006632 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 if(NULL == wdiRemoveBssKeyParam)
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_ASSERT(0);
6638 return VOS_STATUS_E_NOMEM;
6639 }
6640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6641 if(NULL == pWdaParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 VOS_ASSERT(0);
6646 vos_mem_free(wdiRemoveBssKeyParam);
6647 return VOS_STATUS_E_NOMEM;
6648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 /* copy Remove BSS key params to WDI structure*/
6650 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6651 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6652 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6653 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6654 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 /* Store remove key pointer, as this will be used for response */
6656 /* store Params pass it to WDI */
6657 pWdaParams->pWdaContext = pWDA;
6658 pWdaParams->wdaMsgParam = removeBssKeyParams;
6659 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6661 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 if(IS_WDI_STATUS_FAILURE(status))
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6665 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6667 vos_mem_free(pWdaParams) ;
6668 removeBssKeyParams->status = eSIR_FAILURE ;
6669 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 return CONVERT_WDI2VOS_STATUS(status) ;
6672}
Jeff Johnson295189b2012-06-20 16:38:30 -07006673/*
6674 * FUNCTION: WDA_SetBssKeyReqCallback
6675 * send SET BSS key RSP back to PE
6676 */
6677void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6678{
6679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6680 tWDA_CbContext *pWDA;
6681 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 VOS_ASSERT(0) ;
6689 return ;
6690 }
6691 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6692 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306693 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6694 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6696 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006697 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 return ;
6700}
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessSetStaKeyReq
6703 * Request to WDI for programming the STA key( key for Unicast frames
6704 * Encryption)
6705 */
6706VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6707 tSetStaKeyParams *setStaKeyParams )
6708{
6709 WDI_Status status = WDI_STATUS_SUCCESS ;
6710 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6711 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6712 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6713 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006716 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 if(NULL == wdiSetStaKeyParam)
6718 {
6719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 VOS_ASSERT(0);
6722 return VOS_STATUS_E_NOMEM;
6723 }
6724 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6725 if(NULL == pWdaParams)
6726 {
6727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 VOS_ASSERT(0);
6730 vos_mem_free(wdiSetStaKeyParam);
6731 return VOS_STATUS_E_NOMEM;
6732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 /* copy set STA key params to WDI structure */
6736 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6737 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6738 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6739 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 if(setStaKeyParams->encType != eSIR_ED_NONE)
6741 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006742 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6744 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6745 {
6746 WDA_GetWepKeysFromCfg( pWDA,
6747 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6748 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6749 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6750 }
6751 else
6752 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6754 keyIndex++)
6755 {
6756 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6757 setStaKeyParams->key[keyIndex].keyId;
6758 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6759 setStaKeyParams->key[keyIndex].unicast;
6760 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6761 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6763 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6764 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6765 setStaKeyParams->key[keyIndex].paeRole;
6766 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6767 setStaKeyParams->key[keyIndex].keyLength;
6768 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6769 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6770 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6771 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6772 {
6773 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6774 }
6775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6777 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 }
6779 }
6780 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6781 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 /* Store set key pointer, as this will be used for response */
6783 /* store Params pass it to WDI */
6784 pWdaParams->pWdaContext = pWDA;
6785 pWdaParams->wdaMsgParam = setStaKeyParams;
6786 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6788 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 if(IS_WDI_STATUS_FAILURE(status))
6790 {
6791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6792 "Failure in set STA Key Req WDI API, free all the memory " );
6793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6794 vos_mem_free(pWdaParams) ;
6795 setStaKeyParams->status = eSIR_FAILURE ;
6796 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
6799}
Jeff Johnson295189b2012-06-20 16:38:30 -07006800/*
6801 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6802 * send SET Bcast STA key RSP back to PE
6803 */
6804void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6805{
6806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6807 tWDA_CbContext *pWDA;
6808 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 if(NULL == pWdaParams)
6812 {
6813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 VOS_ASSERT(0) ;
6816 return ;
6817 }
6818 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6819 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6821 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006822 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 return ;
6825}
6826
Jeff Johnson295189b2012-06-20 16:38:30 -07006827/*
6828 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6829 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6830 * Encryption)
6831 */
6832VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6833 tSetStaKeyParams *setStaKeyParams )
6834{
6835 WDI_Status status = WDI_STATUS_SUCCESS ;
6836 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6837 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6838 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 if(NULL == wdiSetStaKeyParam)
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 VOS_ASSERT(0);
6848 return VOS_STATUS_E_NOMEM;
6849 }
6850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6851 if(NULL == pWdaParams)
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 VOS_ASSERT(0);
6856 vos_mem_free(wdiSetStaKeyParam);
6857 return VOS_STATUS_E_NOMEM;
6858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 /* copy set STA key params to WDI structure */
6862 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6863 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6864 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6865 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(setStaKeyParams->encType != eSIR_ED_NONE)
6867 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6869 keyIndex++)
6870 {
6871 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6872 setStaKeyParams->key[keyIndex].keyId;
6873 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6874 setStaKeyParams->key[keyIndex].unicast;
6875 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6876 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6878 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6879 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6880 setStaKeyParams->key[keyIndex].paeRole;
6881 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6882 setStaKeyParams->key[keyIndex].keyLength;
6883 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6884 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6887 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 }
6889 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 /* Store set key pointer, as this will be used for response */
6891 /* store Params pass it to WDI */
6892 pWdaParams->pWdaContext = pWDA;
6893 pWdaParams->wdaMsgParam = setStaKeyParams;
6894 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6896 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 if(IS_WDI_STATUS_FAILURE(status))
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6900 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6902 vos_mem_free(pWdaParams) ;
6903 setStaKeyParams->status = eSIR_FAILURE ;
6904 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 return CONVERT_WDI2VOS_STATUS(status) ;
6907}
Jeff Johnson295189b2012-06-20 16:38:30 -07006908/*
6909 * FUNCTION: WDA_RemoveStaKeyReqCallback
6910 * send SET BSS key RSP back to PE
6911 */
6912void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6913{
6914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6915 tWDA_CbContext *pWDA;
6916 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 if(NULL == pWdaParams)
6920 {
6921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 VOS_ASSERT(0) ;
6924 return ;
6925 }
6926 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6927 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6929 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006930 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 return ;
6933}
6934
Jeff Johnson295189b2012-06-20 16:38:30 -07006935/*
6936 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6937 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6938 */
6939VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6940 tRemoveStaKeyParams *removeStaKeyParams )
6941{
6942 WDI_Status status = WDI_STATUS_SUCCESS ;
6943 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6944 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6945 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6946 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006948 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 if(NULL == wdiRemoveStaKeyParam)
6950 {
6951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 VOS_ASSERT(0);
6954 return VOS_STATUS_E_NOMEM;
6955 }
6956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6957 if(NULL == pWdaParams)
6958 {
6959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 VOS_ASSERT(0);
6962 vos_mem_free(wdiRemoveStaKeyParam);
6963 return VOS_STATUS_E_NOMEM;
6964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 /* copy remove STA key params to WDI structure*/
6966 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6967 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6968 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6969 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6970 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 /* Store remove key pointer, as this will be used for response */
6972 /* store Params pass it to WDI */
6973 pWdaParams->pWdaContext = pWDA;
6974 pWdaParams->wdaMsgParam = removeStaKeyParams;
6975 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6977 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 if(IS_WDI_STATUS_FAILURE(status))
6979 {
6980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6981 "Failure in remove STA Key Req WDI API, free all the memory " );
6982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6983 vos_mem_free(pWdaParams) ;
6984 removeStaKeyParams->status = eSIR_FAILURE ;
6985 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 return CONVERT_WDI2VOS_STATUS(status) ;
6988}
Jeff Johnson295189b2012-06-20 16:38:30 -07006989/*
6990 * FUNCTION: WDA_IsHandleSetLinkStateReq
6991 * Update the WDA state and return the status to handle this message or not
6992 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006993WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6994 tWDA_CbContext *pWDA,
6995 tLinkStateParams *linkStateParams)
6996{
6997 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 switch(linkStateParams->state)
6999 {
7000 case eSIR_LINK_PREASSOC_STATE:
7001 case eSIR_LINK_BTAMP_PREASSOC_STATE:
7002 /*
7003 * set the WDA state to PRE ASSOC
7004 * copy the BSSID into pWDA to use it in join request and return,
7005 * No need to handle these messages.
7006 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007007 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
7008 {
7009 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007011 }
7012 else
7013 {
7014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007015 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007016 VOS_ASSERT(0);
7017 }
7018
7019 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
7020 {
7021 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007023 }
7024 else
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007027 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007028 VOS_ASSERT(0);
7029 }
7030
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 /* UMAC is issuing the setlink state with PREASSOC twice (before set
7032 *channel and after ) so reset the WDA state to ready when the second
7033 * time UMAC issue the link state with PREASSOC
7034 */
7035 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
7036 {
7037 /* RESET WDA state back to WDA_READY_STATE */
7038 pWDA->wdaState = WDA_READY_STATE;
7039 }
7040 else
7041 {
7042 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
7043 }
7044 //populate linkState info in WDACbCtxt
7045 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 default:
7048 if(pWDA->wdaState != WDA_READY_STATE)
7049 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007050 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
7051 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
7052 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
7053 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
7054 *the ASSERT in WDA_Stop during module unload.*/
7055 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
7056 {
7057 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007058 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007059 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007060 else
7061 {
7062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007063 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007064 status = WDA_IGNORE_SET_LINK_STATE;
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 }
7067 break;
7068 }
7069
7070 return status;
7071}
Jeff Johnson295189b2012-06-20 16:38:30 -07007072/*
7073 * FUNCTION: WDA_SetLinkStateCallback
7074 * call back function for set link state from WDI
7075 */
7076void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
7077{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307078 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 tLinkStateParams *linkStateParams;
7080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007082 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307083 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 {
7085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007086 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_ASSERT(0) ;
7088 return ;
7089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307091 if (NULL == pWDA)
7092 {
7093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7094 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7096 vos_mem_free(pWdaParams->wdaMsgParam);
7097 vos_mem_free(pWdaParams);
7098
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307099 VOS_ASSERT(0);
7100 return ;
7101 }
7102
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 /*
7105 * In STA mode start the BA activity check timer after association
7106 * and in AP mode start BA activity check timer after BSS start */
7107 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
7108 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07007109 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
7110 ((status == WDI_STATUS_SUCCESS) &&
7111 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 {
7113 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 /*
7117 * No respone required for WDA_SET_LINK_STATE so free the request
7118 * param here
7119 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7121 vos_mem_free(pWdaParams);
7122
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 return ;
7124}
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
7126 * FUNCTION: WDA_ProcessSetLinkState
7127 * Request to WDI to set the link status.
7128 */
7129VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
7130 tLinkStateParams *linkStateParams)
7131{
7132 WDI_Status status = WDI_STATUS_SUCCESS ;
7133 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
7134 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
7135 sizeof(WDI_SetLinkReqParamsType)) ;
7136 tWDA_ReqParams *pWdaParams ;
7137 tpAniSirGlobal pMac;
7138 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
7139
7140 if(NULL == pMac)
7141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007145 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 return VOS_STATUS_E_FAILURE;
7147 }
7148
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 if(NULL == wdiSetLinkStateParam)
7152 {
7153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 VOS_ASSERT(0);
7156 return VOS_STATUS_E_NOMEM;
7157 }
7158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7159 if(NULL == pWdaParams)
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_ASSERT(0);
7164 vos_mem_free(wdiSetLinkStateParam);
7165 return VOS_STATUS_E_NOMEM;
7166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 if(WDA_IGNORE_SET_LINK_STATE ==
7168 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
7169 {
7170 status = WDI_STATUS_E_FAILURE;
7171 }
7172 else
7173 {
7174 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
7175 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
7177 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
7179 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 pWdaParams->pWdaContext = pWDA;
7181 /* Store remove key pointer, as this will be used for response */
7182 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 /* store Params pass it to WDI */
7184 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
7185 /* Stop Timer only other than GO role and concurrent session */
7186 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07007187 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
7189 {
7190 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
7193 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 if(IS_WDI_STATUS_FAILURE(status))
7195 {
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7197 "Failure in set link state Req WDI API, free all the memory " );
7198 }
7199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 if(IS_WDI_STATUS_FAILURE(status))
7201 {
7202 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007203 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 vos_mem_free(pWdaParams);
7205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 return CONVERT_WDI2VOS_STATUS(status) ;
7207}
Jeff Johnson295189b2012-06-20 16:38:30 -07007208/*
7209 * FUNCTION: WDA_GetStatsReqParamsCallback
7210 * send the response to PE with Stats received from WDI
7211 */
7212void WDA_GetStatsReqParamsCallback(
7213 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
7214 void* pUserData)
7215{
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307217 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007218
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 pGetPEStatsRspParams =
7222 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
7223 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
7224
7225 if(NULL == pGetPEStatsRspParams)
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_ASSERT(0);
7230 return;
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307233 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
7235 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007236
7237 //Fill the Session Id Properly in PE
7238 pGetPEStatsRspParams->sessionId = 0;
7239 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007240 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
7242 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 vos_mem_copy( pGetPEStatsRspParams + 1,
7244 wdiGetStatsRsp + 1,
7245 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307246
7247 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7248 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7249 vosMsg.bodyval = 0;
7250 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7251 (vos_msg_t*)&vosMsg))
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7254 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7255 vos_mem_free(pGetPEStatsRspParams);
7256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007257
7258 return;
7259}
7260
Jeff Johnson295189b2012-06-20 16:38:30 -07007261/*
7262 * FUNCTION: WDA_ProcessGetStatsReq
7263 * Request to WDI to get the statistics
7264 */
7265VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
7266 tAniGetPEStatsReq *pGetStatsParams)
7267{
7268 WDI_Status status = WDI_STATUS_SUCCESS ;
7269 WDI_GetStatsReqParamsType wdiGetStatsParam;
7270 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307271 vos_msg_t vosMsg;
7272
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
7276 pGetStatsParams->staId;
7277 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
7278 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 status = WDI_GetStatsReq(&wdiGetStatsParam,
7281 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 if(IS_WDI_STATUS_FAILURE(status))
7283 {
7284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7285 "Failure in Get Stats Req WDI API, free all the memory " );
7286 pGetPEStatsRspParams =
7287 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
7288 if(NULL == pGetPEStatsRspParams)
7289 {
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007292 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007293 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 return VOS_STATUS_E_NOMEM;
7295 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307296 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7298 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7299 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307300
7301 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7302 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7303 vosMsg.bodyval = 0;
7304 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7305 (vos_msg_t*)&vosMsg))
7306 {
7307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7308 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7309 vos_mem_free(pGetPEStatsRspParams);
7310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 /* Free the request message */
7313 vos_mem_free(pGetStatsParams);
7314 return CONVERT_WDI2VOS_STATUS(status);
7315}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007316
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007317#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007318/*
7319 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7320 * send the response to PE with roam Rssi received from WDI
7321 */
7322void WDA_GetRoamRssiReqParamsCallback(
7323 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7324 void* pUserData)
7325{
7326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7327 tWDA_CbContext *pWDA = NULL;
7328 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7329 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "<------ %s " ,__func__);
7332 if(NULL == pWdaParams)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: pWdaParams received NULL", __func__);
7336 VOS_ASSERT(0) ;
7337 return ;
7338 }
7339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7340 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7341
7342 if(NULL == pGetRoamRssiReqParams)
7343 {
7344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7345 "%s: pGetRoamRssiReqParams received NULL", __func__);
7346 VOS_ASSERT(0);
7347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7348 vos_mem_free(pWdaParams);
7349 return ;
7350 }
7351 pGetRoamRssiRspParams =
7352 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7353
7354 if(NULL == pGetRoamRssiRspParams)
7355 {
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7357 "%s: VOS MEM Alloc Failure", __func__);
7358 VOS_ASSERT(0);
7359 return;
7360 }
7361 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7362 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007363 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007364 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7365 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7366
7367 /* Assign get roam rssi req (backup) in to the response */
7368 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7369
7370 /* free WDI command buffer */
7371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7372 vos_mem_free(pWdaParams) ;
7373
7374 /* send response to UMAC*/
7375 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7376
7377 return;
7378}
7379
7380
7381
7382/*
7383 * FUNCTION: WDA_ProcessGetRoamRssiReq
7384 * Request to WDI to get the statistics
7385 */
7386VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7387 tAniGetRssiReq *pGetRoamRssiParams)
7388{
7389 WDI_Status status = WDI_STATUS_SUCCESS ;
7390 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7391 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7392 tWDA_ReqParams *pWdaParams = NULL;
7393
7394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7395 "------> %s " ,__func__);
7396 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7397 pGetRoamRssiParams->staId;
7398 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7399
7400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7401 if(NULL == pWdaParams)
7402 {
7403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7404 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307405 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007406 VOS_ASSERT(0);
7407 return VOS_STATUS_E_NOMEM;
7408 }
7409
7410 /* Store Init Req pointer, as this will be used for response */
7411 pWdaParams->pWdaContext = pWDA;
7412
7413 /* Take Get roam Rssi req backup as it stores the callback to be called after
7414 receiving the response */
7415 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7416 pWdaParams->wdaWdiApiMsgParam = NULL;
7417
7418 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7419 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7420 if(IS_WDI_STATUS_FAILURE(status))
7421 {
7422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7423 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7424 pGetRoamRssiRspParams =
7425 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7426 if(NULL == pGetRoamRssiRspParams)
7427 {
7428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7429 "%s: VOS MEM Alloc Failure", __func__);
7430 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307431 vos_mem_free(pGetRoamRssiParams);
7432 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007433 return VOS_STATUS_E_NOMEM;
7434 }
7435 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7436 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7437 pGetRoamRssiRspParams->rssi = 0;
7438 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7439 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7440 (void *)pGetRoamRssiRspParams, 0) ;
7441 }
7442 return CONVERT_WDI2VOS_STATUS(status);
7443}
7444#endif
7445
7446
Jeff Johnson295189b2012-06-20 16:38:30 -07007447/*
7448 * FUNCTION: WDA_UpdateEDCAParamCallback
7449 * call back function for Update EDCA params from WDI
7450 */
7451void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7452{
7453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7454 tEdcaParams *pEdcaParams;
7455
7456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007457 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 if(NULL == pWdaParams)
7459 {
7460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 VOS_ASSERT(0) ;
7463 return ;
7464 }
7465 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7467 vos_mem_free(pWdaParams);
7468 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 return ;
7470}
Jeff Johnson295189b2012-06-20 16:38:30 -07007471/*
7472 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7473 * Request to WDI to Update the EDCA params.
7474 */
7475VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7476 tEdcaParams *pEdcaParams)
7477{
7478 WDI_Status status = WDI_STATUS_SUCCESS ;
7479 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7480 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7481 sizeof(WDI_UpdateEDCAParamsType)) ;
7482 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 if(NULL == wdiEdcaParam)
7486 {
7487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007490 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 return VOS_STATUS_E_NOMEM;
7492 }
7493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7494 if(NULL == pWdaParams)
7495 {
7496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 VOS_ASSERT(0);
7499 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007500 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 return VOS_STATUS_E_NOMEM;
7502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007504 /*
7505 Since firmware is not using highperformance flag, we have removed
7506 this flag from wdiEDCAInfo structure to match sizeof the structure
7507 between host and firmware.In future if we are planning to use
7508 highperformance flag then Please define this flag in wdiEDCAInfo
7509 structure, update it here and send it to firmware. i.e.
7510 Following is the original line which we removed as part of the fix
7511 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7512 pEdcaParams->highPerformance;
7513 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7515 &pEdcaParams->acbe);
7516 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7517 &pEdcaParams->acbk);
7518 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7519 &pEdcaParams->acvi);
7520 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7521 &pEdcaParams->acvo);
7522 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 pWdaParams->pWdaContext = pWDA;
7524 /* Store remove key pointer, as this will be used for response */
7525 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 /* store Params pass it to WDI */
7527 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7529 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 if(IS_WDI_STATUS_FAILURE(status))
7531 {
7532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7533 "Failure in Update EDCA Params WDI API, free all the memory " );
7534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7535 vos_mem_free(pWdaParams);
7536 vos_mem_free(pEdcaParams);
7537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 return CONVERT_WDI2VOS_STATUS(status) ;
7539}
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
7541 * FUNCTION: WDA_AddBAReqCallback
7542 * send ADD BA RSP back to PE
7543 */
7544void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7545 void* pUserData)
7546{
7547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7548 tWDA_CbContext *pWDA;
7549 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307552 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0) ;
7557 return ;
7558 }
7559 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307560 if (NULL == pWDA)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7563 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7565 vos_mem_free(pWdaParams->wdaMsgParam);
7566 vos_mem_free(pWdaParams);
7567
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307568 VOS_ASSERT(0);
7569 return ;
7570 }
7571
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7574 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007575 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 return ;
7578}
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_ProcessAddBAReq
7582 * Request to WDI to Update the ADDBA REQ params.
7583 */
7584VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307585 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007586{
Jeff Johnson43971f52012-07-17 12:26:56 -07007587 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7589 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7590 sizeof(WDI_AddBAReqParamsType)) ;
7591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 if(NULL == wdiAddBAReqParam)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 return VOS_STATUS_E_NOMEM;
7600 }
7601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7602 if(NULL == pWdaParams)
7603 {
7604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_ASSERT(0);
7607 vos_mem_free(wdiAddBAReqParam);
7608 return VOS_STATUS_E_NOMEM;
7609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 do
7611 {
7612 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 wdiAddBaInfo->ucSTAIdx = staIdx ;
7614 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307615 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 } while(0) ;
7617 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 pWdaParams->pWdaContext = pWDA;
7619 /* store Params pass it to WDI */
7620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7621 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007622 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7623 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007624
Jeff Johnson43971f52012-07-17 12:26:56 -07007625 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 {
7627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007628 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7629 status = CONVERT_WDI2VOS_STATUS(wstatus);
7630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 vos_mem_free(pWdaParams);
7632 pAddBAReqParams->status = eSIR_FAILURE;
7633 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7634 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007635 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636}
Jeff Johnson295189b2012-06-20 16:38:30 -07007637/*
7638 * FUNCTION: WDA_AddBASessionReqCallback
7639 * send ADD BA SESSION RSP back to PE/(or TL)
7640 */
7641void WDA_AddBASessionReqCallback(
7642 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7643{
7644 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307646 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007647 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 if(NULL == pWdaParams)
7651 {
7652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 VOS_ASSERT(0) ;
7655 return ;
7656 }
7657 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307658 if (NULL == pWDA)
7659 {
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7661 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7663 vos_mem_free(pWdaParams->wdaMsgParam);
7664 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307665 VOS_ASSERT(0);
7666 return ;
7667 }
7668
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 if( NULL == pAddBAReqParams )
7671 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007673 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 return ;
7678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307682 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 * another request to HAL(/WDI) (ADD_BA_REQ)
7684 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 if((VOS_STATUS_SUCCESS ==
7686 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307687 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 {
7689 /* Update TL with BA info received from HAL/WDI */
7690 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7691 wdiAddBaSession->usBaSessionID,
7692 wdiAddBaSession->ucSTAIdx,
7693 wdiAddBaSession->ucBaTID,
7694 wdiAddBaSession->ucBaBufferSize,
7695 wdiAddBaSession->ucWinSize,
7696 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307698 wdiAddBaSession->ucSTAIdx,
7699 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 }
7701 else
7702 {
7703 pAddBAReqParams->status =
7704 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7705
7706 /* Setting Flag to indicate that Set BA is success */
7707 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7708 {
7709 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7710 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7711 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 /*Reset the WDA state to READY */
7716 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 return ;
7718}
7719
Jeff Johnson295189b2012-06-20 16:38:30 -07007720/*
7721 * FUNCTION: WDA_ProcessAddBASessionReq
7722 * Request to WDI to Update the ADDBA REQ params.
7723 */
7724VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7725 tAddBAParams *pAddBAReqParams)
7726{
7727 WDI_Status status = WDI_STATUS_SUCCESS ;
7728 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7729 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7730 sizeof(WDI_AddBASessionReqParamsType)) ;
7731 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007732 WLANTL_STAStateType tlSTAState = 0;
7733
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 if(NULL == wdiAddBASessionReqParam)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 VOS_ASSERT(0);
7741 return VOS_STATUS_E_NOMEM;
7742 }
7743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7744 if(NULL == pWdaParams)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 VOS_ASSERT(0);
7749 vos_mem_free(wdiAddBASessionReqParam);
7750 return VOS_STATUS_E_NOMEM;
7751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 /*
7753 * Populate ADD BA parameters and pass these paarmeters to WDI.
7754 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7755 * the state to track if these is BA recipient case or BA initiator
7756 * case.
7757 */
7758 do
7759 {
7760 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7761 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7762 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7763 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7764 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7765 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7766 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7769 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7770 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7771 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7772 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307773
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 }while(0) ;
7775 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 pWdaParams->pWdaContext = pWDA;
7777 /* Store ADD BA pointer, as this will be used for response */
7778 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7779 /* store Params pass it to WDI */
7780 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007781
7782 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7783 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7784 */
7785 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7786 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7787 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007789 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007790 status = WDI_STATUS_E_NOT_ALLOWED;
7791 pAddBAReqParams->status =
7792 CONVERT_WDI2SIR_STATUS(status) ;
7793 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7794 /*Reset the WDA state to READY */
7795 pWDA->wdaState = WDA_READY_STATE;
7796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7797 vos_mem_free(pWdaParams);
7798
7799 return CONVERT_WDI2VOS_STATUS(status) ;
7800 }
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7803 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 if(IS_WDI_STATUS_FAILURE(status))
7805 {
7806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007807 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007809 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007810 pAddBAReqParams->status =
7811 CONVERT_WDI2SIR_STATUS(status) ;
7812 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007813 /*Reset the WDA state to READY */
7814 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 vos_mem_free(pWdaParams);
7817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819}
Jeff Johnson295189b2012-06-20 16:38:30 -07007820/*
7821 * FUNCTION: WDA_DelBANotifyTL
7822 * send DEL BA IND to TL
7823 */
7824void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7825 tDelBAParams *pDelBAReqParams)
7826{
7827 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7828 //tSirMsgQ msg;
7829 vos_msg_t vosMsg;
7830 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 if(NULL == pDelBAInd)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_ASSERT(0) ;
7836 return;
7837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7839 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7840 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7841 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007842
Jeff Johnson295189b2012-06-20 16:38:30 -07007843
7844 vosMsg.type = WDA_DELETEBA_IND;
7845 vosMsg.bodyptr = pDelBAInd;
7846 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7847 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7848 {
7849 vosStatus = VOS_STATUS_E_BADMSG;
7850 }
7851}
Jeff Johnson295189b2012-06-20 16:38:30 -07007852/*
7853 * FUNCTION: WDA_DelBAReqCallback
7854 * send DEL BA RSP back to PE
7855 */
7856void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7857{
7858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7859 tWDA_CbContext *pWDA;
7860 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 if(NULL == pWdaParams)
7864 {
7865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 VOS_ASSERT(0) ;
7868 return ;
7869 }
7870 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307871
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 /* Notify TL about DEL BA in case of recipinet */
7874 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7875 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7876 {
7877 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 /*
7880 * No respone required for WDA_DELBA_IND so just free the request
7881 * param here
7882 */
7883 vos_mem_free(pDelBAReqParams);
7884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7885 vos_mem_free(pWdaParams);
7886 return ;
7887}
7888
Jeff Johnson295189b2012-06-20 16:38:30 -07007889/*
7890 * FUNCTION: WDA_ProcessDelBAReq
7891 * Request to WDI to Update the DELBA REQ params.
7892 */
7893VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7894 tDelBAParams *pDelBAReqParams)
7895{
7896 WDI_Status status = WDI_STATUS_SUCCESS ;
7897 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7898 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7899 sizeof(WDI_DelBAReqParamsType)) ;
7900 tWDA_ReqParams *pWdaParams ;
7901 tANI_U16 staIdx = 0;
7902 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 if(NULL == wdiDelBAReqParam)
7906 {
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 VOS_ASSERT(0);
7910 return VOS_STATUS_E_NOMEM;
7911 }
7912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7913 if(NULL == pWdaParams)
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 VOS_ASSERT(0);
7918 vos_mem_free(wdiDelBAReqParam);
7919 return VOS_STATUS_E_NOMEM;
7920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7922 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7923 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7924 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 pWdaParams->pWdaContext = pWDA;
7926 /* Store DEL BA pointer, as this will be used for response */
7927 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 /* store Params pass it to WDI */
7929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7931 * maintained in WDA, so that WDA can retry for another BA session
7932 */
7933 staIdx = pDelBAReqParams->staIdx;
7934 tid = pDelBAReqParams->baTID;
7935 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 status = WDI_DelBAReq(wdiDelBAReqParam,
7937 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 if(IS_WDI_STATUS_FAILURE(status))
7939 {
7940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7941 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7943 vos_mem_free(pWdaParams->wdaMsgParam);
7944 vos_mem_free(pWdaParams);
7945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007947}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007948
7949/*
7950 * FUNCTION: WDA_UpdateChReqCallback
7951 *
7952 */
7953void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7954{
Siddharth Bhala006c122014-05-03 12:13:27 +05307955 tWDA_ReqParams *pWdaParams;
7956 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7957 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7958 WDI_UpdateChannelReqinfoType *pChanInfoType;
7959 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007960
7961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7962 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307963 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007964 {
7965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307966 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007967 VOS_ASSERT(0);
7968 return;
7969 }
7970
Siddharth Bhala006c122014-05-03 12:13:27 +05307971 pWdaParams = (tWDA_ReqParams *)pUserData;
7972 pwdiUpdateChReqParam =
7973 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7974 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7975 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7976 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007977 /*
7978 * currently there is no response message is expected between PE and
7979 * WDA, Failure return from WDI is a ASSERT condition
7980 */
7981 vos_mem_free(pChanInfoType);
7982 vos_mem_free(pChanList);
7983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7984 vos_mem_free(pWdaParams);
7985
7986 return;
7987}
7988
7989/*
7990 * FUNCTION: WDA_ProcessUpdateChannelList
7991 * Request to WDI to Update the ChannelList params.
7992 */
7993VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7994 tSirUpdateChanList *pChanList)
7995{
7996 WDI_Status status = WDI_STATUS_SUCCESS;
7997 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7998 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7999 WDI_UpdateChannelReqinfoType *pChanInfoType;
8000 tWDA_ReqParams *pWdaParams;
8001 wpt_uint8 i;
8002
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8004 "------> %s " ,__func__);
8005 if(NULL == pChanList)
8006 {
8007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8008 "%s: NULL pChanList", __func__);
8009 VOS_ASSERT(0);
8010 return VOS_STATUS_E_INVAL;
8011 }
8012
8013 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
8014 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05308015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008016 "Update channel list capability Not Supported");
8017 vos_mem_free(pChanList);
8018 return VOS_STATUS_E_INVAL;
8019 }
8020
8021 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
8022 sizeof(WDI_UpdateChReqParamsType));
8023 if(NULL == pwdiUpdateChReqParam)
8024 {
8025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8026 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
8027 __func__);
8028 VOS_ASSERT(0);
8029 vos_mem_free(pChanList);
8030 return VOS_STATUS_E_NOMEM;
8031 }
8032 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
8033 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
8034 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
8035 pChanList->numChan);
8036 if(NULL == pChanInfoType)
8037 {
8038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8039 "%s: VOS MEM Alloc Failure", __func__);
8040 VOS_ASSERT(0);
8041 vos_mem_free(pChanList);
8042 vos_mem_free(pwdiUpdateChReqParam);
8043 return VOS_STATUS_E_NOMEM;
8044 }
8045 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
8046 * pChanList->numChan);
8047 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
8048
8049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8050 if(NULL == pWdaParams)
8051 {
8052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8053 "%s: VOS MEM Alloc Failure", __func__);
8054 VOS_ASSERT(0);
8055 vos_mem_free(pChanList);
8056 vos_mem_free(pChanInfoType);
8057 vos_mem_free(pwdiUpdateChReqParam);
8058 return VOS_STATUS_E_NOMEM;
8059 }
8060 pwdiUpdateChanReqType->numchan = pChanList->numChan;
8061
8062 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
8063 {
8064 pChanInfoType->mhz =
8065 vos_chan_to_freq(pChanList->chanParam[i].chanId);
8066
8067 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
8068 pChanInfoType->band_center_freq2 = 0;
8069
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8071 "chan[%d] = %u", i, pChanInfoType->mhz);
8072 if (pChanList->chanParam[i].dfsSet)
8073 {
8074 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8076 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
8077 pChanList->chanParam[i].dfsSet);
8078 }
8079
8080 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
8081 {
8082 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
8083 }
8084 else
8085 {
8086 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
8087 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
8088 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
8089 }
8090
8091 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
8092 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05308093 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008094 pChanInfoType++;
8095 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008096 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
8097 pWdaParams->pWdaContext = pWDA;
8098 pWdaParams->wdaMsgParam = (void *)pChanList;
8099 /* store Params pass it to WDI */
8100 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
8101 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
8102 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
8103 if(IS_WDI_STATUS_FAILURE(status))
8104 {
8105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8106 "Failure in Update Channel REQ Params WDI API, free all the memory");
8107 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
8108 vos_mem_free(pwdiUpdateChReqParam);
8109 vos_mem_free(pWdaParams->wdaMsgParam);
8110 vos_mem_free(pWdaParams);
8111 }
8112 return CONVERT_WDI2VOS_STATUS(status);
8113}
8114
Jeff Johnson295189b2012-06-20 16:38:30 -07008115/*
8116 * FUNCTION: WDA_AddTSReqCallback
8117 * send ADD TS RSP back to PE
8118 */
8119void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
8120{
8121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308122 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 tAddTsParams *pAddTsReqParams;
8124
8125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 if(NULL == pWdaParams)
8128 {
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008130 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 VOS_ASSERT(0) ;
8132 return ;
8133 }
8134 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308135 if (NULL == pWDA)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8138 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8140 vos_mem_free(pWdaParams->wdaMsgParam);
8141 vos_mem_free(pWdaParams);
8142
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308143 VOS_ASSERT(0);
8144 return ;
8145 }
8146
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
8148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8149 vos_mem_free(pWdaParams);
8150
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008151 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 return ;
8154}
8155
Jeff Johnson295189b2012-06-20 16:38:30 -07008156/*
8157 * FUNCTION: WDA_ProcessAddTSReq
8158 * Request to WDI to Update the ADD TS REQ params.
8159 */
8160VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
8161 tAddTsParams *pAddTsReqParams)
8162{
8163 WDI_Status status = WDI_STATUS_SUCCESS ;
8164 WDI_AddTSReqParamsType *wdiAddTSReqParam =
8165 (WDI_AddTSReqParamsType *)vos_mem_malloc(
8166 sizeof(WDI_AddTSReqParamsType)) ;
8167 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 if(NULL == wdiAddTSReqParam)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 VOS_ASSERT(0);
8175 return VOS_STATUS_E_NOMEM;
8176 }
8177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8178 if(NULL == pWdaParams)
8179 {
8180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 VOS_ASSERT(0);
8183 vos_mem_free(wdiAddTSReqParam);
8184 return VOS_STATUS_E_NOMEM;
8185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
8187 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 //TS IE
8189 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
8190 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
8191 pAddTsReqParams->tspec.length;
8192
8193 //TS IE : TS INFO : TRAFFIC
8194 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
8195 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
8196 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
8197 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
8198 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
8199 pAddTsReqParams->tspec.tsinfo.traffic.psb;
8200 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
8201 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
8202 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
8203 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
8204 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
8205 pAddTsReqParams->tspec.tsinfo.traffic.direction;
8206 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
8207 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
8208 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
8209 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
8210
8211 //TS IE : TS INFO : SCHEDULE
8212 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
8213 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
8214 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
8215 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 //TS IE
8217 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
8218 pAddTsReqParams->tspec.nomMsduSz;
8219 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
8220 pAddTsReqParams->tspec.maxMsduSz;
8221 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
8222 pAddTsReqParams->tspec.minSvcInterval;
8223 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
8224 pAddTsReqParams->tspec.maxSvcInterval;
8225 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
8226 pAddTsReqParams->tspec.inactInterval;
8227 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
8228 pAddTsReqParams->tspec.suspendInterval;
8229 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
8230 pAddTsReqParams->tspec.svcStartTime;
8231 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
8232 pAddTsReqParams->tspec.minDataRate;
8233 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
8234 pAddTsReqParams->tspec.meanDataRate;
8235 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
8236 pAddTsReqParams->tspec.peakDataRate;
8237 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
8238 pAddTsReqParams->tspec.maxBurstSz;
8239 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
8240 pAddTsReqParams->tspec.delayBound;
8241 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
8242 pAddTsReqParams->tspec.minPhyRate;
8243 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
8244 pAddTsReqParams->tspec.surplusBw;
8245 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
8246 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07008247 /* TODO: tAddTsParams doesn't have the following fields */
8248#if 0
8249 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8250 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
8251 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8252 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8253#endif
8254 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
8255
8256 pWdaParams->pWdaContext = pWDA;
8257 /* Store ADD TS pointer, as this will be used for response */
8258 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 /* store Params pass it to WDI */
8260 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 status = WDI_AddTSReq(wdiAddTSReqParam,
8262 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 if(IS_WDI_STATUS_FAILURE(status))
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8266 "Failure in ADD TS REQ Params WDI API, free all the memory " );
8267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8268 vos_mem_free(pWdaParams);
8269 pAddTsReqParams->status = eSIR_FAILURE ;
8270 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
8271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273}
8274
Jeff Johnson295189b2012-06-20 16:38:30 -07008275/*
8276 * FUNCTION: WDA_DelTSReqCallback
8277 * send DEL TS RSP back to PE
8278 */
8279void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
8280{
8281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8285 vos_mem_free(pWdaParams->wdaMsgParam) ;
8286 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 /*
8288 * No respone required for WDA_DEL_TS_REQ so just free the request
8289 * param here
8290 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 return ;
8292}
8293
Jeff Johnson295189b2012-06-20 16:38:30 -07008294/*
8295 * FUNCTION: WDA_ProcessDelTSReq
8296 * Request to WDI to Update the DELTS REQ params.
8297 */
8298VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8299 tDelTsParams *pDelTSReqParams)
8300{
8301 WDI_Status status = WDI_STATUS_SUCCESS ;
8302 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8303 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8304 sizeof(WDI_DelTSReqParamsType)) ;
8305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == wdiDelTSReqParam)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0);
8313 return VOS_STATUS_E_NOMEM;
8314 }
8315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8316 if(NULL == pWdaParams)
8317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 VOS_ASSERT(0);
8321 vos_mem_free(wdiDelTSReqParam);
8322 return VOS_STATUS_E_NOMEM;
8323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8325 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8326 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8327 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8328 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 pWdaParams->pWdaContext = pWDA;
8330 /* Store DEL TS pointer, as this will be used for response */
8331 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 /* store Params pass it to WDI */
8333 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 status = WDI_DelTSReq(wdiDelTSReqParam,
8335 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 if(IS_WDI_STATUS_FAILURE(status))
8337 {
8338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8339 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8341 vos_mem_free(pWdaParams->wdaMsgParam);
8342 vos_mem_free(pWdaParams);
8343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345}
Jeff Johnson295189b2012-06-20 16:38:30 -07008346/*
8347 * FUNCTION: WDA_UpdateBeaconParamsCallback
8348 * Free the memory. No need to send any response to PE in this case
8349 */
8350void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8351{
8352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 if(NULL == pWdaParams)
8356 {
8357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_ASSERT(0) ;
8360 return ;
8361 }
8362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8363 vos_mem_free(pWdaParams->wdaMsgParam) ;
8364 vos_mem_free(pWdaParams);
8365 /*
8366 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8367 * param here
8368 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 return ;
8370}
Jeff Johnson295189b2012-06-20 16:38:30 -07008371/*
8372 * FUNCTION: WDA_ProcessUpdateBeaconParams
8373 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8374 */
8375VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8376 tUpdateBeaconParams *pUpdateBeaconParams)
8377{
8378 WDI_Status status = WDI_STATUS_SUCCESS ;
8379 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8380 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8381 sizeof(WDI_UpdateBeaconParamsType)) ;
8382 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 if(NULL == wdiUpdateBeaconParams)
8386 {
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 VOS_ASSERT(0);
8390 return VOS_STATUS_E_NOMEM;
8391 }
8392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8393 if(NULL == pWdaParams)
8394 {
8395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 VOS_ASSERT(0);
8398 vos_mem_free(wdiUpdateBeaconParams);
8399 return VOS_STATUS_E_NOMEM;
8400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8402 pUpdateBeaconParams->bssIdx;
8403 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8404 pUpdateBeaconParams->fShortPreamble;
8405 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8406 pUpdateBeaconParams->fShortSlotTime;
8407 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8408 pUpdateBeaconParams->beaconInterval;
8409 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8410 pUpdateBeaconParams->llaCoexist;
8411 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8412 pUpdateBeaconParams->llbCoexist;
8413 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8414 pUpdateBeaconParams->llgCoexist;
8415 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8416 pUpdateBeaconParams->ht20MhzCoexist;
8417 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8418 pUpdateBeaconParams->llnNonGFCoexist;
8419 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8420 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8421 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8422 pUpdateBeaconParams->fRIFSMode;
8423 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8424 pUpdateBeaconParams->paramChangeBitmap;
8425 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8426
8427 pWdaParams->pWdaContext = pWDA;
8428 /* Store UpdateBeacon Req pointer, as this will be used for response */
8429 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 /* store Params pass it to WDI */
8431 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8433 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8434 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(IS_WDI_STATUS_FAILURE(status))
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8438 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8440 vos_mem_free(pWdaParams->wdaMsgParam);
8441 vos_mem_free(pWdaParams);
8442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008444}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008445#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008446/*
8447 * FUNCTION: WDA_TSMStatsReqCallback
8448 * send TSM Stats RSP back to PE
8449 */
8450void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8451{
8452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8453 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008454 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8455 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008456
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008458 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 if(NULL == pWdaParams)
8460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008462 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 VOS_ASSERT(0) ;
8464 return ;
8465 }
8466 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308467 if (NULL == pWDA)
8468 {
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8470 "%s:pWDA is NULL", __func__);
8471 VOS_ASSERT(0);
8472 return ;
8473 }
8474
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008475 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8476
8477 if(NULL == pGetTsmStatsReqParams)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8480 "%s: pGetTsmStatsReqParams received NULL", __func__);
8481 VOS_ASSERT(0);
8482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8483 vos_mem_free(pWdaParams);
8484 return;
8485 }
8486
8487 pTsmRspParams =
8488 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 if( NULL == pTsmRspParams )
8490 {
8491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 VOS_ASSERT( 0 );
8494 return ;
8495 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008496 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8497 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8498 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8499
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8501 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8502 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8503 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8504 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8505 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8506 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8507 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8508 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8509 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008510
8511 /* Assign get tsm stats req req (backup) in to the response */
8512 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8513
8514 /* free WDI command buffer */
8515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8516 vos_mem_free(pWdaParams);
8517
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 return ;
8520}
8521
8522
Jeff Johnson295189b2012-06-20 16:38:30 -07008523/*
8524 * FUNCTION: WDA_ProcessTsmStatsReq
8525 * Request to WDI to get the TSM Stats params.
8526 */
8527VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008528 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008529{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008530 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008532 tWDA_ReqParams *pWdaParams = NULL;
8533 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8534
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008536 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8538 sizeof(WDI_TSMStatsReqParamsType));
8539 if(NULL == wdiTSMReqParam)
8540 {
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 VOS_ASSERT(0);
8544 return VOS_STATUS_E_NOMEM;
8545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8547 if(NULL == pWdaParams)
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 VOS_ASSERT(0);
8552 vos_mem_free(wdiTSMReqParam);
8553 return VOS_STATUS_E_NOMEM;
8554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8556 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8557 pTsmStats->bssId,
8558 sizeof(wpt_macAddr));
8559 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8560
8561 pWdaParams->pWdaContext = pWDA;
8562 /* Store TSM Stats pointer, as this will be used for response */
8563 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008564 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 status = WDI_TSMStatsReq(wdiTSMReqParam,
8566 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(IS_WDI_STATUS_FAILURE(status))
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8570 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008571 vos_mem_free(pWdaParams);
8572
8573 pGetTsmStatsRspParams =
8574 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8575 if(NULL == pGetTsmStatsRspParams)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8578 "%s: VOS MEM Alloc Failure", __func__);
8579 VOS_ASSERT(0);
8580 vos_mem_free(pTsmStats);
8581 return VOS_STATUS_E_NOMEM;
8582 }
8583 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8584 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8585 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8586
8587 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 return CONVERT_WDI2VOS_STATUS(status) ;
8590}
8591#endif
8592/*
8593 * FUNCTION: WDA_SendBeaconParamsCallback
8594 * No need to send any response to PE in this case
8595 */
8596void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8597{
8598
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008600 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 return ;
8602}
Jeff Johnson295189b2012-06-20 16:38:30 -07008603/*
8604 * FUNCTION: WDA_ProcessSendBeacon
8605 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8606 * start beacon trasmission
8607 */
8608VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8609 tSendbeaconParams *pSendbeaconParams)
8610{
8611 WDI_Status status = WDI_STATUS_SUCCESS ;
8612 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Abhishek Singhafb46052018-02-09 14:10:04 +05308614 "------> %s beaconLength %d" ,
8615 __func__, pSendbeaconParams->beaconLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8617 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
Abhishek Singhafb46052018-02-09 14:10:04 +05308618
8619 if (pSendbeaconParams->beaconLength > WDI_BEACON_TEMPLATE_SIZE) {
8620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8621 "%s: length %d greater than WDI_BEACON_TEMPLATE_SIZE" ,
8622 __func__, pSendbeaconParams->beaconLength);
8623 VOS_ASSERT(0);
8624 pSendbeaconParams->beaconLength = WDI_BEACON_TEMPLATE_SIZE;
8625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8627 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8629 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308630 /* p2pIeOffset should be atleast greater than timIeOffset */
8631 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8632 (pSendbeaconParams->p2pIeOffset <
8633 pSendbeaconParams->timIeOffset))
8634 {
8635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8636 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308637 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308638 VOS_ASSERT( 0 );
8639 return WDI_STATUS_E_FAILURE;
8640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8642 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 /* Copy the beacon template to local buffer */
8644 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8645 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8646 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8647
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8649 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 if(IS_WDI_STATUS_FAILURE(status))
8651 {
8652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8653 "Failure in SEND BEACON REQ Params WDI API" );
8654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 vos_mem_free(pSendbeaconParams);
8656 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657}
Jeff Johnson295189b2012-06-20 16:38:30 -07008658/*
8659 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8660 * No need to send any response to PE in this case
8661 */
8662void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8663{
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008665 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 return ;
8667}
8668
Jeff Johnson295189b2012-06-20 16:38:30 -07008669/*
8670 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8671 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8672 * send probe response
8673 */
8674VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8675 tSendProbeRespParams *pSendProbeRspParams)
8676{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008677 WDI_Status status = WDI_STATUS_SUCCESS;
8678 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8679 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Abhishek Singhafb46052018-02-09 14:10:04 +05308680 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8681 "------> %s probeRespTemplateLen %d" ,__func__,
8682 pSendProbeRspParams->probeRespTemplateLen);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008683
8684 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308685 {
8686 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008687 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308688 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008689
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008691 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008693 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008696 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8698 WDI_PROBE_REQ_BITMAP_IE_LEN);
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308699 /* Copy the Probe Response template to local buffer */
8700 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate =
8701 vos_mem_malloc(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.
8702 uProbeRespTemplateLen);
8703 if(!wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate)
8704 {
8705 status = WDI_STATUS_MEM_FAILURE;
8706 goto free_mem;
8707 }
8708
8709 vos_mem_copy(
8710 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
8711 pSendProbeRspParams->pProbeRespTemplate,
8712 pSendProbeRspParams->probeRespTemplateLen);
Jeff Johnson295189b2012-06-20 16:38:30 -07008713
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008714 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008715
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008716 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 if(IS_WDI_STATUS_FAILURE(status))
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8721 "Failure in SEND Probe RSP Params WDI API" );
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308722 vos_mem_free(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.
8723 pProbeRespTemplate);
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 }
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308725free_mem:
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008727 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008729}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008730#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008731/*
8732 * FUNCTION: WDA_SetMaxTxPowerCallBack
8733 * send the response to PE with power value received from WDI
8734 */
8735void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8736 void* pUserData)
8737{
8738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8739 tWDA_CbContext *pWDA = NULL;
8740 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8741
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008743 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 if(NULL == pWdaParams)
8745 {
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 VOS_ASSERT(0) ;
8749 return ;
8750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308752 if (NULL == pWDA)
8753 {
8754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8755 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8757 vos_mem_free(pWdaParams->wdaMsgParam);
8758 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308759 VOS_ASSERT(0);
8760 return ;
8761 }
8762
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 if( NULL == pMaxTxPowerParams )
8765 {
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008768 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8770 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 return ;
8772 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008773
Jeff Johnson295189b2012-06-20 16:38:30 -07008774
8775 /*need to free memory for the pointers used in the
8776 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8778 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008780
Jeff Johnson295189b2012-06-20 16:38:30 -07008781
8782 /* send response to UMAC*/
8783 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8784
8785 return;
8786}
Jeff Johnson295189b2012-06-20 16:38:30 -07008787/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008788 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 * Request to WDI to send set Max Tx Power Request
8790 */
8791 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8792 tMaxTxPowerParams *MaxTxPowerParams)
8793{
8794 WDI_Status status = WDI_STATUS_SUCCESS;
8795 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8796 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008797
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008800
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8802 sizeof(WDI_SetMaxTxPowerParamsType));
8803 if(NULL == wdiSetMaxTxPowerParams)
8804 {
8805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 VOS_ASSERT(0);
8808 return VOS_STATUS_E_NOMEM;
8809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8811 if(NULL == pWdaParams)
8812 {
8813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 vos_mem_free(wdiSetMaxTxPowerParams);
8816 VOS_ASSERT(0);
8817 return VOS_STATUS_E_NOMEM;
8818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 /* Copy.Max.Tx.Power Params to WDI structure */
8820 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8821 MaxTxPowerParams->bssId,
8822 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8824 MaxTxPowerParams->selfStaMacAddr,
8825 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8827 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 pWdaParams->pWdaContext = pWDA;
8830 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008831 /* store Params pass it to WDI */
8832 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8834 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 if(IS_WDI_STATUS_FAILURE(status))
8836 {
8837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8838 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8840 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008841 /* send response to UMAC*/
8842 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 }
8844 return CONVERT_WDI2VOS_STATUS(status);
8845
8846}
Jeff Johnson295189b2012-06-20 16:38:30 -07008847#endif
schang86c22c42013-03-13 18:41:24 -07008848
8849/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008850 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8851 * send the response to PE with power value received from WDI
8852 */
8853void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8854 *pwdiSetMaxTxPowerPerBandRsp,
8855 void* pUserData)
8856{
8857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8858 tWDA_CbContext *pWDA = NULL;
8859 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8860
8861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8862 "<------ %s ", __func__);
8863 if (NULL == pWdaParams)
8864 {
8865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8866 "%s: pWdaParams received NULL", __func__);
8867 VOS_ASSERT(0);
8868 return ;
8869 }
8870 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308871 if (NULL == pWDA)
8872 {
8873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8874 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8876 vos_mem_free(pWdaParams->wdaMsgParam);
8877 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308878 VOS_ASSERT(0);
8879 return ;
8880 }
8881
Arif Hussaina5ebce02013-08-09 15:09:58 -07008882 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8883 if ( NULL == pMxTxPwrPerBandParams )
8884 {
8885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8886 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8887 VOS_ASSERT(0);
8888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8889 vos_mem_free(pWdaParams);
8890 return;
8891 }
8892
8893 /*need to free memory for the pointers used in the
8894 WDA Process.Set Max Tx Power Req function*/
8895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8896 vos_mem_free(pWdaParams);
8897 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8898
8899 /* send response to UMAC*/
8900 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8901 pMxTxPwrPerBandParams, 0);
8902
8903 return;
8904}
8905
8906/*
8907 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8908 * Request to WDI to send set Max Tx Power Per band Request
8909 */
8910 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8911 tMaxTxPowerPerBandParams
8912 *MaxTxPowerPerBandParams)
8913{
8914 WDI_Status status = WDI_STATUS_SUCCESS;
8915 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8916 tWDA_ReqParams *pWdaParams = NULL;
8917
8918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8919 "------> %s ", __func__);
8920
8921 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8922 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8923
8924 if (NULL == wdiSetMxTxPwrPerBandParams)
8925 {
8926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8927 "%s: VOS MEM Alloc Failure", __func__);
8928 VOS_ASSERT(0);
8929 return VOS_STATUS_E_NOMEM;
8930 }
8931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8932 if (NULL == pWdaParams)
8933 {
8934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8935 "%s: VOS MEM Alloc Failure", __func__);
8936 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8937 VOS_ASSERT(0);
8938 return VOS_STATUS_E_NOMEM;
8939 }
8940 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8941 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8942 MaxTxPowerPerBandParams->bandInfo;
8943 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8944 MaxTxPowerPerBandParams->power;
8945 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8946 pWdaParams->pWdaContext = pWDA;
8947 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8948 /* store Params pass it to WDI */
8949 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8950 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8951 WDA_SetMaxTxPowerPerBandCallBack,
8952 pWdaParams);
8953 if (IS_WDI_STATUS_FAILURE(status))
8954 {
8955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8956 "Failure in SET MAX TX Power REQ Params WDI API,"
8957 " free all the memory");
8958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8959 vos_mem_free(pWdaParams);
8960 /* send response to UMAC*/
8961 WDA_SendMsg(pWDA,
8962 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8963 MaxTxPowerPerBandParams, 0);
8964 }
8965 return CONVERT_WDI2VOS_STATUS(status);
8966}
8967
8968/*
schang86c22c42013-03-13 18:41:24 -07008969 * FUNCTION: WDA_SetTxPowerCallBack
8970 * send the response to PE with power value received from WDI
8971 */
8972void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8973 void* pUserData)
8974{
8975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8976 tWDA_CbContext *pWDA = NULL;
8977 tSirSetTxPowerReq *pTxPowerParams = NULL;
8978
8979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8980 "<------ %s ", __func__);
8981 if(NULL == pWdaParams)
8982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8984 "%s: pWdaParams received NULL", __func__);
8985 VOS_ASSERT(0) ;
8986 return ;
8987 }
8988 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308989 if (NULL == pWDA)
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8992 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8994 vos_mem_free(pWdaParams->wdaMsgParam);
8995 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308996 VOS_ASSERT(0);
8997 return ;
8998 }
8999
schang86c22c42013-03-13 18:41:24 -07009000 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
9001 if(NULL == pTxPowerParams)
9002 {
9003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9004 "%s: pTxPowerParams received NULL " ,__func__);
9005 VOS_ASSERT(0);
9006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9007 vos_mem_free(pWdaParams);
9008 return ;
9009 }
9010
9011 /*need to free memory for the pointers used in the
9012 WDA Process.Set Max Tx Power Req function*/
9013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9014 vos_mem_free(pWdaParams);
9015
9016 /* send response to UMAC*/
9017 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
9018 return;
9019}
9020
9021/*
9022 * FUNCTION: WDA_ProcessSetTxPowerReq
9023 * Request to WDI to send set Tx Power Request
9024 */
9025 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
9026 tSirSetTxPowerReq *txPowerParams)
9027{
9028 WDI_Status status = WDI_STATUS_SUCCESS;
9029 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
9030 tWDA_ReqParams *pWdaParams = NULL;
9031
9032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9033 "------> %s ", __func__);
9034
9035 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
9036 sizeof(WDI_SetTxPowerParamsType));
9037 if(NULL == wdiSetTxPowerParams)
9038 {
9039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9040 "%s: VOS MEM Alloc Failure", __func__);
9041 VOS_ASSERT(0);
9042 return VOS_STATUS_E_NOMEM;
9043 }
9044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9045 if(NULL == pWdaParams)
9046 {
9047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9048 "%s: VOS MEM Alloc Failure", __func__);
9049 vos_mem_free(wdiSetTxPowerParams);
9050 VOS_ASSERT(0);
9051 return VOS_STATUS_E_NOMEM;
9052 }
9053 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
9054 txPowerParams->bssIdx;
9055 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
9056 txPowerParams->mwPower;
9057 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
9058 pWdaParams->pWdaContext = pWDA;
9059 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
9060 /* store Params pass it to WDI */
9061 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
9062 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
9063 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
9064 if(IS_WDI_STATUS_FAILURE(status))
9065 {
9066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9067 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
9068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9069 vos_mem_free(pWdaParams);
9070 /* send response to UMAC*/
9071 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
9072 }
9073 return CONVERT_WDI2VOS_STATUS(status);
9074}
9075
Jeff Johnson295189b2012-06-20 16:38:30 -07009076/*
9077 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9078 * Free the memory. No need to send any response to PE in this case
9079 */
9080void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
9081{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9083
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009085 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009086
9087 if(NULL == pWdaParams)
9088 {
9089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009090 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009091 VOS_ASSERT(0) ;
9092 return ;
9093 }
9094
9095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9096 vos_mem_free(pWdaParams->wdaMsgParam) ;
9097 vos_mem_free(pWdaParams);
9098
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 /*
9100 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
9101 * so just free the request param here
9102 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 return ;
9104}
9105
Jeff Johnson295189b2012-06-20 16:38:30 -07009106/*
9107 * FUNCTION: WDA_ProcessSetP2PGONOAReq
9108 * Request to WDI to set the P2P Group Owner Notice of Absence Req
9109 */
9110VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
9111 tP2pPsParams *pP2pPsConfigParams)
9112{
9113 WDI_Status status = WDI_STATUS_SUCCESS ;
9114 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
9115 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
9116 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009117 tWDA_ReqParams *pWdaParams = NULL;
9118
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 if(NULL == wdiSetP2PGONOAReqParam)
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009124 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309125 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_ASSERT(0);
9127 return VOS_STATUS_E_NOMEM;
9128 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009129
9130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9131 if(NULL == pWdaParams)
9132 {
9133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009134 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009135 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009136 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009137 VOS_ASSERT(0);
9138 return VOS_STATUS_E_NOMEM;
9139 }
9140
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
9142 pP2pPsConfigParams->opp_ps;
9143 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
9144 pP2pPsConfigParams->ctWindow;
9145 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
9146 pP2pPsConfigParams->count;
9147 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
9148 pP2pPsConfigParams->duration;
9149 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
9150 pP2pPsConfigParams->interval;
9151 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
9152 pP2pPsConfigParams->single_noa_duration;
9153 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
9154 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009155
Jeff Johnson295189b2012-06-20 16:38:30 -07009156 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
9157 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009158 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
9159
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009161 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
9162 pWdaParams->pWdaContext = pWDA;
9163
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009165 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
9166
Jeff Johnson295189b2012-06-20 16:38:30 -07009167 if(IS_WDI_STATUS_FAILURE(status))
9168 {
9169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9170 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9172 vos_mem_free(pWdaParams->wdaMsgParam);
9173 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 return CONVERT_WDI2VOS_STATUS(status);
9176
Jeff Johnson295189b2012-06-20 16:38:30 -07009177}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309178
9179#ifdef FEATURE_WLAN_TDLS
9180/*
9181 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9182 * Free the memory. No need to send any response to PE in this case
9183 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309184void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
9185 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309186{
9187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9188 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309189 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309190
9191
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9193 "<------ %s " ,__func__);
9194 if(NULL == pWdaParams)
9195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9197 "%s: pWdaParams received NULL", __func__);
9198 VOS_ASSERT(0) ;
9199 return ;
9200 }
9201 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9202
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309203 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309204 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9206 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9208 vos_mem_free(pWdaParams->wdaMsgParam);
9209 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309210 VOS_ASSERT(0);
9211 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309212 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309213
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309214 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
9215 if( NULL == pTdlsLinkEstablishParams )
9216 {
9217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9218 "%s: pTdlsLinkEstablishParams "
9219 "received NULL " ,__func__);
9220 VOS_ASSERT(0);
9221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9222 vos_mem_free(pWdaParams);
9223 return ;
9224 }
9225 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
9226 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309228 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309229 /* send response to UMAC*/
9230 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
9231
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309232 return ;
9233}
9234
9235VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
9236 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
9237{
9238 WDI_Status status = WDI_STATUS_SUCCESS ;
9239 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
9240 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
9241 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
9242 tWDA_ReqParams *pWdaParams = NULL;
9243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9244 "------> %s " ,__func__);
9245 if(NULL == wdiSetTDLSLinkEstablishReqParam)
9246 {
9247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9248 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309249 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309250 VOS_ASSERT(0);
9251 return VOS_STATUS_E_NOMEM;
9252 }
9253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9254 if(NULL == pWdaParams)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "%s: VOS MEM Alloc Failure", __func__);
9258 vos_mem_free(pTdlsLinkEstablishParams);
9259 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
9260 VOS_ASSERT(0);
9261 return VOS_STATUS_E_NOMEM;
9262 }
9263 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309264 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309265 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309266 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309267 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309268 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309269 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309270 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309271 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309272 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05309273 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
9274 pTdlsLinkEstablishParams->isOffChannelSupported;
9275
9276 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
9277 pTdlsLinkEstablishParams->validChannels,
9278 pTdlsLinkEstablishParams->validChannelsLen);
9279
9280 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
9281 pTdlsLinkEstablishParams->validChannelsLen;
9282
9283 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
9284 pTdlsLinkEstablishParams->validOperClasses,
9285 pTdlsLinkEstablishParams->validOperClassesLen);
9286 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
9287 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309288
9289 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
9290 /* Store msg pointer from PE, as this will be used for response */
9291 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
9292 /* store Params pass it to WDI */
9293 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
9294 pWdaParams->pWdaContext = pWDA;
9295
9296 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
9297 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
9298 WDA_SetTDLSLinkEstablishReqParamsCallback,
9299 pWdaParams);
9300 if(IS_WDI_STATUS_FAILURE(status))
9301 {
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9303 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
9304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9305 vos_mem_free(pWdaParams->wdaMsgParam);
9306 vos_mem_free(pWdaParams);
9307 }
9308 return CONVERT_WDI2VOS_STATUS(status);
9309}
Atul Mittalc0f739f2014-07-31 13:47:47 +05309310
9311// tdlsoffchan
9312void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
9313 void* pUserData)
9314{
9315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9316 tWDA_CbContext *pWDA = NULL;
9317 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
9318
9319
9320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9321 "<------ %s " ,__func__);
9322 if(NULL == pWdaParams)
9323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9325 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309326 VOS_ASSERT(0) ;
9327 return ;
9328 }
9329 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9330
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309331 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309332 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9334 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9336 vos_mem_free(pWdaParams->wdaMsgParam);
9337 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309338 VOS_ASSERT(0);
9339 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309340 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309341
Atul Mittalc0f739f2014-07-31 13:47:47 +05309342 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309343 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9346 "%s: pTdlsChanSwitchParams "
9347 "received NULL " ,__func__);
9348 VOS_ASSERT(0);
9349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9350 vos_mem_free(pWdaParams);
9351 return ;
9352 }
9353 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9354 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9356 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309357 /* send response to UMAC*/
9358 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309359
9360 return ;
9361}
9362VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9363 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9364{
9365 WDI_Status status = WDI_STATUS_SUCCESS ;
9366 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9367 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9368 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9369 tWDA_ReqParams *pWdaParams = NULL;
9370
9371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9372 "Enter: %s ",__func__);
9373 if(NULL == wdiSetTDLSChanSwitchReqParam)
9374 {
9375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9376 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309377 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309378 VOS_ASSERT(0);
9379 return VOS_STATUS_E_NOMEM;
9380 }
9381
9382 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9383 if(NULL == pWdaParams)
9384 {
9385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9386 "%s: VOS MEM Alloc Failure", __func__);
9387 vos_mem_free(pTdlsChanSwitchParams);
9388 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9389 VOS_ASSERT(0);
9390 return VOS_STATUS_E_NOMEM;
9391 }
9392 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9393 pTdlsChanSwitchParams->staIdx;
9394 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9395 pTdlsChanSwitchParams->tdlsSwMode;
9396 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9397 pTdlsChanSwitchParams->operClass;
9398 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9399 pTdlsChanSwitchParams->tdlsOffCh;
9400 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9401 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9402
9403
9404 /* Store msg pointer from PE, as this will be used for response */
9405 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9406 /* store Params pass it to WDI */
9407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9408 pWdaParams->pWdaContext = pWDA;
9409 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9410 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9411 WDA_SetTDLSChanSwitchReqParamsCallback,
9412 pWdaParams);
9413 if(IS_WDI_STATUS_FAILURE(status))
9414 {
9415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9416 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9418 vos_mem_free(pWdaParams->wdaMsgParam);
9419 vos_mem_free(pWdaParams);
9420 }
9421 return CONVERT_WDI2VOS_STATUS(status);
9422}
9423#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309424
9425
Jeff Johnson295189b2012-06-20 16:38:30 -07009426#ifdef WLAN_FEATURE_VOWIFI_11R
9427/*
9428 * FUNCTION: WDA_AggrAddTSReqCallback
9429 * send ADD AGGREGATED TS RSP back to PE
9430 */
9431void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9432{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309434 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009435 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009438 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009439 if(NULL == pWdaParams)
9440 {
9441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009442 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009443 VOS_ASSERT(0) ;
9444 return ;
9445 }
9446
9447 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309448 if (NULL == pWDA)
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9451 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9453 vos_mem_free(pWdaParams->wdaMsgParam);
9454 vos_mem_free(pWdaParams);
9455
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309456 VOS_ASSERT(0);
9457 return ;
9458 }
9459
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009460 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009461
9462 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9463 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009464 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009467
9468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9469 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 return ;
9471}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009472/*
9473 * FUNCTION: WDA_ProcessAddTSReq
9474 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9475 */
9476VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9477 tAggrAddTsParams *pAggrAddTsReqParams)
9478{
9479 WDI_Status status = WDI_STATUS_SUCCESS ;
9480 int i;
9481 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009482 tWDA_ReqParams *pWdaParams = NULL;
9483
9484
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9488 sizeof(WDI_AggrAddTSReqParamsType)) ;
9489 if(NULL == wdiAggrAddTSReqParam)
9490 {
9491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009492 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309493 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 VOS_ASSERT(0);
9495 return VOS_STATUS_E_NOMEM;
9496 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009497
9498
9499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9500 if(NULL == pWdaParams)
9501 {
9502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009503 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009504 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009505 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009506 VOS_ASSERT(0);
9507 return VOS_STATUS_E_NOMEM;
9508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9510 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9511 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9513 {
9514 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9516 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9518 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9519 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9520 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9521 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9522 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9523 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9524 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9525 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9526 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9527 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9528 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9529 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9530 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9531 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9532 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9534 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9536 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9537 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9538 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9539 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9540 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9541 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9542 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9543 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9544 pAggrAddTsReqParams->tspec[i].inactInterval;
9545 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9546 pAggrAddTsReqParams->tspec[i].suspendInterval;
9547 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9548 pAggrAddTsReqParams->tspec[i].svcStartTime;
9549 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9550 pAggrAddTsReqParams->tspec[i].minDataRate;
9551 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9552 pAggrAddTsReqParams->tspec[i].meanDataRate;
9553 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9554 pAggrAddTsReqParams->tspec[i].peakDataRate;
9555 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9556 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9557 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9558 pAggrAddTsReqParams->tspec[i].delayBound;
9559 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9560 pAggrAddTsReqParams->tspec[i].minPhyRate;
9561 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9562 pAggrAddTsReqParams->tspec[i].surplusBw;
9563 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9564 pAggrAddTsReqParams->tspec[i].mediumTime;
9565 }
9566
9567 /* TODO: tAggrAddTsParams doesn't have the following fields */
9568#if 0
9569 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9570 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9571 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9572 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9573#endif
9574 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9575
9576 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009577 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009579 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9580
9581 pWdaParams->pWdaContext = pWDA;
9582
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009584 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9585
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 if(IS_WDI_STATUS_FAILURE(status))
9587 {
9588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9589 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009590
9591 /* send the failure response back to PE*/
9592 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9593 {
9594 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9595 }
9596
9597 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9598 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309599
9600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9601 vos_mem_free(pWdaParams);
9602
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 return CONVERT_WDI2VOS_STATUS(status) ;
9605}
9606#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009607/*
Mihir Shetea4306052014-03-25 00:02:54 +05309608 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 * send Enter IMPS RSP back to PE
9610 */
Mihir Shetea4306052014-03-25 00:02:54 +05309611void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009612{
Mihir Shetea4306052014-03-25 00:02:54 +05309613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309614 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309615
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309617 "<------ %s status=%d" ,__func__,status);
9618 if(NULL == pWdaParams)
9619 {
9620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9621 "%s: pWdaParams received NULL", __func__);
9622 VOS_ASSERT(0);
9623 return;
9624 }
9625
9626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309627 if (NULL == pWDA)
9628 {
9629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9630 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9632 vos_mem_free(pWdaParams->wdaMsgParam);
9633 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309634 VOS_ASSERT(0);
9635 return ;
9636 }
Mihir Shetea4306052014-03-25 00:02:54 +05309637
9638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9639 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309640 if (WDI_STATUS_SUCCESS != status)
9641 {
9642 pWDA->failureCounts.enterImpsFailureCount++;
9643 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9644 pWDA->failureCounts.enterImpsFailureCount)
9645 {
9646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9647 "%s: Status %d fail count %d", __func__, status,
9648 pWDA->failureCounts.enterImpsFailureCount);
9649 pWDA->failureCounts.enterImpsFailureCount = 0;
9650 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9651 WLAN_LOG_INDICATOR_HOST_DRIVER,
9652 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9653 FALSE, TRUE);
9654 }
9655 }
9656 else
9657 {
9658 pWDA->failureCounts.enterImpsFailureCount = 0;
9659 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009660 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 return ;
9662}
Mihir Shetea4306052014-03-25 00:02:54 +05309663
9664
9665/*
9666 * FUNCTION: WDA_EnterImpsReqCallback
9667 * Free memory and send Enter IMPS RSP back to PE.
9668 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9669 */
9670void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9671{
9672 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309673 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309674
9675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9676 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9677
9678 if(NULL == pWdaParams)
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9681 "%s: pWdaParams received NULL", __func__);
9682 VOS_ASSERT(0);
9683 return;
9684 }
9685
9686 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309687 if (NULL == pWDA)
9688 {
9689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9690 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9692 vos_mem_free(pWdaParams->wdaMsgParam);
9693 vos_mem_free(pWdaParams);
9694
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309695 VOS_ASSERT(0);
9696 return ;
9697 }
9698
Mihir Shetea4306052014-03-25 00:02:54 +05309699
9700 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9701 {
9702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9703 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309704 pWDA->failureCounts.enterImpsFailureCount++;
9705 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9706 pWDA->failureCounts.enterImpsFailureCount)
9707 {
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9709 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9710 pWDA->failureCounts.enterImpsFailureCount);
9711 pWDA->failureCounts.enterImpsFailureCount = 0;
9712 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9713 WLAN_LOG_INDICATOR_HOST_DRIVER,
9714 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9715 FALSE, TRUE);
9716 }
Mihir Shetea4306052014-03-25 00:02:54 +05309717 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9718 CONVERT_WDI2SIR_STATUS(wdiStatus));
9719 }
9720
9721 return;
9722}
Jeff Johnson295189b2012-06-20 16:38:30 -07009723/*
9724 * FUNCTION: WDA_ProcessEnterImpsReq
9725 * Request to WDI to Enter IMPS power state.
9726 */
9727VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9728{
9729 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309730 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9731 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309732 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009734 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309735
9736
9737 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9738 if (NULL == wdiEnterImpsReqParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9741 "%s: VOS MEM Alloc Failure", __func__);
9742 VOS_ASSERT(0);
9743 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9744 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9745 return VOS_STATUS_E_NOMEM;
9746 }
9747
9748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9749 if (NULL == pWdaParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9752 "%s: VOS MEM Alloc Failure", __func__);
9753 VOS_ASSERT(0);
9754 vos_mem_free(wdiEnterImpsReqParams);
9755 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9756 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9757 return VOS_STATUS_E_NOMEM;
9758 }
9759
9760 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9761 wdiEnterImpsReqParams->pUserData = pWdaParams;
9762
9763 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9764 pWdaParams->wdaMsgParam = NULL;
9765 pWdaParams->pWdaContext = pWDA;
9766
9767 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9768 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9769 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 if(IS_WDI_STATUS_FAILURE(status))
9771 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309772 if (! (failcnt & 0xF))
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9774 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9775 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309776 vos_mem_free(wdiEnterImpsReqParams);
9777 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009778 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009780 return CONVERT_WDI2VOS_STATUS(status) ;
9781}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309782
9783/*
9784 * FUNCTION: WDA_ExitImpsRespCallback
9785 * send Exit IMPS RSP back to PE
9786 */
9787void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9788{
9789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9790 tWDA_CbContext *pWDA;
9791
9792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9793 "<------ %s " ,__func__);
9794
9795 if (NULL == pWdaParams)
9796 {
9797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9798 "%s: pWdaParams received NULL", __func__);
9799 VOS_ASSERT(0);
9800 return;
9801 }
9802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9803
9804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9805 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309806 if (WDI_STATUS_SUCCESS != status)
9807 {
9808 pWDA->failureCounts.exitImpsFailureCount++;
9809 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9810 pWDA->failureCounts.exitImpsFailureCount)
9811 {
9812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9813 "%s: Status %d fail count %d", __func__,
9814 status,
9815 pWDA->failureCounts.exitImpsFailureCount);
9816 pWDA->failureCounts.exitImpsFailureCount = 0;
9817 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9818 WLAN_LOG_INDICATOR_HOST_DRIVER,
9819 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9820 FALSE, TRUE);
9821 }
9822 }
9823 else
9824 {
9825 pWDA->failureCounts.exitImpsFailureCount = 0;
9826 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309827
9828 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9829 return;
9830}
9831
Jeff Johnson295189b2012-06-20 16:38:30 -07009832/*
9833 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 */
9835void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9836{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309838 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009840 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309841 if(NULL == pWdaParams)
9842 {
9843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9844 "%s: pWdaParams received NULL", __func__);
9845 VOS_ASSERT(0);
9846 return;
9847 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309848 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309849 if (IS_WDI_STATUS_FAILURE(status))
9850 {
9851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9852 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309853
9854 pWDA->failureCounts.exitImpsFailureCount++;
9855 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9856 pWDA->failureCounts.exitImpsFailureCount)
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9859 "%s: wdiStatus %d fail count %d", __func__,
9860 status,
9861 pWDA->failureCounts.exitImpsFailureCount);
9862 pWDA->failureCounts.exitImpsFailureCount = 0;
9863 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9864 WLAN_LOG_INDICATOR_HOST_DRIVER,
9865 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9866 FALSE, TRUE);
9867 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309868 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9869 {
9870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9871 FL("reload wlan driver"));
Anurag Chouhanf0d0ba12018-02-09 15:13:43 +05309872 wpalWlanReload(VOS_WDI_FAILURE);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309873 }
9874 }
9875 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009876}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309877
Jeff Johnson295189b2012-06-20 16:38:30 -07009878/*
9879 * FUNCTION: WDA_ProcessExitImpsReq
9880 * Request to WDI to Exit IMPS power state.
9881 */
9882VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9883{
9884 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309885 tWDA_ReqParams *pWdaParams;
9886 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9887
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009889 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309890 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9891 sizeof(WDI_ExitImpsReqParamsType));
9892 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9895 "%s: VOS MEM Alloc Failure", __func__);
9896 VOS_ASSERT(0);
9897 return VOS_STATUS_E_NOMEM;
9898 }
9899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9900 if(NULL == pWdaParams)
9901 {
9902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9903 "%s: VOS MEM Alloc Failure", __func__);
9904 VOS_ASSERT(0);
9905 vos_mem_free(wdiExitImpsReqParams);
9906 return VOS_STATUS_E_NOMEM;
9907 }
9908 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9909 wdiExitImpsReqParams->pUserData = pWdaParams;
9910
9911 /* Store param pointer as passed in by caller */
9912 /* store Params pass it to WDI */
9913 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9914 pWdaParams->pWdaContext = pWDA;
9915 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9916 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9917 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9918 pWdaParams);
9919 if (IS_WDI_STATUS_FAILURE(status))
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9922 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9924 vos_mem_free(pWdaParams);
9925 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 return CONVERT_WDI2VOS_STATUS(status) ;
9928}
Jeff Johnson295189b2012-06-20 16:38:30 -07009929/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009930 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 * send Enter BMPS RSP back to PE
9932 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009933void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009934{
9935 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309936 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009937 tEnterBmpsParams *pEnterBmpsRspParams;
9938
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009940 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 if(NULL == pWdaParams)
9942 {
9943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009944 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 VOS_ASSERT(0) ;
9946 return ;
9947 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009948
9949 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309950 if (NULL == pWDA)
9951 {
9952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9953 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309954
9955 if(pWdaParams->wdaWdiApiMsgParam)
9956 {
9957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9958 }
9959 vos_mem_free(pWdaParams);
9960
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309961 VOS_ASSERT(0);
9962 return ;
9963 }
9964
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009965 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9966
9967 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009968 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009969
9970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309972 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9973 {
9974 pWDA->failureCounts.enterBmpsFailureCount++;
9975 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9976 pWDA->failureCounts.enterBmpsFailureCount)
9977 {
9978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9979 "%s: wdiStatus %d fail count %d", __func__,
9980 pwdiEnterBmpsRsp->wdiStatus,
9981 pWDA->failureCounts.enterBmpsFailureCount);
9982 pWDA->failureCounts.enterBmpsFailureCount = 0;
9983 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9984 WLAN_LOG_INDICATOR_HOST_DRIVER,
9985 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9986 FALSE, TRUE);
9987 }
9988 }
9989 else
9990 {
9991 pWDA->failureCounts.enterBmpsFailureCount = 0;
9992 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009993 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9994
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 return ;
9996}
Jeff Johnson295189b2012-06-20 16:38:30 -07009997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009998 * FUNCTION: WDA_EnterBmpsReqCallback
9999 * Free memory and send Enter BMPS RSP back to PE.
10000 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
10001 */
10002void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10003{
10004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010005 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010006 tEnterBmpsParams *pEnterBmpsRspParams;
10007
10008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10010
10011 if(NULL == pWdaParams)
10012 {
10013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10014 "%s: pWdaParams received NULL", __func__);
10015 VOS_ASSERT(0);
10016 return;
10017 }
10018
10019 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010020 if (NULL == pWDA)
10021 {
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10023 "%s:pWDA is NULL", __func__);
10024 VOS_ASSERT(0);
10025 return ;
10026 }
10027
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
10029 pEnterBmpsRspParams->status = wdiStatus;
10030
10031 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10032 {
10033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10034 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010035 pWDA->failureCounts.enterBmpsFailureCount++;
10036 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10037 pWDA->failureCounts.enterBmpsFailureCount)
10038 {
10039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10040 "%s: wdiStatus %d fail count %d", __func__,
10041 wdiStatus,
10042 pWDA->failureCounts.enterBmpsFailureCount);
10043 pWDA->failureCounts.enterBmpsFailureCount = 0;
10044 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10045 WLAN_LOG_INDICATOR_HOST_DRIVER,
10046 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
10047 FALSE, TRUE);
10048 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010049 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
10050 }
10051
10052 return;
10053}
10054/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 * FUNCTION: WDA_ProcessEnterBmpsReq
10056 * Request to WDI to Enter BMPS power state.
10057 */
10058VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
10059 tEnterBmpsParams *pEnterBmpsReqParams)
10060{
10061 WDI_Status status = WDI_STATUS_SUCCESS;
10062 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
10063 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010065 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
10067 {
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010069 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010070 VOS_ASSERT(0);
10071 return VOS_STATUS_E_FAILURE;
10072 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
10074 if (NULL == wdiEnterBmpsReqParams)
10075 {
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010079 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10080 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 return VOS_STATUS_E_NOMEM;
10082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10084 if (NULL == pWdaParams)
10085 {
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 VOS_ASSERT(0);
10089 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010090 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10091 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 return VOS_STATUS_E_NOMEM;
10093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
10095 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
10096 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
10097 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080010098 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
10100 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
10101 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010102 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
10103 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010104
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 /* Store param pointer as passed in by caller */
10106 /* store Params pass it to WDI */
10107 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010108 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010111 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010112 if (IS_WDI_STATUS_FAILURE(status))
10113 {
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10115 "Failure in Enter BMPS REQ WDI API, free all the memory" );
10116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010117 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010118 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010119 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 return CONVERT_WDI2VOS_STATUS(status);
10122}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010123
10124
10125static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
10126 WDI_Status wdiStatus,
10127 tExitBmpsParams *pExitBmpsReqParams)
10128{
10129 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
10130
10131 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
10132}
10133
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010136 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 * send Exit BMPS RSP back to PE
10138 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010139void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010140{
10141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010142 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010143 tExitBmpsParams *pExitBmpsRspParams;
10144
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010146 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 if(NULL == pWdaParams)
10148 {
10149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010150 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 VOS_ASSERT(0) ;
10152 return ;
10153 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010154
10155 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010156 if (NULL == pWDA)
10157 {
10158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10159 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010160
10161 if(pWdaParams->wdaWdiApiMsgParam)
10162 {
10163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10164 }
10165 vos_mem_free(pWdaParams);
10166
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010167 VOS_ASSERT(0);
10168 return ;
10169 }
10170
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010171 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10172
10173 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010174 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010175
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +053010177 vos_mem_free(pWdaParams);
10178
10179 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
10180 {
10181 pWDA->failureCounts.exitBmpsFailureCount++;
10182 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10183 pWDA->failureCounts.exitBmpsFailureCount)
10184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10186 "%s: Status %d fail count %d", __func__,
10187 pExitBmpsRspParams->status,
10188 pWDA->failureCounts.exitBmpsFailureCount);
10189 pWDA->failureCounts.exitBmpsFailureCount = 0;
10190 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10191 WLAN_LOG_INDICATOR_HOST_DRIVER,
10192 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10193 FALSE, TRUE);
10194 }
10195 }
10196 else
10197 {
10198 pWDA->failureCounts.exitBmpsFailureCount = 0;
10199 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010200
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010201 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
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_ExitBmpsReqCallback
10206 * Free memory and send Exit BMPS RSP back to PE.
10207 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
10208 */
10209void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10210{
10211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010212 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010213 tExitBmpsParams *pExitBmpsRspParams;
10214
10215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10216 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10217
10218 if(NULL == pWdaParams)
10219 {
10220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10221 "%s: pWdaParams received NULL", __func__);
10222 VOS_ASSERT(0);
10223 return;
10224 }
10225
10226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010227 if (NULL == pWDA)
10228 {
10229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10230 "%s:pWDA is NULL", __func__);
10231 VOS_ASSERT(0);
10232 return ;
10233 }
10234
Yue Ma7f44bbe2013-04-12 11:47:39 -070010235 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10236 pExitBmpsRspParams->status = wdiStatus;
10237
10238 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10239 {
10240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10241 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010242 pWDA->failureCounts.exitBmpsFailureCount++;
10243 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10244 pWDA->failureCounts.exitBmpsFailureCount)
10245 {
10246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10247 "%s: wdiStatus %d fail count %d", __func__,
10248 wdiStatus,
10249 pWDA->failureCounts.exitBmpsFailureCount);
10250 pWDA->failureCounts.exitBmpsFailureCount = 0;
10251 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10252 WLAN_LOG_INDICATOR_HOST_DRIVER,
10253 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10254 FALSE, TRUE);
10255 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010256 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
10257 }
10258
10259 return;
10260}
10261/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 * FUNCTION: WDA_ProcessExitBmpsReq
10263 * Request to WDI to Exit BMPS power state.
10264 */
10265VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
10266 tExitBmpsParams *pExitBmpsReqParams)
10267{
10268 WDI_Status status = WDI_STATUS_SUCCESS ;
10269 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
10270 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
10271 sizeof(WDI_ExitBmpsReqParamsType)) ;
10272 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 if(NULL == wdiExitBmpsReqParams)
10276 {
10277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010280 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 return VOS_STATUS_E_NOMEM;
10282 }
10283 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10284 if(NULL == pWdaParams)
10285 {
10286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 VOS_ASSERT(0);
10289 vos_mem_free(wdiExitBmpsReqParams);
10290 return VOS_STATUS_E_NOMEM;
10291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -070010293
10294 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
10295
Yue Ma7f44bbe2013-04-12 11:47:39 -070010296 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
10297 wdiExitBmpsReqParams->pUserData = pWdaParams;
10298
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 /* Store param pointer as passed in by caller */
10300 /* store Params pass it to WDI */
10301 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
10302 pWdaParams->pWdaContext = pWDA;
10303 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010305 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 if(IS_WDI_STATUS_FAILURE(status))
10307 {
10308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10309 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10311 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010312 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 return CONVERT_WDI2VOS_STATUS(status) ;
10315}
Jeff Johnson295189b2012-06-20 16:38:30 -070010316/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010317 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010318 * send Enter UAPSD RSP back to PE
10319 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010320void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010321{
10322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010323 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010324 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 if(NULL == pWdaParams)
10328 {
10329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010330 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 VOS_ASSERT(0) ;
10332 return ;
10333 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010334
10335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010336 if (NULL == pWDA)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10339 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010340
10341 if(pWdaParams->wdaWdiApiMsgParam)
10342 {
10343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10344 }
10345 vos_mem_free(pWdaParams);
10346
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010347 VOS_ASSERT(0);
10348 return ;
10349 }
10350
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010351 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10352
10353 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010354 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010355
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10357 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010358 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 return ;
10360}
Jeff Johnson295189b2012-06-20 16:38:30 -070010361/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010362 * FUNCTION: WDA_EnterUapsdReqCallback
10363 * Free memory and send Enter UAPSD RSP back to PE.
10364 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10365 */
10366void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10367{
10368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10369 tWDA_CbContext *pWDA;
10370 tUapsdParams *pEnterUapsdRsqParams;
10371
10372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10373 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10374
10375 if(NULL == pWdaParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10378 "%s: pWdaParams received NULL", __func__);
10379 VOS_ASSERT(0);
10380 return;
10381 }
10382
10383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010384 if (NULL == pWDA)
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10387 "%s:pWDA is NULL", __func__);
10388 VOS_ASSERT(0);
10389 return ;
10390 }
10391
Yue Ma7f44bbe2013-04-12 11:47:39 -070010392 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10393 pEnterUapsdRsqParams->status = wdiStatus;
10394
10395 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10396 {
10397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10398 vos_mem_free(pWdaParams);
10399 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10400 }
10401
10402 return;
10403}
10404/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 * FUNCTION: WDA_ProcessEnterUapsdReq
10406 * Request to WDI to Enter UAPSD power state.
10407 */
10408VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10409 tUapsdParams *pEnterUapsdReqParams)
10410{
10411 WDI_Status status = WDI_STATUS_SUCCESS ;
10412 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10413 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10414 sizeof(WDI_EnterUapsdReqParamsType)) ;
10415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 if(NULL == wdiEnterUapsdReqParams)
10419 {
10420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 VOS_ASSERT(0);
10423 return VOS_STATUS_E_NOMEM;
10424 }
10425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10426 if(NULL == pWdaParams)
10427 {
10428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 VOS_ASSERT(0);
10431 vos_mem_free(wdiEnterUapsdReqParams);
10432 return VOS_STATUS_E_NOMEM;
10433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010434 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10435 pEnterUapsdReqParams->beDeliveryEnabled;
10436 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10437 pEnterUapsdReqParams->beTriggerEnabled;
10438 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10439 pEnterUapsdReqParams->bkDeliveryEnabled;
10440 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10441 pEnterUapsdReqParams->bkTriggerEnabled;
10442 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10443 pEnterUapsdReqParams->viDeliveryEnabled;
10444 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10445 pEnterUapsdReqParams->viTriggerEnabled;
10446 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10447 pEnterUapsdReqParams->voDeliveryEnabled;
10448 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10449 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010450 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010451
Yue Ma7f44bbe2013-04-12 11:47:39 -070010452 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10453 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010454
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 /* Store param pointer as passed in by caller */
10456 /* store Params pass it to WDI */
10457 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10458 pWdaParams->pWdaContext = pWDA;
10459 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010461 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 if(IS_WDI_STATUS_FAILURE(status))
10463 {
10464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10465 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10466 vos_mem_free(pWdaParams->wdaMsgParam) ;
10467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10468 vos_mem_free(pWdaParams) ;
10469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 return CONVERT_WDI2VOS_STATUS(status) ;
10471}
Jeff Johnson295189b2012-06-20 16:38:30 -070010472/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010473 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 * send Exit UAPSD RSP back to PE
10475 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010476void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010477{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010478
10479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10480 tWDA_CbContext *pWDA;
10481 tExitUapsdParams *pExitUapsdRspParams;
10482
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010484 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010485 if(NULL == pWdaParams)
10486 {
10487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010488 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010489 VOS_ASSERT(0);
10490 return;
10491 }
10492
10493 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10494 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10495
10496 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010497 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010498
10499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10500 vos_mem_free(pWdaParams) ;
10501
10502 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 return ;
10504}
Jeff Johnson295189b2012-06-20 16:38:30 -070010505/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010506 * FUNCTION: WDA_ExitUapsdReqCallback
10507 * Free memory and send Exit UAPSD RSP back to PE.
10508 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10509 */
10510void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10511{
10512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010513 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010514 tExitUapsdParams *pExitUapsdRspParams;
10515
10516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10517 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10518
10519 if(NULL == pWdaParams)
10520 {
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10522 "%s: pWdaParams received NULL", __func__);
10523 VOS_ASSERT(0);
10524 return;
10525 }
10526
10527 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010528 if (NULL == pWDA)
10529 {
10530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10531 "%s:pWDA is NULL", __func__);
10532 VOS_ASSERT(0);
10533 return ;
10534 }
10535
Yue Ma7f44bbe2013-04-12 11:47:39 -070010536 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10537 pExitUapsdRspParams->status = wdiStatus;
10538
10539 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10540 {
10541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10542 vos_mem_free(pWdaParams);
10543 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10544 }
10545
10546 return;
10547}
10548/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 * FUNCTION: WDA_ProcessExitUapsdReq
10550 * Request to WDI to Exit UAPSD power state.
10551 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010552VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10553 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010554{
10555 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010556 tWDA_ReqParams *pWdaParams ;
10557 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10558 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10559 sizeof(WDI_ExitUapsdReqParamsType)) ;
10560
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010562 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010563
10564 if(NULL == wdiExitUapsdReqParams)
10565 {
10566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010567 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010568 VOS_ASSERT(0);
10569 return VOS_STATUS_E_NOMEM;
10570 }
10571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10572 if(NULL == pWdaParams)
10573 {
10574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010575 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010576 VOS_ASSERT(0);
10577 vos_mem_free(wdiExitUapsdReqParams);
10578 return VOS_STATUS_E_NOMEM;
10579 }
10580
10581 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010582 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10583 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010584
10585 /* Store param pointer as passed in by caller */
10586 /* store Params pass it to WDI */
10587 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10588 pWdaParams->pWdaContext = pWDA;
10589 pWdaParams->wdaMsgParam = pExitUapsdParams;
10590
Yue Ma7f44bbe2013-04-12 11:47:39 -070010591 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 if(IS_WDI_STATUS_FAILURE(status))
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10595 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010596 vos_mem_free(pWdaParams->wdaMsgParam) ;
10597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10598 vos_mem_free(pWdaParams) ;
10599
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 return CONVERT_WDI2VOS_STATUS(status) ;
10602}
10603
Jeff Johnson295189b2012-06-20 16:38:30 -070010604/*
10605 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10606 *
10607 */
10608void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10609{
10610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010612 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 if(NULL == pWdaParams)
10614 {
10615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010616 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010617 VOS_ASSERT(0) ;
10618 return ;
10619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 if( pWdaParams != NULL )
10621 {
10622 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10623 {
10624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10625 }
10626 if( pWdaParams->wdaMsgParam != NULL )
10627 {
10628 vos_mem_free(pWdaParams->wdaMsgParam) ;
10629 }
10630 vos_mem_free(pWdaParams) ;
10631 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 return ;
10633}
Jeff Johnson295189b2012-06-20 16:38:30 -070010634/*
10635 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10636 * Request to WDI to set the power save params at start.
10637 */
10638VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10639 tSirPowerSaveCfg *pPowerSaveCfg)
10640{
10641 WDI_Status status = WDI_STATUS_SUCCESS ;
10642 tHalCfg *tlvStruct = NULL ;
10643 tANI_U8 *tlvStructStart = NULL ;
10644 v_PVOID_t *configParam;
10645 tANI_U32 configParamSize;
10646 tANI_U32 *configDataValue;
10647 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10648 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10652 {
10653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010654 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010656 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 return VOS_STATUS_E_FAILURE;
10658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10660 if (NULL == wdiPowerSaveCfg)
10661 {
10662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010665 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 return VOS_STATUS_E_NOMEM;
10667 }
10668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10669 if(NULL == pWdaParams)
10670 {
10671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 VOS_ASSERT(0);
10674 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010675 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 return VOS_STATUS_E_NOMEM;
10677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010678 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10679 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 if(NULL == configParam)
10681 {
10682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010683 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010684 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 vos_mem_free(pWdaParams);
10686 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010687 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 return VOS_STATUS_E_NOMEM;
10689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 vos_mem_set(configParam, configParamSize, 0);
10691 wdiPowerSaveCfg->pConfigBuffer = configParam;
10692 tlvStruct = (tHalCfg *)configParam;
10693 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010694 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10695 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10696 tlvStruct->length = sizeof(tANI_U32);
10697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10698 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10700 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010701 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10702 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10703 tlvStruct->length = sizeof(tANI_U32);
10704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10705 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010706 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10707 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10709 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10710 tlvStruct->length = sizeof(tANI_U32);
10711 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10712 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10714 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10716 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10717 tlvStruct->length = sizeof(tANI_U32);
10718 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10719 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010722 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10723 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10724 tlvStruct->length = sizeof(tANI_U32);
10725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10726 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10728 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10730 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10731 tlvStruct->length = sizeof(tANI_U32);
10732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10733 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010736 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10737 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10738 tlvStruct->length = sizeof(tANI_U32);
10739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10740 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10742 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10744 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10745 tlvStruct->length = sizeof(tANI_U32);
10746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10747 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10748 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10749 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10751 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10752 tlvStruct->length = sizeof(tANI_U32);
10753 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10754 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10756 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10758 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10759 tlvStruct->length = sizeof(tANI_U32);
10760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10761 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10763 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10765 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10766 tlvStruct->length = sizeof(tANI_U32);
10767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10768 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10770 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 /* store Params pass it to WDI */
10774 pWdaParams->wdaMsgParam = configParam;
10775 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10776 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010777 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10778 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 if(IS_WDI_STATUS_FAILURE(status))
10780 {
10781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10782 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10783 vos_mem_free(pWdaParams->wdaMsgParam);
10784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10785 vos_mem_free(pWdaParams);
10786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 return CONVERT_WDI2VOS_STATUS(status);
10789}
Jeff Johnson295189b2012-06-20 16:38:30 -070010790/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010791 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010792 *
10793 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010794void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010795{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10797
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010799 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010800
10801 if(NULL == pWdaParams)
10802 {
10803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10804 "%s: pWdaParams received NULL", __func__);
10805 VOS_ASSERT(0);
10806 return ;
10807 }
10808
10809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 vos_mem_free(pWdaParams);
10811
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 return ;
10813}
Jeff Johnson295189b2012-06-20 16:38:30 -070010814/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010815 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10816 * Free memory.
10817 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10818 */
10819void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10820{
10821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10822
10823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10824 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10825
10826 if(NULL == pWdaParams)
10827 {
10828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10829 "%s: pWdaParams received NULL", __func__);
10830 VOS_ASSERT(0);
10831 return;
10832 }
10833
10834 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10835 {
10836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10837 vos_mem_free(pWdaParams);
10838 }
10839
10840 return;
10841}
10842/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 * FUNCTION: WDA_SetUapsdAcParamsReq
10844 * Request to WDI to set the UAPSD params for an ac (sta mode).
10845 */
10846VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10847 tUapsdInfo *pUapsdInfo)
10848{
10849 WDI_Status status = WDI_STATUS_SUCCESS;
10850 tWDA_CbContext *pWDA = NULL ;
10851 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10852 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10853 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10854 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010857 if(NULL == wdiUapsdParams)
10858 {
10859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 VOS_ASSERT(0);
10862 return VOS_STATUS_E_NOMEM;
10863 }
10864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10865 if(NULL == pWdaParams)
10866 {
10867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 VOS_ASSERT(0);
10870 vos_mem_free(wdiUapsdParams);
10871 return VOS_STATUS_E_NOMEM;
10872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10874 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10875 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10876 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10877 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10878 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010879 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10880 wdiUapsdParams->pUserData = pWdaParams;
10881
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010883 pWdaParams->pWdaContext = pWDA;
10884 /* Store param pointer as passed in by caller */
10885 pWdaParams->wdaMsgParam = pUapsdInfo;
10886 /* store Params pass it to WDI */
10887 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010889 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010890 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 if(IS_WDI_STATUS_FAILURE(status))
10892 {
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10894 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10896 vos_mem_free(pWdaParams);
10897 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10899 return VOS_STATUS_SUCCESS;
10900 else
10901 return VOS_STATUS_E_FAILURE;
10902
Jeff Johnson295189b2012-06-20 16:38:30 -070010903}
10904/*
10905 * FUNCTION: WDA_ClearUapsdAcParamsReq
10906 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10907 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10908 * and again enter the UPASD with the modified params. Hence the disable
10909 * function was kept empty.
10910 *
10911 */
10912VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10913{
10914 /* do nothing */
10915 return VOS_STATUS_SUCCESS;
10916}
Jeff Johnson295189b2012-06-20 16:38:30 -070010917/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010918 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 *
10920 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010922{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10924
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010927
10928 if(NULL == pWdaParams)
10929 {
10930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010931 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010932 VOS_ASSERT(0) ;
10933 return ;
10934 }
10935
10936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10937 vos_mem_free(pWdaParams->wdaMsgParam);
10938 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010939
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 //print a msg, nothing else to do
10941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010942 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 return ;
10944}
Jeff Johnson295189b2012-06-20 16:38:30 -070010945/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010946 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10947 * Free memory.
10948 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10949 */
10950void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10951{
10952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10953
10954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10955 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10956
10957 if(NULL == pWdaParams)
10958 {
10959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10960 "%s: pWdaParams received NULL", __func__);
10961 VOS_ASSERT(0);
10962 return;
10963 }
10964
10965 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10966 {
10967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10968 vos_mem_free(pWdaParams->wdaMsgParam);
10969 vos_mem_free(pWdaParams);
10970 }
10971
10972 return;
10973}
10974/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 * FUNCTION: WDA_UpdateUapsdParamsReq
10976 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10977 */
10978VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10979 tUpdateUapsdParams* pUpdateUapsdInfo)
10980{
10981 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010982 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10984 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10985 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010986 tWDA_ReqParams *pWdaParams = NULL;
10987
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 if(NULL == wdiUpdateUapsdParams)
10991 {
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010994 VOS_ASSERT(0);
10995 return VOS_STATUS_E_NOMEM;
10996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010997 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10998 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10999 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011000 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
11001 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011002
11003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11004 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 {
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011009 vos_mem_free(pUpdateUapsdInfo);
11010 vos_mem_free(wdiUpdateUapsdParams);
11011 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011013 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011014 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011016 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
11017 pWdaParams->pWdaContext = pWDA;
11018
Jeff Johnson43971f52012-07-17 12:26:56 -070011019 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011020 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011021 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011022
Jeff Johnson43971f52012-07-17 12:26:56 -070011023 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 {
11025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11026 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011027 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
11028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11029 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011030 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011032 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011033}
Jeff Johnson295189b2012-06-20 16:38:30 -070011034/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011035 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 *
11037 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011038void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011039{
11040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011042 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 if(WDI_STATUS_SUCCESS != wdiStatus)
11044 {
11045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011046 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 if(NULL == pWdaParams)
11049 {
11050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 VOS_ASSERT(0) ;
11053 return ;
11054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11056 vos_mem_free(pWdaParams->wdaMsgParam);
11057 vos_mem_free(pWdaParams);
11058 return ;
11059}
Jeff Johnson295189b2012-06-20 16:38:30 -070011060/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011061 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
11062 * Free memory.
11063 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
11064 */
11065void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11066{
11067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11068
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11070 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11071
11072 if(NULL == pWdaParams)
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11075 "%s: pWdaParams received NULL", __func__);
11076 VOS_ASSERT(0);
11077 return;
11078 }
11079
11080 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11081 {
11082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11083 vos_mem_free(pWdaParams->wdaMsgParam);
11084 vos_mem_free(pWdaParams);
11085 }
11086
11087 return;
11088}
11089/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
11091 *
11092 */
11093VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
11094 tSirWlanSetRxpFilters *pWlanSuspendParam)
11095{
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011097 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011098 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011100 /* Sanity Check
11101 * This is very unlikely and add assert to collect more info next time */
11102 if(NULL == pWlanSuspendParam)
11103 {
11104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11105 "%s: pWlanSuspendParam received NULL", __func__);
11106 VOS_ASSERT(0) ;
11107 return VOS_STATUS_E_FAULT;
11108 }
11109 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
11110 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 if(NULL == wdiRxpFilterParams)
11114 {
11115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 VOS_ASSERT(0);
11118 vos_mem_free(pWlanSuspendParam);
11119 return VOS_STATUS_E_NOMEM;
11120 }
11121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11122 if(NULL == pWdaParams)
11123 {
11124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 VOS_ASSERT(0);
11127 vos_mem_free(wdiRxpFilterParams);
11128 vos_mem_free(pWlanSuspendParam);
11129 return VOS_STATUS_E_NOMEM;
11130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
11132 pWlanSuspendParam->setMcstBcstFilter;
11133 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
11134 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11135
Yue Ma7f44bbe2013-04-12 11:47:39 -070011136 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
11137 wdiRxpFilterParams->pUserData = pWdaParams;
11138
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 pWdaParams->pWdaContext = pWDA;
11140 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11141 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011142 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011143 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011145 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011149 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11151 vos_mem_free(pWdaParams->wdaMsgParam);
11152 vos_mem_free(pWdaParams);
11153 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011154 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011155}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011156
11157/*
Siddharth Bhal64246172015-02-27 01:04:37 +053011158 * FUNCTION: WDA_ProcessGetFrameLogReq
11159 * Request to WDI to get the Frame Log.
11160 */
11161VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
11162 tAniGetFrameLogReq *pGetFrameLog)
11163{
11164 VOS_STATUS status = VOS_STATUS_SUCCESS;
11165 WDI_Status wstatus;
11166 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
11167 tWDA_ReqParams *pWdaParams ;
11168
11169 /* Sanity Check*/
11170 if(NULL == pGetFrameLog)
11171 {
11172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011173 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053011174 VOS_ASSERT(0) ;
11175 return VOS_STATUS_E_FAULT;
11176 }
11177
11178 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
11179 sizeof(WDI_GetFrameLogReqInfoType));
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11181 "------> %s " ,__func__);
11182
11183 if(NULL == wdiGetFrameLogInfo)
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11186 "%s: VOS MEM Alloc Failure", __func__);
11187 VOS_ASSERT(0);
11188 vos_mem_free(pGetFrameLog);
11189 return VOS_STATUS_E_NOMEM;
11190 }
11191
11192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11193 if(NULL == pWdaParams)
11194 {
11195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11196 "%s: VOS MEM Alloc Failure", __func__);
11197 VOS_ASSERT(0);
11198 vos_mem_free(wdiGetFrameLogInfo);
11199 vos_mem_free(pGetFrameLog);
11200 return VOS_STATUS_E_NOMEM;
11201 }
11202
11203 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
11204
11205 pWdaParams->pWdaContext = pWDA;
11206 pWdaParams->wdaMsgParam = pGetFrameLog;
11207 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
11208
11209 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
11210 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
11211 pWdaParams);
11212 if(IS_WDI_STATUS_FAILURE(wstatus))
11213 {
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11215 "Failure in get frame log REQ WDI API, free all the memory" );
11216 status = CONVERT_WDI2VOS_STATUS(wstatus);
11217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11218 vos_mem_free(pWdaParams->wdaMsgParam);
11219 vos_mem_free(pWdaParams);
11220 }
11221 return status;
11222}
11223
Sachin Ahuja715aafc2015-07-21 23:35:10 +053011224
11225/*
11226 * FUNCTION: WDA_FatalEventLogsRspCallback
11227 * recieves Flush Logs response from FW
11228 */
11229
11230void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
11231 void* pUserData)
11232{
11233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11234
11235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11236 "<------ %s,wdiStatus:%d " ,
11237 __func__, wdiRsp->wdiStatus);
11238 if(NULL == pWdaParams)
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11241 "%s: pWdaParams received NULL", __func__);
11242 VOS_ASSERT(0);
11243 return ;
11244 }
11245
11246 if(NULL == pWdaParams->wdaMsgParam)
11247 {
11248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11249 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
11250 VOS_ASSERT(0);
11251 vos_mem_free(pWdaParams);
11252 return ;
11253 }
11254
11255 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
11256 {
11257 /*
11258 * If it is failure, it means JOb is already posted by FW
11259 * for logging, so for failure scenario also we will get the
11260 * done indication
11261 */
11262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11263 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
11264 __func__, wdiRsp->wdiStatus);
11265 }
11266
11267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11268 vos_mem_free(pWdaParams->wdaMsgParam);
11269 vos_mem_free(pWdaParams);
11270
11271 return;
11272
11273}
11274
11275/*
11276 * FUNCTION: WDA_ProcessFatalEventLogsReq
11277 * Request to WDI to send the fatal Event Logs Req.
11278 */
11279
11280VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
11281 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
11282{
11283 VOS_STATUS status = VOS_STATUS_SUCCESS;
11284 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
11285 tWDA_ReqParams *pWdaParams ;
11286 WDI_Status wstatus;
11287
11288
11289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11290 "------> %s " ,__func__);
11291 if (NULL == pFatalEventLogsReqParam)
11292 {
11293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11294 "%s: pMgmtLoggingInitParam received NULL", __func__);
11295 VOS_ASSERT(0) ;
11296 return VOS_STATUS_E_FAULT;
11297 }
11298 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
11299 sizeof(WDI_FatalEventLogsReqInfoType));
11300 if(NULL == wdiFatalEventLogsReqInfo)
11301 {
11302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11303 "%s: VOS MEM Alloc Failure", __func__);
11304 VOS_ASSERT(0);
11305 vos_mem_free(pFatalEventLogsReqParam);
11306 return VOS_STATUS_E_NOMEM;
11307 }
11308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11309 if(NULL == pWdaParams)
11310 {
11311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11312 "%s: VOS MEM Alloc Failure", __func__);
11313 VOS_ASSERT(0);
11314 vos_mem_free(wdiFatalEventLogsReqInfo);
11315 vos_mem_free(pFatalEventLogsReqParam);
11316 return VOS_STATUS_E_NOMEM;
11317 }
11318 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11319 pWdaParams->pWdaContext = pWDA;
11320 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11321 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11322
11323 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11324 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11325 pWdaParams);
11326 if(IS_WDI_STATUS_FAILURE(wstatus))
11327 {
11328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11329 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11330 status = CONVERT_WDI2VOS_STATUS(wstatus);
11331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11332 vos_mem_free(pWdaParams->wdaMsgParam);
11333 vos_mem_free(pWdaParams);
11334 }
11335
11336 return status;
11337
11338}
11339
Siddharth Bhal64246172015-02-27 01:04:37 +053011340/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011341 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011342 *
11343 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011344VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11345 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011346{
11347 VOS_STATUS status = VOS_STATUS_SUCCESS;
11348 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011349 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011350 tWDA_ReqParams *pWdaParams ;
11351
11352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11353 "------> %s " ,__func__);
11354
11355 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011356 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011357 {
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011359 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011360 VOS_ASSERT(0) ;
11361 return VOS_STATUS_E_FAULT;
11362 }
11363
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011364 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11365 sizeof(WDI_FWLoggingInitReqInfoType));
11366 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11369 "%s: VOS MEM Alloc Failure", __func__);
11370 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011371 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011372 return VOS_STATUS_E_NOMEM;
11373 }
11374
11375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11376 if(NULL == pWdaParams)
11377 {
11378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11379 "%s: VOS MEM Alloc Failure", __func__);
11380 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011381 vos_mem_free(wdiFWLoggingInitInfo);
11382 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011383 return VOS_STATUS_E_NOMEM;
11384 }
11385
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011386 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11387 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11388 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11389 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11390 wdiFWLoggingInitInfo->continuousFrameLogging =
11391 pFWLoggingInitParam->continuousFrameLogging;
11392 wdiFWLoggingInitInfo->minLogBufferSize=
11393 pFWLoggingInitParam->minLogBufferSize;
11394 wdiFWLoggingInitInfo->maxLogBufferSize=
11395 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011396
11397 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011398 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11399 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011400
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011401 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11402 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011403 pWdaParams);
11404 if(IS_WDI_STATUS_FAILURE(wstatus))
11405 {
11406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11407 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11408 status = CONVERT_WDI2VOS_STATUS(wstatus);
11409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11410 vos_mem_free(pWdaParams->wdaMsgParam);
11411 vos_mem_free(pWdaParams);
11412 }
11413
11414 return status;
11415}
11416
Jeff Johnson295189b2012-06-20 16:38:30 -070011417/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011418 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11419 *
11420 */
11421VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11422 tSirRssiMonitorReq *pRssiMonitorReqParam)
11423{
11424 VOS_STATUS status = VOS_STATUS_SUCCESS;
11425 WDI_Status wstatus;
11426 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11427 tWDA_ReqParams *pWdaParams ;
11428
11429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11430 "------> %s " ,__func__);
11431
11432 /* Sanity Check*/
11433 if(NULL == pRssiMonitorReqParam)
11434 {
11435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11436 "%s: pRssiMonitorReqParam received NULL", __func__);
11437 VOS_ASSERT(0) ;
11438 return VOS_STATUS_E_FAULT;
11439 }
11440
11441 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11442 sizeof(WDI_RssiMonitorReqInfoType));
11443 if(NULL == wdiRssiMonitorInfo)
11444 {
11445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11446 "%s: VOS MEM Alloc Failure", __func__);
11447 VOS_ASSERT(0);
11448 vos_mem_free(pRssiMonitorReqParam);
11449 return VOS_STATUS_E_NOMEM;
11450 }
11451
11452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11453 if(NULL == pWdaParams)
11454 {
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11456 "%s: VOS MEM Alloc Failure", __func__);
11457 VOS_ASSERT(0);
11458 vos_mem_free(wdiRssiMonitorInfo);
11459 vos_mem_free(pRssiMonitorReqParam);
11460 return VOS_STATUS_E_NOMEM;
11461 }
11462
11463 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11464 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11465 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11466 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11467 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11468
11469 pWdaParams->pWdaContext = pWDA;
11470 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11471 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11472
11473 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11474 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11475 pWdaParams);
11476 if(IS_WDI_STATUS_FAILURE(wstatus))
11477 {
11478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11479 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11480 status = CONVERT_WDI2VOS_STATUS(wstatus);
11481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11482 vos_mem_free(pWdaParams->wdaMsgParam);
11483 vos_mem_free(pWdaParams);
11484 }
11485
11486 return status;
11487}
11488
11489/*
11490 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11491 *
11492 */
11493VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11494 tSirRssiMonitorReq *pRssiMonitorReqParam)
11495{
11496 VOS_STATUS status = VOS_STATUS_SUCCESS;
11497 WDI_Status wstatus;
11498 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11499 tWDA_ReqParams *pWdaParams ;
11500
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11502 "------> %s " ,__func__);
11503
11504 /* Sanity Check*/
11505 if(NULL == pRssiMonitorReqParam)
11506 {
11507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11508 "%s: pRssiMonitorReqParam received NULL", __func__);
11509 VOS_ASSERT(0) ;
11510 return VOS_STATUS_E_FAULT;
11511 }
11512
11513 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11514 sizeof(WDI_RssiMonitorReqInfoType));
11515 if(NULL == wdiRssiMonitorInfo)
11516 {
11517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11518 "%s: VOS MEM Alloc Failure", __func__);
11519 VOS_ASSERT(0);
11520 vos_mem_free(pRssiMonitorReqParam);
11521 return VOS_STATUS_E_NOMEM;
11522 }
11523
11524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11525 if(NULL == pWdaParams)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11528 "%s: VOS MEM Alloc Failure", __func__);
11529 VOS_ASSERT(0);
11530 vos_mem_free(wdiRssiMonitorInfo);
11531 vos_mem_free(pRssiMonitorReqParam);
11532 return VOS_STATUS_E_NOMEM;
11533 }
11534
11535 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11536 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11537 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11538
11539 pWdaParams->pWdaContext = pWDA;
11540 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11541 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11542
11543 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11544 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11545 pWdaParams);
11546 if(IS_WDI_STATUS_FAILURE(wstatus))
11547 {
11548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11549 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11550 status = CONVERT_WDI2VOS_STATUS(wstatus);
11551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11552 vos_mem_free(pWdaParams->wdaMsgParam);
11553 vos_mem_free(pWdaParams);
11554 }
11555
11556 return status;
11557}
11558
11559
11560/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 * FUNCTION: WDA_WdiIndicationCallback
11562 *
11563 */
11564void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11565 void* pUserData)
11566{
11567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011568 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011569}
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011570
11571/**
11572 * WDA_ProcessWlanSuspendIndCallback: callback API for WDA_ProcessWlanSuspendInd
11573 * @wdiStatus: wdi status
11574 * @pUserData: suspend params
11575 *
11576 * Return: None
11577 */
11578void WDA_ProcessWlanSuspendIndCallback(WDI_Status wdiStatus, void* pUserData)
11579{
11580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11581 tSirWlanSuspendParam *pWlanSuspendParam;
11582
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11585
11586 if(NULL == pWdaParams)
11587 {
11588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11589 "%s: pWdaParams received NULL", __func__);
11590 return;
11591 }
11592
11593 pWlanSuspendParam = (tSirWlanSuspendParam *)pWdaParams->wdaMsgParam;
11594 if (pWlanSuspendParam == NULL)
11595 {
11596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11597 "%s: suspend params NULL", __func__);
11598 vos_mem_free(pWdaParams);
11599 return;
11600 }
11601 if (pWlanSuspendParam->wlan_sus_callback)
11602 {
11603 pWlanSuspendParam->wlan_sus_callback(pWlanSuspendParam->context,
11604 CONVERT_WDI2VOS_STATUS(wdiStatus));
11605 }
11606 else
11607 {
11608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11609 "%s: wlan suspend callback is NULL", __func__);
11610 }
11611 if (pWdaParams->wdaMsgParam) {
11612 vos_mem_free(pWdaParams->wdaMsgParam);
11613 pWdaParams->wdaMsgParam = NULL;
11614 }
11615 vos_mem_free(pWdaParams);
11616 return;
11617}
11618
Jeff Johnson295189b2012-06-20 16:38:30 -070011619/*
11620 * FUNCTION: WDA_ProcessWlanSuspendInd
11621 *
11622 */
11623VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11624 tSirWlanSuspendParam *pWlanSuspendParam)
11625{
11626 WDI_Status wdiStatus;
11627 WDI_SuspendParamsType wdiSuspendParams;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011628 tWDA_ReqParams *pWdaParams;
11629
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011632 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11633 pWlanSuspendParam->configuredMcstBcstFilterSetting;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011634 wdiSuspendParams.wdiReqStatusCB = WDA_ProcessWlanSuspendIndCallback;
11635
11636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11637 if (!pWdaParams)
11638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11639 "%s memory allocation failed" ,__func__);
11640 pWdaParams->pWdaContext = pWDA;
11641 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11642 wdiSuspendParams.pUserData = pWdaParams;
11643
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11646 if(WDI_STATUS_PENDING == wdiStatus)
11647 {
11648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011649 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 }
11651 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11652 {
11653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011654 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11657}
11658
Chet Lanctot186b5732013-03-18 10:26:30 -070011659#ifdef WLAN_FEATURE_11W
11660/*
11661 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11662 *
11663 */
11664VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11665 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11666{
11667 WDI_Status wdiStatus;
11668 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11670 "------> %s ", __func__);
11671
11672 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11673 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11674 sizeof(tSirMacAddr));
11675
11676 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11677 wdiExclUnencryptParams.pUserData = pWDA;
11678
11679 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11680 if(WDI_STATUS_PENDING == wdiStatus)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11683 "Pending received for %s:%d ", __func__, __LINE__ );
11684 }
11685 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11686 {
11687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11688 "Failure in %s:%d ", __func__, __LINE__ );
11689 }
11690 vos_mem_free(pExclUnencryptParam);
11691 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11692}
11693#endif
11694
Jeff Johnson295189b2012-06-20 16:38:30 -070011695/*
11696 * FUNCTION: WDA_ProcessWlanResumeCallback
11697 *
11698 */
11699void WDA_ProcessWlanResumeCallback(
11700 WDI_SuspendResumeRspParamsType *resumeRspParams,
11701 void* pUserData)
11702{
11703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 if(NULL == pWdaParams)
11707 {
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 VOS_ASSERT(0) ;
11711 return ;
11712 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011713 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11714 {
11715 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011716 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11719 vos_mem_free(pWdaParams->wdaMsgParam);
11720 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 return ;
11722}
Jeff Johnson295189b2012-06-20 16:38:30 -070011723/*
11724 * FUNCTION: WDA_ProcessWlanResumeReq
11725 *
11726 */
11727VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11728 tSirWlanResumeParam *pWlanResumeParam)
11729{
11730 WDI_Status wdiStatus;
11731 WDI_ResumeParamsType *wdiResumeParams =
11732 (WDI_ResumeParamsType *)vos_mem_malloc(
11733 sizeof(WDI_ResumeParamsType) ) ;
11734 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011736 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 if(NULL == wdiResumeParams)
11738 {
11739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 VOS_ASSERT(0);
11742 return VOS_STATUS_E_NOMEM;
11743 }
11744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11745 if(NULL == pWdaParams)
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 VOS_ASSERT(0);
11750 vos_mem_free(wdiResumeParams);
11751 return VOS_STATUS_E_NOMEM;
11752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11754 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 wdiResumeParams->wdiReqStatusCB = NULL;
11757 pWdaParams->wdaMsgParam = pWlanResumeParam;
11758 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11759 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11761 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11762 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11764 {
11765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11766 "Failure in Host Resume REQ WDI API, free all the memory " );
11767 VOS_ASSERT(0);
11768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11769 vos_mem_free(pWdaParams->wdaMsgParam);
11770 vos_mem_free(pWdaParams);
11771 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11773}
11774
Jeff Johnson295189b2012-06-20 16:38:30 -070011775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011776 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 *
11778 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011779void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011780{
11781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 == pWdaParams)
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 VOS_ASSERT(0) ;
11789 return ;
11790 }
11791
11792 vos_mem_free(pWdaParams->wdaMsgParam) ;
11793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11794 vos_mem_free(pWdaParams) ;
11795 /*
11796 * No respone required for SetBeaconFilter req so just free the request
11797 * param here
11798 */
11799
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 return ;
11801}
Jeff Johnson295189b2012-06-20 16:38:30 -070011802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011803 * FUNCTION: WDA_SetBeaconFilterReqCallback
11804 * Free memory.
11805 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11806 */
11807void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11808{
11809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11810
11811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11813
11814 if(NULL == pWdaParams)
11815 {
11816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11817 "%s: pWdaParams received NULL", __func__);
11818 VOS_ASSERT(0);
11819 return;
11820 }
11821
11822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11823 {
11824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11825 vos_mem_free(pWdaParams->wdaMsgParam);
11826 vos_mem_free(pWdaParams);
11827 }
11828
11829 return;
11830}
11831/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 * FUNCTION: WDA_SetBeaconFilterReq
11833 * Request to WDI to send the beacon filtering related information.
11834 */
11835VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11836 tBeaconFilterMsg* pBeaconFilterInfo)
11837{
11838 WDI_Status status = WDI_STATUS_SUCCESS;
11839 tANI_U8 *dstPtr, *srcPtr;
11840 tANI_U8 filterLength;
11841 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11842 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11843 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11844 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 if(NULL == wdiBeaconFilterInfo)
11848 {
11849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 VOS_ASSERT(0);
11852 return VOS_STATUS_E_NOMEM;
11853 }
11854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11855 if(NULL == pWdaParams)
11856 {
11857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011859 VOS_ASSERT(0);
11860 vos_mem_free(wdiBeaconFilterInfo);
11861 return VOS_STATUS_E_NOMEM;
11862 }
Abhishek Singhdfe0f742017-01-03 11:26:38 +053011863 vos_mem_zero(wdiBeaconFilterInfo, sizeof(WDI_BeaconFilterReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -070011864 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11865 pBeaconFilterInfo->beaconInterval;
11866 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11867 pBeaconFilterInfo->capabilityInfo;
11868 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11869 pBeaconFilterInfo->capabilityMask;
11870 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011871
11872 //Fill the BssIdx
11873 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11874
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 //Fill structure with info contained in the beaconFilterTable
11876 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11877 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11878 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11879 if(WDI_BEACON_FILTER_LEN < filterLength)
11880 {
11881 filterLength = WDI_BEACON_FILTER_LEN;
11882 }
11883 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011884 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11885 wdiBeaconFilterInfo->pUserData = pWdaParams;
11886
Jeff Johnson295189b2012-06-20 16:38:30 -070011887 /* Store param pointer as passed in by caller */
11888 /* store Params pass it to WDI */
11889 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11890 pWdaParams->pWdaContext = pWDA;
11891 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11892
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011894 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011895 if(IS_WDI_STATUS_FAILURE(status))
11896 {
11897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11898 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11899 vos_mem_free(pWdaParams->wdaMsgParam) ;
11900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11901 vos_mem_free(pWdaParams) ;
11902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 return CONVERT_WDI2VOS_STATUS(status) ;
11904}
Jeff Johnson295189b2012-06-20 16:38:30 -070011905/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011906 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 *
11908 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011909void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011910{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11912
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011914 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011915
11916 if(NULL == pWdaParams)
11917 {
11918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011919 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011920 VOS_ASSERT(0) ;
11921 return ;
11922 }
11923
11924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11925 vos_mem_free(pWdaParams->wdaMsgParam);
11926 vos_mem_free(pWdaParams);
11927
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 //print a msg, nothing else to do
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011930 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 return ;
11932}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011933/*
11934 * FUNCTION: WDA_RemBeaconFilterReqCallback
11935 * Free memory.
11936 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11937 */
11938void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11939{
11940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11941
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11943 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11944
11945 if(NULL == pWdaParams)
11946 {
11947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11948 "%s: pWdaParams received NULL", __func__);
11949 VOS_ASSERT(0);
11950 return;
11951 }
11952
11953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11954 {
11955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11956 vos_mem_free(pWdaParams->wdaMsgParam);
11957 vos_mem_free(pWdaParams);
11958 }
11959
11960 return;
11961}
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 // TODO: PE does not have this feature for now implemented,
11963 // but the support for removing beacon filter exists between
11964 // HAL and FW. This function can be called whenever PE defines
11965 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011966/*
11967 * FUNCTION: WDA_RemBeaconFilterReq
11968 * Request to WDI to send the removal of beacon filtering related information.
11969 */
11970VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11971 tRemBeaconFilterMsg* pBeaconFilterInfo)
11972{
11973 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011974 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11976 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11977 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011978 tWDA_ReqParams *pWdaParams ;
11979
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 if(NULL == wdiBeaconFilterInfo)
11983 {
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 VOS_ASSERT(0);
11987 return VOS_STATUS_E_NOMEM;
11988 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11990 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011994 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011995 vos_mem_free(wdiBeaconFilterInfo);
11996 vos_mem_free(pBeaconFilterInfo);
11997 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011998 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011999
12000 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
12001 pBeaconFilterInfo->ucIeCount;
12002 //Fill structure with info contained in the ucRemIeId
12003 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
12004 pBeaconFilterInfo->ucRemIeId,
12005 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
12006 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
12007 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012008
12009 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012010 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012012 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
12013
12014 pWdaParams->pWdaContext = pWDA;
12015
Jeff Johnson43971f52012-07-17 12:26:56 -070012016 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012017 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012018 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 {
12020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12021 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012022 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12024 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012025 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012027 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012028}
Jeff Johnson295189b2012-06-20 16:38:30 -070012029/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012030 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 *
12032 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012033void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012034{
12035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012037 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012038 if(NULL == pWdaParams)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012041 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 VOS_ASSERT(0) ;
12043 return ;
12044 }
12045
12046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12047 vos_mem_free(pWdaParams) ;
12048
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 return ;
12050}
Jeff Johnson295189b2012-06-20 16:38:30 -070012051/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012052 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
12053 * Free memory.
12054 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
12055 */
12056void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
12057{
12058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12059
12060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12061 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12062
12063 if(NULL == pWdaParams)
12064 {
12065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12066 "%s: pWdaParams received NULL", __func__);
12067 VOS_ASSERT(0);
12068 return;
12069 }
12070
12071 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12072 {
12073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12074 vos_mem_free(pWdaParams);
12075 }
12076
12077 return;
12078}
12079/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 * FUNCTION: WDA_SetRSSIThresholdsReq
12081 * Request to WDI to set the RSSI thresholds (sta mode).
12082 */
12083VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
12084{
12085 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012086 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 tWDA_CbContext *pWDA = NULL ;
12088 v_PVOID_t pVosContext = NULL;
12089 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
12090 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
12091 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
12092 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012094 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 if(NULL == wdiRSSIThresholdsInfo)
12096 {
12097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 VOS_ASSERT(0);
12100 return VOS_STATUS_E_NOMEM;
12101 }
12102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12103 if(NULL == pWdaParams)
12104 {
12105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 VOS_ASSERT(0);
12108 vos_mem_free(wdiRSSIThresholdsInfo);
12109 return VOS_STATUS_E_NOMEM;
12110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070012112 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
12113 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
12114 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
12116 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
12117 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070012118 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
12119 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
12120 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012121 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
12122 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
12124 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12125
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 /* Store param pointer as passed in by caller */
12127 /* store Params pass it to WDI */
12128 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
12129 pWdaParams->pWdaContext = pWDA;
12130 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070012131 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012132 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012133 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12136 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12139 vos_mem_free(pWdaParams) ;
12140 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012141 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012142
12143}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012144/*
Yue Madb90ac12013-04-04 13:39:13 -070012145 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012146 *
12147 */
Yue Madb90ac12013-04-04 13:39:13 -070012148void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012149{
12150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12151
12152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012153 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 if(NULL == pWdaParams)
12155 {
12156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012157 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 VOS_ASSERT(0) ;
12159 return ;
12160 }
12161
12162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12163 vos_mem_free(pWdaParams->wdaMsgParam);
12164 vos_mem_free(pWdaParams) ;
12165
12166 //print a msg, nothing else to do
12167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070012168 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012169 return ;
12170}
Jeff Johnson295189b2012-06-20 16:38:30 -070012171/*
Yue Madb90ac12013-04-04 13:39:13 -070012172 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070012173 * Free memory.
12174 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070012175 */
12176void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12177{
12178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12179
12180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12181 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12182
12183 if(NULL == pWdaParams)
12184 {
12185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12186 "%s: Invalid pWdaParams pointer", __func__);
12187 VOS_ASSERT(0);
12188 return;
12189 }
12190
12191 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12192 {
12193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12194 vos_mem_free(pWdaParams->wdaMsgParam);
12195 vos_mem_free(pWdaParams);
12196 }
12197
12198 return;
12199}
12200/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012201 * FUNCTION: WDA_ProcessHostOffloadReq
12202 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12203 * to broadcast traffic (sta mode).
12204 */
12205VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
12206 tSirHostOffloadReq *pHostOffloadParams)
12207{
12208 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012209 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012210 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
12211 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
12212 sizeof(WDI_HostOffloadReqParamsType)) ;
12213 tWDA_ReqParams *pWdaParams ;
12214
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012216 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070012217
12218 if(NULL == wdiHostOffloadInfo)
12219 {
12220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012222 VOS_ASSERT(0);
12223 return VOS_STATUS_E_NOMEM;
12224 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12226 if(NULL == pWdaParams)
12227 {
12228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012230 VOS_ASSERT(0);
12231 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012232 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012233 return VOS_STATUS_E_NOMEM;
12234 }
12235
12236 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
12237 pHostOffloadParams->offloadType;
12238 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
12239 pHostOffloadParams->enableOrDisable;
12240
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012241 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
12242 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
12243
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
12245 {
12246 case SIR_IPV4_ARP_REPLY_OFFLOAD:
12247 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
12248 pHostOffloadParams->params.hostIpv4Addr,
12249 4);
12250 break;
12251 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
12252 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12253 pHostOffloadParams->params.hostIpv6Addr,
12254 16);
12255 break;
12256 case SIR_IPV6_NS_OFFLOAD:
12257 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12258 pHostOffloadParams->params.hostIpv6Addr,
12259 16);
12260
12261#ifdef WLAN_NS_OFFLOAD
12262 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
12263 {
12264 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
12265 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
12266 16);
12267 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
12268 }
12269 else
12270 {
12271 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
12272 }
12273
12274 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
12275 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
12276 16);
12277 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
12278 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
12279 6);
12280
12281 //Only two are supported so let's go through them without a loop
12282 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
12283 {
12284 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
12285 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
12286 16);
12287 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
12288 }
12289 else
12290 {
12291 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
12292 }
12293
12294 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
12295 {
12296 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
12297 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
12298 16);
12299 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
12300 }
12301 else
12302 {
12303 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
12304 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053012305 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
12306 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 break;
12308#endif //WLAN_NS_OFFLOAD
12309 default:
12310 {
12311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12312 "No Handling for Offload Type %x in WDA "
12313 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
12314 //WDA_VOS_ASSERT(0) ;
12315 }
12316 }
Yue Madb90ac12013-04-04 13:39:13 -070012317 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
12318 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012319
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012321 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012322 /* store Params pass it to WDI */
12323 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
12324 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012325
Jeff Johnson295189b2012-06-20 16:38:30 -070012326
Jeff Johnson43971f52012-07-17 12:26:56 -070012327 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070012328 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012329
Jeff Johnson43971f52012-07-17 12:26:56 -070012330 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012331 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053012332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053012333 "Failure in host offload REQ WDI API, free all the memory %d",
12334 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070012335 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12337 vos_mem_free(pWdaParams->wdaMsgParam);
12338 vos_mem_free(pWdaParams) ;
12339 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012340 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012341
12342}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012343/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012344 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 *
12346 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012347void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012348{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12350
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012352 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012353
12354 if(NULL == pWdaParams)
12355 {
12356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012357 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012358 VOS_ASSERT(0) ;
12359 return ;
12360 }
12361
12362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12363 vos_mem_free(pWdaParams->wdaMsgParam);
12364 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012365
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 //print a msg, nothing else to do
12367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012368 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 return ;
12370}
Jeff Johnson295189b2012-06-20 16:38:30 -070012371/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012372 * FUNCTION: WDA_KeepAliveReqCallback
12373 * Free memory.
12374 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
12375 */
12376void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
12377{
12378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12379
12380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12381 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12382
12383 if(NULL == pWdaParams)
12384 {
12385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12386 "%s: pWdaParams received NULL", __func__);
12387 VOS_ASSERT(0);
12388 return;
12389 }
12390
12391 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12392 {
12393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12394 vos_mem_free(pWdaParams->wdaMsgParam);
12395 vos_mem_free(pWdaParams);
12396 }
12397
12398 return;
12399}
12400/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012401 * FUNCTION: WDA_ProcessKeepAliveReq
12402 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12403 * wakeup due to broadcast traffic (sta mode).
12404 */
12405VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12406 tSirKeepAliveReq *pKeepAliveParams)
12407{
12408 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012409 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012410 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12411 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12412 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012413 tWDA_ReqParams *pWdaParams;
12414
Abhinav Kumar31997242018-02-26 14:17:02 +053012415 vos_mem_zero(wdiKeepAliveInfo, sizeof(WDI_KeepAliveReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012418 if(NULL == wdiKeepAliveInfo)
12419 {
12420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012423 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 return VOS_STATUS_E_NOMEM;
12425 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012426
12427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12428 if(NULL == pWdaParams)
12429 {
12430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012431 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012432 VOS_ASSERT(0);
12433 vos_mem_free(wdiKeepAliveInfo);
12434 vos_mem_free(pKeepAliveParams);
12435 return VOS_STATUS_E_NOMEM;
12436 }
12437
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12439 pKeepAliveParams->packetType;
12440 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12441 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012442
12443 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12444 pKeepAliveParams->bssId,
12445 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012446
12447 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12448 {
12449 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12450 pKeepAliveParams->hostIpv4Addr,
12451 SIR_IPV4_ADDR_LEN);
12452 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12453 pKeepAliveParams->destIpv4Addr,
12454 SIR_IPV4_ADDR_LEN);
12455 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12456 pKeepAliveParams->destMacAddr,
12457 SIR_MAC_ADDR_LEN);
12458 }
12459 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12460 {
12461 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12462 SIR_IPV4_ADDR_LEN,
12463 0);
12464 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12465 SIR_IPV4_ADDR_LEN,
12466 0);
12467 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12468 SIR_MAC_ADDR_LEN,
12469 0);
12470 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012471 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12472 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012473
Jeff Johnson295189b2012-06-20 16:38:30 -070012474 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012475 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012477 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12478 pWdaParams->pWdaContext = pWDA;
12479
Jeff Johnson295189b2012-06-20 16:38:30 -070012480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12481 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12482 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12483 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12484 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12486 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12487 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12488 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12489 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12491 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12492 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12493 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12494 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12495 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12496 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12497 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12499 "TimePeriod %d PacketType %d",
12500 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12501 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012502 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012503 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012504
Jeff Johnson43971f52012-07-17 12:26:56 -070012505 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12508 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012509 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12511 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012514 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012515
12516}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012517/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012518 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 *
12520 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012521void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012522 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12523 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012524{
12525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012527 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 if(NULL == pWdaParams)
12529 {
12530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012531 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 VOS_ASSERT(0) ;
12533 return ;
12534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12536 vos_mem_free(pWdaParams->wdaMsgParam);
12537 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 return ;
12539}
Jeff Johnson295189b2012-06-20 16:38:30 -070012540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012541 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12542 * Free memory.
12543 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12544 */
12545void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12546{
12547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12548
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12550 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12551
12552 if(NULL == pWdaParams)
12553 {
12554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12555 "%s: pWdaParams received NULL", __func__);
12556 VOS_ASSERT(0);
12557 return;
12558 }
12559
12560 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12561 {
12562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12563 vos_mem_free(pWdaParams->wdaMsgParam);
12564 vos_mem_free(pWdaParams);
12565 }
12566
12567 return;
12568}
12569
12570/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012571 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12572 * Request to WDI to add WOWL Bcast pattern
12573 */
12574VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12575 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12576{
12577 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012578 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12580 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12581 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12582 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012585 if(NULL == wdiWowlAddBcPtrnInfo)
12586 {
12587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012589 VOS_ASSERT(0);
12590 return VOS_STATUS_E_NOMEM;
12591 }
12592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12593 if(NULL == pWdaParams)
12594 {
12595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012597 VOS_ASSERT(0);
12598 vos_mem_free(wdiWowlAddBcPtrnInfo);
12599 return VOS_STATUS_E_NOMEM;
12600 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12602 pWowlAddBcPtrnParams->ucPatternId;
12603 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12604 pWowlAddBcPtrnParams->ucPatternByteOffset;
12605 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12606 pWowlAddBcPtrnParams->ucPatternMaskSize;
12607 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12608 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012609 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12610 {
12611 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12612 pWowlAddBcPtrnParams->ucPattern,
12613 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12614 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12615 pWowlAddBcPtrnParams->ucPatternMask,
12616 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12617 }
12618 else
12619 {
12620 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12621 pWowlAddBcPtrnParams->ucPattern,
12622 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12623 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12624 pWowlAddBcPtrnParams->ucPatternMask,
12625 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12626
12627 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12628 pWowlAddBcPtrnParams->ucPatternExt,
12629 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12630 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12631 pWowlAddBcPtrnParams->ucPatternMaskExt,
12632 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12633 }
12634
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012635 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12636 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12637
Yue Ma7f44bbe2013-04-12 11:47:39 -070012638 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12639 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 /* Store param pointer as passed in by caller */
12641 /* store Params pass it to WDI */
12642 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12643 pWdaParams->pWdaContext = pWDA;
12644 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012645 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012646 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012647 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 {
12649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12650 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012651 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 vos_mem_free(pWdaParams->wdaMsgParam) ;
12653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12654 vos_mem_free(pWdaParams) ;
12655 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012656 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012657
12658}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012660 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012661 *
12662 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012663void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012664 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12665 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012666{
12667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012669 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 if(NULL == pWdaParams)
12671 {
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012673 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 VOS_ASSERT(0) ;
12675 return ;
12676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12678 vos_mem_free(pWdaParams->wdaMsgParam);
12679 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012680 return ;
12681}
Jeff Johnson295189b2012-06-20 16:38:30 -070012682/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012683 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12684 * Free memory.
12685 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12686 */
12687void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12688{
12689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12690
12691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12692 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12693
12694 if(NULL == pWdaParams)
12695 {
12696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12697 "%s: pWdaParams received NULL", __func__);
12698 VOS_ASSERT(0);
12699 return;
12700 }
12701
12702 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12703 {
12704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12705 vos_mem_free(pWdaParams->wdaMsgParam);
12706 vos_mem_free(pWdaParams);
12707 }
12708
12709 return;
12710}
12711/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12713 * Request to WDI to delete WOWL Bcast pattern
12714 */
12715VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12716 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12717{
12718 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012719 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12721 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12722 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12723 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012726 if(NULL == wdiWowlDelBcPtrnInfo)
12727 {
12728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 VOS_ASSERT(0);
12731 return VOS_STATUS_E_NOMEM;
12732 }
12733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12734 if(NULL == pWdaParams)
12735 {
12736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012738 VOS_ASSERT(0);
12739 vos_mem_free(wdiWowlDelBcPtrnInfo);
12740 return VOS_STATUS_E_NOMEM;
12741 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12743 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012744
12745 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12746 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12747
Yue Ma7f44bbe2013-04-12 11:47:39 -070012748 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12749 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012750 /* Store param pointer as passed in by caller */
12751 /* store Params pass it to WDI */
12752 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12753 pWdaParams->pWdaContext = pWDA;
12754 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012755 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012756 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012757 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 {
12759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12760 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012761 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012762 vos_mem_free(pWdaParams->wdaMsgParam) ;
12763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12764 vos_mem_free(pWdaParams) ;
12765 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012766 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012767
12768}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012770 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012771 *
12772 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012773void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012774{
12775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012776 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012777 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012779 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012780 if(NULL == pWdaParams)
12781 {
12782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012783 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012784 VOS_ASSERT(0) ;
12785 return ;
12786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012788 if (NULL == pWDA)
12789 {
12790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12791 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012792
12793 if(pWdaParams->wdaWdiApiMsgParam)
12794 {
12795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12796 }
12797 vos_mem_free(pWdaParams);
12798
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012799 VOS_ASSERT(0);
12800 return ;
12801 }
12802
Jeff Johnson295189b2012-06-20 16:38:30 -070012803 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12804
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012805 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12806
Jeff Johnson295189b2012-06-20 16:38:30 -070012807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12808 vos_mem_free(pWdaParams) ;
12809
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012810 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012811 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012812 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012813 return ;
12814}
Jeff Johnson295189b2012-06-20 16:38:30 -070012815/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012816 * FUNCTION: WDA_WowlEnterReqCallback
12817 * Free memory and send WOWL Enter RSP back to PE.
12818 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12819 */
12820void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12821{
12822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012823 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012824 tSirHalWowlEnterParams *pWowlEnterParams;
12825
12826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12827 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12828
12829 if(NULL == pWdaParams)
12830 {
12831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12832 "%s: pWdaParams received NULL", __func__);
12833 VOS_ASSERT(0);
12834 return;
12835 }
12836
12837 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012838 if (NULL == pWDA)
12839 {
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12841 "%s:pWDA is NULL", __func__);
12842 VOS_ASSERT(0);
12843 return ;
12844 }
12845
Yue Ma7f44bbe2013-04-12 11:47:39 -070012846 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12847 pWowlEnterParams->status = wdiStatus;
12848
12849 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12850 {
12851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12852 vos_mem_free(pWdaParams);
12853 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12854 }
12855
12856 return;
12857}
12858/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012859 * FUNCTION: WDA_ProcessWowlEnterReq
12860 * Request to WDI to enter WOWL
12861 */
12862VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12863 tSirHalWowlEnterParams *pWowlEnterParams)
12864{
12865 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012866 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12868 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12869 sizeof(WDI_WowlEnterReqParamsType)) ;
12870 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012872 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012873 if(NULL == wdiWowlEnterInfo)
12874 {
12875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012877 VOS_ASSERT(0);
12878 return VOS_STATUS_E_NOMEM;
12879 }
12880 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12881 if(NULL == pWdaParams)
12882 {
12883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012885 VOS_ASSERT(0);
12886 vos_mem_free(wdiWowlEnterInfo);
12887 return VOS_STATUS_E_NOMEM;
12888 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012889
12890 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12891
Jeff Johnson295189b2012-06-20 16:38:30 -070012892 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12893 pWowlEnterParams->magicPtrn,
12894 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012895 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12896 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12898 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12900 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12902 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012903 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12904 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12906 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012907 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12908 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12910 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012911#ifdef WLAN_WAKEUP_EVENTS
12912 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12913 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12914
12915 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12916 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12917
12918 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12919 pWowlEnterParams->ucWowNetScanOffloadMatch;
12920
12921 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12922 pWowlEnterParams->ucWowGTKRekeyError;
12923
12924 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12925 pWowlEnterParams->ucWoWBSSConnLoss;
12926#endif // WLAN_WAKEUP_EVENTS
12927
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012928 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12929 pWowlEnterParams->bssIdx;
12930
Yue Ma7f44bbe2013-04-12 11:47:39 -070012931 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12932 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012933 /* Store param pointer as passed in by caller */
12934 /* store Params pass it to WDI */
12935 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12936 pWdaParams->pWdaContext = pWDA;
12937 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012938 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012939 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012940 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 {
12942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12943 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012944 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012945 vos_mem_free(pWdaParams->wdaMsgParam) ;
12946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12947 vos_mem_free(pWdaParams) ;
12948 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012949 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012950
12951}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012953 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 *
12955 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012956void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012957{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012959 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012960 tSirHalWowlExitParams *pWowlExitParams;
12961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012962 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012963 if(NULL == pWdaParams)
12964 {
12965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012966 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012967 VOS_ASSERT(0) ;
12968 return ;
12969 }
12970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012971 if (NULL == pWDA)
12972 {
12973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12974 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012975
12976 if(pWdaParams->wdaWdiApiMsgParam)
12977 {
12978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12979 }
12980 vos_mem_free(pWdaParams);
12981
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012982 VOS_ASSERT(0);
12983 return ;
12984 }
12985
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012986 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12987
12988 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012989 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012990
12991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12992 vos_mem_free(pWdaParams) ;
12993
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012996 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012997 return ;
12998}
Jeff Johnson295189b2012-06-20 16:38:30 -070012999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013000 * FUNCTION: WDA_WowlExitReqCallback
13001 * Free memory and send WOWL Exit RSP back to PE.
13002 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
13003 */
13004void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
13005{
13006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013007 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013008 tSirHalWowlExitParams *pWowlExitParams;
13009
13010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13011 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13012
13013 if(NULL == pWdaParams)
13014 {
13015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13016 "%s: pWdaParams received NULL", __func__);
13017 VOS_ASSERT(0);
13018 return;
13019 }
13020
13021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013022 if (NULL == pWDA)
13023 {
13024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13025 "%s:pWDA is NULL", __func__);
13026 VOS_ASSERT(0);
13027 return ;
13028 }
13029
Yue Ma7f44bbe2013-04-12 11:47:39 -070013030 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
13031 pWowlExitParams->status = wdiStatus;
13032
13033 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13034 {
13035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13036 vos_mem_free(pWdaParams);
13037 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
13038 }
13039
13040 return;
13041}
13042/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 * FUNCTION: WDA_ProcessWowlExitReq
13044 * Request to WDI to add WOWL Bcast pattern
13045 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013046VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
13047 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013048{
13049 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013050 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013051 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
13052 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
13053 sizeof(WDI_WowlExitReqParamsType)) ;
13054 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013056 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013057 if(NULL == wdiWowlExitInfo)
13058 {
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013060 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013061 VOS_ASSERT(0);
13062 return VOS_STATUS_E_NOMEM;
13063 }
13064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13065 if(NULL == pWdaParams)
13066 {
13067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013068 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013069 VOS_ASSERT(0);
13070 vos_mem_free(wdiWowlExitInfo);
13071 return VOS_STATUS_E_NOMEM;
13072 }
13073
13074 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
13075 pWowlExitParams->bssIdx;
13076
Yue Ma7f44bbe2013-04-12 11:47:39 -070013077 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
13078 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013079
13080 /* Store param pointer as passed in by caller */
13081 /* store Params pass it to WDI */
13082 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
13083 pWdaParams->pWdaContext = pWDA;
13084 pWdaParams->wdaMsgParam = pWowlExitParams;
13085
13086 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013087 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013088
Jeff Johnson43971f52012-07-17 12:26:56 -070013089 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 {
13091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13092 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013093 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13095 vos_mem_free(pWdaParams->wdaMsgParam);
13096 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013097 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013098 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013099}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013100/*
13101 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
13102 * Request to WDI to determine whether a given station is capable of
13103 * using HW-based frame translation
13104 */
13105v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
13106 tANI_U8 staIdx)
13107{
13108 return WDI_IsHwFrameTxTranslationCapable(staIdx);
13109}
Katya Nigam6201c3e2014-05-27 17:51:42 +053013110
13111/*
13112 * FUNCTION: WDA_IsSelfSTA
13113 * Request to WDI to determine whether a given STAID is self station
13114 * index.
13115 */
13116v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
13117{
13118
13119 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13120
Girish Gowli05cf44e2014-06-12 21:53:37 +053013121 if (NULL != pWDA)
13122 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
13123 else
13124 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053013125}
Jeff Johnson295189b2012-06-20 16:38:30 -070013126/*
13127 * FUNCTION: WDA_NvDownloadReqCallback
13128 * send NV Download RSP back to PE
13129 */
13130void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
13131 void* pUserData)
13132{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013133
13134 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013135 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013136
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013138 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013139
13140 if(NULL == pWdaParams)
13141 {
13142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013143 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013144 VOS_ASSERT(0) ;
13145 return ;
13146 }
13147
13148 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013149 if (NULL == pWDA)
13150 {
13151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13152 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053013153
13154 if(pWdaParams->wdaWdiApiMsgParam)
13155 {
13156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13157 }
13158 vos_mem_free(pWdaParams);
13159
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013160 VOS_ASSERT(0);
13161 return ;
13162 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013163
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13166 vos_mem_free(pWdaParams);
13167
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 return ;
13170}
Jeff Johnson295189b2012-06-20 16:38:30 -070013171/*
13172 * FUNCTION: WDA_ProcessNvDownloadReq
13173 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
13174 */
13175VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
13176{
13177 /* Initialize the local Variables*/
13178 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13179 v_VOID_t *pNvBuffer=NULL;
13180 v_SIZE_t bufferSize = 0;
13181 WDI_Status status = WDI_STATUS_E_FAILURE;
13182 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013183 tWDA_ReqParams *pWdaParams ;
13184
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013186 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013187 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 {
13189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013190 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013191 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 return VOS_STATUS_E_FAILURE;
13193 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013194
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070013196 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
13197
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
13199 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013200 if(NULL == wdiNvDownloadReqParam)
13201 {
13202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 VOS_ASSERT(0);
13205 return VOS_STATUS_E_NOMEM;
13206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013207 /* Copy Params to wdiNvDownloadReqParam*/
13208 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
13209 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013210
13211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13212 if(NULL == pWdaParams)
13213 {
13214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013215 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013216 VOS_ASSERT(0);
13217 vos_mem_free(wdiNvDownloadReqParam);
13218 return VOS_STATUS_E_NOMEM;
13219 }
13220
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013222 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
13223 pWdaParams->wdaMsgParam = NULL;
13224 pWdaParams->pWdaContext = pWDA;
13225
13226
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013228
Jeff Johnson295189b2012-06-20 16:38:30 -070013229 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013230 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
13231
Jeff Johnson295189b2012-06-20 16:38:30 -070013232 if(IS_WDI_STATUS_FAILURE(status))
13233 {
13234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13235 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13237 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013239 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013240}
13241/*
13242 * FUNCTION: WDA_FlushAcReqCallback
13243 * send Flush AC RSP back to TL
13244 */
13245void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
13246{
13247 vos_msg_t wdaMsg = {0} ;
13248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13249 tFlushACReq *pFlushACReqParams;
13250 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013253 if(NULL == pWdaParams)
13254 {
13255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013257 VOS_ASSERT(0) ;
13258 return ;
13259 }
13260
13261 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
13262 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
13263 if(NULL == pFlushACRspParams)
13264 {
13265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013267 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013268 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013269 return ;
13270 }
13271 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
13272 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
13273 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
13274 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
13275 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070013276 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013277 vos_mem_free(pWdaParams->wdaMsgParam) ;
13278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13279 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013280 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
13281 wdaMsg.bodyptr = (void *)pFlushACRspParams;
13282 // POST message to TL
13283 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
13284
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 return ;
13286}
Jeff Johnson295189b2012-06-20 16:38:30 -070013287/*
13288 * FUNCTION: WDA_ProcessFlushAcReq
13289 * Request to WDI to Update the DELBA REQ params.
13290 */
13291VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
13292 tFlushACReq *pFlushAcReqParams)
13293{
13294 WDI_Status status = WDI_STATUS_SUCCESS ;
13295 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
13296 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
13297 sizeof(WDI_FlushAcReqParamsType)) ;
13298 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 if(NULL == wdiFlushAcReqParam)
13300 {
13301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 VOS_ASSERT(0);
13304 return VOS_STATUS_E_NOMEM;
13305 }
13306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13307 if(NULL == pWdaParams)
13308 {
13309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 VOS_ASSERT(0);
13312 vos_mem_free(wdiFlushAcReqParam);
13313 return VOS_STATUS_E_NOMEM;
13314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013316 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
13318 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
13319 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
13320 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 /* Store Flush AC pointer, as this will be used for response */
13322 /* store Params pass it to WDI */
13323 pWdaParams->pWdaContext = pWDA;
13324 pWdaParams->wdaMsgParam = pFlushAcReqParams;
13325 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 status = WDI_FlushAcReq(wdiFlushAcReqParam,
13327 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 if(IS_WDI_STATUS_FAILURE(status))
13329 {
13330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13331 "Failure in Flush AC REQ Params WDI API, free all the memory " );
13332 vos_mem_free(pWdaParams->wdaMsgParam) ;
13333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13334 vos_mem_free(pWdaParams) ;
13335 //TODO: respond to TL with failure
13336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013338}
Jeff Johnson295189b2012-06-20 16:38:30 -070013339/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013340 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 *
13342 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013343void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013344{
13345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013346 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013347 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013348
13349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013351 if(NULL == pWdaParams)
13352 {
13353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013355 VOS_ASSERT(0) ;
13356 return ;
13357 }
13358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013359 if (NULL == pWDA)
13360 {
13361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13362 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053013363 vos_mem_free(pWdaParams->wdaMsgParam) ;
13364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13365 vos_mem_free(pWdaParams) ;
13366
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013367 VOS_ASSERT(0);
13368 return ;
13369 }
13370
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13372 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13373 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13374 {
13375 pWDA->wdaAmpSessionOn = VOS_FALSE;
13376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 vos_mem_free(pWdaParams->wdaMsgParam) ;
13378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13379 vos_mem_free(pWdaParams) ;
13380 /*
13381 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13382 * param here
13383 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013384 return ;
13385}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013386/*
13387 * FUNCTION: WDA_BtAmpEventReqCallback
13388 * Free memory.
13389 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13390 */
13391void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13392{
13393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013394 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013395 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013396
Yue Ma7f44bbe2013-04-12 11:47:39 -070013397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13398 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13399
13400 if(NULL == pWdaParams)
13401 {
13402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13403 "%s: pWdaParams received NULL", __func__);
13404 VOS_ASSERT(0);
13405 return;
13406 }
13407
13408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013409 if (NULL == pWDA)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13412 "%s:pWDA is NULL", __func__);
13413 VOS_ASSERT(0);
13414 return ;
13415 }
13416
Yue Ma7f44bbe2013-04-12 11:47:39 -070013417 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13418
13419 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13420 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13421 {
13422 pWDA->wdaAmpSessionOn = VOS_FALSE;
13423 }
13424
13425 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13426 {
13427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13428 vos_mem_free(pWdaParams->wdaMsgParam);
13429 vos_mem_free(pWdaParams);
13430 }
13431
13432 return;
13433}
Jeff Johnson295189b2012-06-20 16:38:30 -070013434/*
13435 * FUNCTION: WDA_ProcessBtAmpEventReq
13436 * Request to WDI to Update with BT AMP events.
13437 */
13438VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13439 tSmeBtAmpEvent *pBtAmpEventParams)
13440{
13441 WDI_Status status = WDI_STATUS_SUCCESS ;
13442 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13443 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13444 sizeof(WDI_BtAmpEventParamsType)) ;
13445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013448 if(NULL == wdiBtAmpEventParam)
13449 {
13450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 VOS_ASSERT(0);
13453 return VOS_STATUS_E_NOMEM;
13454 }
13455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13456 if(NULL == pWdaParams)
13457 {
13458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 VOS_ASSERT(0);
13461 vos_mem_free(wdiBtAmpEventParam);
13462 return VOS_STATUS_E_NOMEM;
13463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013464 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13465 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013466 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13467 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 /* Store BT AMP event pointer, as this will be used for response */
13469 /* store Params pass it to WDI */
13470 pWdaParams->pWdaContext = pWDA;
13471 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13472 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013474 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013475 if(IS_WDI_STATUS_FAILURE(status))
13476 {
13477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13478 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13479 vos_mem_free(pWdaParams->wdaMsgParam) ;
13480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13481 vos_mem_free(pWdaParams) ;
13482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013483 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13484 {
13485 pWDA->wdaAmpSessionOn = VOS_TRUE;
13486 }
13487 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013488}
13489
Jeff Johnson295189b2012-06-20 16:38:30 -070013490/*
13491 * FUNCTION: WDA_FTMCommandReqCallback
13492 * Handle FTM CMD response came from HAL
13493 * Route responce to HDD FTM
13494 */
13495void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13496 void *usrData)
13497{
13498 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13500 {
13501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070013502 "%s, invalid input %pK, %pK",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013503 return;
13504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 /* Release Current FTM Command Request */
13506 vos_mem_free(pWDA->wdaFTMCmdReq);
13507 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013508 /* Post FTM Responce to HDD FTM */
13509 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 return;
13511}
Jeff Johnson295189b2012-06-20 16:38:30 -070013512/*
13513 * FUNCTION: WDA_ProcessFTMCommand
13514 * Send FTM command to WDI
13515 */
13516VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13517 tPttMsgbuffer *pPTTFtmCmd)
13518{
13519 WDI_Status status = WDI_STATUS_SUCCESS;
13520 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013521 ftmCMDReq = (WDI_FTMCommandReqType *)
13522 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13523 if(NULL == ftmCMDReq)
13524 {
13525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13526 "WDA FTM Command buffer alloc fail");
13527 return VOS_STATUS_E_NOMEM;
13528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013529 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13530 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013531 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 /* Send command to WDI */
13533 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013534 return status;
13535}
Jeff Johnsone7245742012-09-05 17:12:55 -070013536#ifdef FEATURE_OEM_DATA_SUPPORT
13537/*
13538 * FUNCTION: WDA_StartOemDataReqCallback
13539 *
13540 */
13541void WDA_StartOemDataReqCallback(
13542 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13543 void* pUserData)
13544{
13545 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013547 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013548 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013549
Jeff Johnsone7245742012-09-05 17:12:55 -070013550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013551 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013552
13553 if(NULL == pWdaParams)
13554 {
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013556 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013557 VOS_ASSERT(0) ;
13558 return ;
13559 }
13560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13561
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013562 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013565 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013566 VOS_ASSERT(0);
13567 return ;
13568 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013569
Jeff Johnsone7245742012-09-05 17:12:55 -070013570 /*
13571 * Allocate memory for response params sent to PE
13572 */
13573 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13574
13575 // Check if memory is allocated for OemdataMeasRsp Params.
13576 if(NULL == pOemDataRspParams)
13577 {
13578 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13579 "OEM DATA WDA callback alloc fail");
13580 VOS_ASSERT(0) ;
13581 return;
13582 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013583
Jeff Johnsone7245742012-09-05 17:12:55 -070013584 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13586 vos_mem_free(pWdaParams->wdaMsgParam);
13587 vos_mem_free(pWdaParams) ;
13588
Jeff Johnsone7245742012-09-05 17:12:55 -070013589 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013590 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013591 * Also, here success always means that we have atleast one BSSID.
13592 */
13593 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13594
13595 //enable Tx
13596 status = WDA_ResumeDataTx(pWDA);
13597 if(status != VOS_STATUS_SUCCESS)
13598 {
13599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13600 }
13601 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13602 return ;
13603}
13604/*
13605 * FUNCTION: WDA_ProcessStartOemDataReq
13606 * Send Start Oem Data Req to WDI
13607 */
13608VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13609 tStartOemDataReq *pOemDataReqParams)
13610{
13611 WDI_Status status = WDI_STATUS_SUCCESS;
13612 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013613 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013614
13615 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13616
13617 if(NULL == wdiOemDataReqParams)
13618 {
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013621 VOS_ASSERT(0);
13622 return VOS_STATUS_E_NOMEM;
13623 }
13624
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013625 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13626 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13627 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13628 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013629
13630 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13631
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13633 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013634 {
13635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013637 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013638 vos_mem_free(pOemDataReqParams);
13639 VOS_ASSERT(0);
13640 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013641 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013642
Bernald44a1ae2013-01-09 08:30:39 -080013643 pWdaParams->pWdaContext = (void*)pWDA;
13644 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13645 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013646
13647 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13648 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013649
13650 if(IS_WDI_STATUS_FAILURE(status))
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13653 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13655 vos_mem_free(pWdaParams->wdaMsgParam);
13656 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013657 }
13658 return CONVERT_WDI2VOS_STATUS(status) ;
13659}
13660#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013661/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013662 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013663 *
13664 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013665void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013666{
13667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013669 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 if(NULL == pWdaParams)
13671 {
13672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013673 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 VOS_ASSERT(0) ;
13675 return ;
13676 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013677
13678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13679 vos_mem_free(pWdaParams->wdaMsgParam);
13680 vos_mem_free(pWdaParams);
13681
13682 return ;
13683}
13684/*
13685 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13686 * Free memory.
13687 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13688 */
13689void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13690{
13691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13692
13693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13694 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13695
13696 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013697 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13699 "%s: pWdaParams received NULL", __func__);
13700 VOS_ASSERT(0);
13701 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013702 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013703
13704 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013705 {
13706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013707 vos_mem_free(pWdaParams->wdaMsgParam);
13708 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013709 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013710
13711 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013712}
Jeff Johnson295189b2012-06-20 16:38:30 -070013713#ifdef WLAN_FEATURE_GTK_OFFLOAD
13714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013715 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 *
13717 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013718void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013719 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013720{
13721 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13722
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013724 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013725 if(NULL == pWdaParams)
13726 {
13727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13728 "%s: pWdaParams received NULL", __func__);
13729 VOS_ASSERT(0);
13730 return;
13731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013732
Jeff Johnson295189b2012-06-20 16:38:30 -070013733 vos_mem_free(pWdaParams->wdaMsgParam) ;
13734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13735 vos_mem_free(pWdaParams) ;
13736
13737 //print a msg, nothing else to do
13738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013739 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013740
13741 return ;
13742}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013743/*
13744 * FUNCTION: WDA_GTKOffloadReqCallback
13745 * Free memory.
13746 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13747 */
13748void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13749{
13750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013751
Yue Ma7f44bbe2013-04-12 11:47:39 -070013752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13753 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13754
13755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13758 "%s: pWdaParams received NULL", __func__);
13759 VOS_ASSERT(0);
13760 return;
13761 }
13762
13763 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13764 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013765 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13766 sizeof(WDI_GtkOffloadReqMsg));
13767 vos_mem_zero(pWdaParams->wdaMsgParam,
13768 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13770 vos_mem_free(pWdaParams->wdaMsgParam);
13771 vos_mem_free(pWdaParams);
13772 }
13773
13774 return;
13775}
Jeff Johnson295189b2012-06-20 16:38:30 -070013776/*
13777 * FUNCTION: WDA_ProcessGTKOffloadReq
13778 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13779 * to broadcast traffic (sta mode).
13780 */
13781VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13782 tpSirGtkOffloadParams pGtkOffloadParams)
13783{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013784 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13786 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13787 sizeof(WDI_GtkOffloadReqMsg)) ;
13788 tWDA_ReqParams *pWdaParams ;
13789
13790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013792
13793 if(NULL == wdiGtkOffloadReqMsg)
13794 {
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013796 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 VOS_ASSERT(0);
13798 return VOS_STATUS_E_NOMEM;
13799 }
13800
13801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13802 if(NULL == pWdaParams)
13803 {
13804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 VOS_ASSERT(0);
13807 vos_mem_free(wdiGtkOffloadReqMsg);
13808 return VOS_STATUS_E_NOMEM;
13809 }
13810
13811 //
13812 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13813 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013814
13815 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013816 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013817
Jeff Johnson295189b2012-06-20 16:38:30 -070013818 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13819 // Copy KCK
13820 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13821 // Copy KEK
13822 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13823 // Copy KeyReplayCounter
13824 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13825 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13826
Yue Ma7f44bbe2013-04-12 11:47:39 -070013827 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13828 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013829
Jeff Johnson295189b2012-06-20 16:38:30 -070013830
13831 /* Store Params pass it to WDI */
13832 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13833 pWdaParams->pWdaContext = pWDA;
13834 /* Store param pointer as passed in by caller */
13835 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13836
Yue Ma7f44bbe2013-04-12 11:47:39 -070013837 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013838
13839 if(IS_WDI_STATUS_FAILURE(status))
13840 {
13841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13842 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013843 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13844 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13846 vos_mem_free(pWdaParams->wdaMsgParam);
13847 vos_mem_free(pWdaParams);
13848 }
13849
13850 return CONVERT_WDI2VOS_STATUS(status) ;
13851}
13852
13853/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013854 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 *
13856 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013857void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013858 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013859{
13860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13861 tWDA_CbContext *pWDA;
13862 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013863 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 vos_msg_t vosMsg;
13865
13866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013867 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013868
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013869 if(NULL == pWdaParams)
13870 {
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13872 "%s: pWdaParams received NULL", __func__);
13873 VOS_ASSERT(0);
13874 return;
13875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013876
Nirav Shah374de6e2014-02-13 16:40:01 +053013877 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13878 if(NULL == pGtkOffloadGetInfoRsp)
13879 {
13880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13881 "%s: vos_mem_malloc failed ", __func__);
13882 VOS_ASSERT(0);
13883 return;
13884 }
13885
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13887 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13888
13889 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13890 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13891
13892 /* Message Header */
13893 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013894 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013895
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013896 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13897 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13898 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13899 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13900 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013901
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013902 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13903 pwdiGtkOffloadGetInfoRsparams->bssId,
13904 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013905 /* VOS message wrapper */
13906 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13907 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13908 vosMsg.bodyval = 0;
13909
13910 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13911 {
13912 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013913 vos_mem_zero(pGtkOffloadGetInfoRsp,
13914 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13916 }
13917
13918 vos_mem_free(pWdaParams->wdaMsgParam) ;
13919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13920 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013921
13922 return;
13923}
13924/*
13925 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13926 * Free memory and send RSP back to SME.
13927 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13928 */
13929void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13930{
13931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13932 vos_msg_t vosMsg;
13933
13934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13935 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13936
13937 if(NULL == pWdaParams)
13938 {
13939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13940 "%s: pWdaParams received NULL", __func__);
13941 VOS_ASSERT(0);
13942 return;
13943 }
13944
13945 /* VOS message wrapper */
13946 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13947 vosMsg.bodyptr = NULL;
13948 vosMsg.bodyval = 0;
13949
13950 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13951 {
13952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13953 vos_mem_free(pWdaParams->wdaMsgParam);
13954 vos_mem_free(pWdaParams);
13955 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13956 }
13957
13958 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013959}
13960#endif
13961
13962/*
13963 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13964 * Request to WDI to set Tx Per Tracking configurations
13965 */
13966VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13967{
13968 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013969 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13971 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13972 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13973 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013975 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013976 if(NULL == pwdiSetTxPerTrackingReqParams)
13977 {
13978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 vos_mem_free(pTxPerTrackingParams);
13981 VOS_ASSERT(0);
13982 return VOS_STATUS_E_NOMEM;
13983 }
13984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13985 if(NULL == pWdaParams)
13986 {
13987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13990 vos_mem_free(pTxPerTrackingParams);
13991 VOS_ASSERT(0);
13992 return VOS_STATUS_E_NOMEM;
13993 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13995 pTxPerTrackingParams->ucTxPerTrackingEnable;
13996 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13997 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13998 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13999 pTxPerTrackingParams->ucTxPerTrackingRatio;
14000 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
14001 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014002 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
14003 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014004 /* Store param pointer as passed in by caller */
14005 /* store Params pass it to WDI
14006 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
14007 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
14008 pWdaParams->pWdaContext = pWDA;
14009 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070014010 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014011 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070014012 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070014013 {
14014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14015 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070014016 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 vos_mem_free(pWdaParams->wdaMsgParam) ;
14018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14019 vos_mem_free(pWdaParams) ;
14020 }
Jeff Johnson43971f52012-07-17 12:26:56 -070014021 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014022
14023}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014024/*
14025 * FUNCTION: WDA_HALDumpCmdCallback
14026 * Send the VOS complete .
14027 */
14028void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
14029 void* pUserData)
14030{
14031 tANI_U8 *buffer = NULL;
14032 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053014033 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014034 if(NULL == pWdaParams)
14035 {
14036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014037 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014038 VOS_ASSERT(0) ;
14039 return ;
14040 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014041
Sravan Kumar Kairamd400d962017-12-13 12:29:48 +053014042 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14043 "%s: WDA HALDUMP Rsp Received async: %d",
14044 __func__, pWdaParams->wdaHALDumpAsync);
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014045
Jeff Johnson295189b2012-06-20 16:38:30 -070014046 pWDA = pWdaParams->pWdaContext;
14047 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014048 if(wdiRspParams->usBufferLen > 0)
14049 {
14050 /*Copy the Resp data to UMAC supplied buffer*/
14051 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
14052 }
Siddharth Bhal68115602015-01-18 20:44:55 +053014053
14054 if (!pWdaParams->wdaHALDumpAsync)
14055 {/* Indicate VOSS about the start complete */
14056 vos_WDAComplete_cback(pWDA->pVosContext);
14057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014060 return ;
14061}
14062
Jeff Johnson295189b2012-06-20 16:38:30 -070014063/*
14064 * FUNCTION: WDA_ProcessHALDumpCmdReq
14065 * Send Dump command to WDI
14066 */
14067VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
14068 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053014069 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014070{
14071 WDI_Status status = WDI_STATUS_SUCCESS;
14072 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
14073 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053014074 tWDA_HalDumpReqParams *pWdaParams ;
14075
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 pVosContextType pVosContext = NULL;
14077 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014078 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
14079 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053014080 if(pVosContext)
14081 {
14082 if (pVosContext->isLogpInProgress)
14083 {
14084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
14085 "%s:LOGP in Progress. Ignore!!!", __func__);
14086 return VOS_STATUS_E_BUSY;
14087 }
14088 }
14089 else
14090 {
14091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14092 "%s: VOS Context Null", __func__);
14093 return VOS_STATUS_E_RESOURCES;
14094 }
14095
Siddharth Bhal68115602015-01-18 20:44:55 +053014096 if (NULL == pVosContext->pWDAContext)
14097 {
14098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14099 "%s: WDA Context Null", __func__);
14100 return VOS_STATUS_E_RESOURCES;
14101 }
Sravan Kumar Kairamd400d962017-12-13 12:29:48 +053014102
14103 vStatus = vos_event_reset(&(pVosContext->wdaCompleteEvent));
14104 if (VOS_STATUS_SUCCESS != vStatus)
14105 {
14106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14107 "%s: Event reset failed - status %d", __func__, vStatus);
14108 return VOS_STATUS_E_FAILURE;
14109 }
14110
Siddharth Bhal68115602015-01-18 20:44:55 +053014111 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014112 if(NULL == pWdaParams)
14113 {
14114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014116 return VOS_STATUS_E_NOMEM;
14117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 /* Allocate memory WDI request structure*/
14119 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
14120 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
14121 if(NULL == wdiHALDumpCmdReqParam)
14122 {
14123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14124 "WDA HAL DUMP Command buffer alloc fail");
14125 vos_mem_free(pWdaParams);
14126 return WDI_STATUS_E_FAILURE;
14127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014128 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070014129 /* Extract the arguments */
14130 wdiHalDumpCmdInfo->command = cmd;
14131 wdiHalDumpCmdInfo->argument1 = arg1;
14132 wdiHalDumpCmdInfo->argument2 = arg2;
14133 wdiHalDumpCmdInfo->argument3 = arg3;
14134 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070014135 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053014137 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070014138
14139 /* Response message will be passed through the buffer */
14140 pWdaParams->wdaMsgParam = (void *)pBuffer;
14141
14142 /* store Params pass it to WDI */
14143 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014144
14145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14146 "%s: WDA HAL DUMP Command sent",__func__);
14147
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053014149 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
14150 pWdaParams);
14151 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
14152 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014153 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014154 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
14155 WDA_DUMPCMD_WAIT_TIMEOUT );
14156 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070014157 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014158 if ( vStatus == VOS_STATUS_E_TIMEOUT )
14159 {
14160 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14161 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
14162 }
14163 else
14164 {
14165 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14166 "%s: WDA_HALDUMP reporting other error",__func__);
14167 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053014168 if (!(vos_isLoadUnloadInProgress() ||
14169 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
14170 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014172 }
14173 return status;
14174}
Jeff Johnson295189b2012-06-20 16:38:30 -070014175#ifdef WLAN_FEATURE_GTK_OFFLOAD
14176/*
14177 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
14178 * Request to WDI to get GTK Offload Information
14179 */
14180VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
14181 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
14182{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014183 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014184 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
14185 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
14186 tWDA_ReqParams *pWdaParams ;
14187
14188 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
14189 {
14190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014192 VOS_ASSERT(0);
14193 return VOS_STATUS_E_NOMEM;
14194 }
14195
14196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14197 if(NULL == pWdaParams)
14198 {
14199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014201 VOS_ASSERT(0);
14202 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
14203 return VOS_STATUS_E_NOMEM;
14204 }
14205
Yue Ma7f44bbe2013-04-12 11:47:39 -070014206 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
14207 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014208
Jeff Johnson295189b2012-06-20 16:38:30 -070014209 /* Store Params pass it to WDI */
14210 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
14211 pWdaParams->pWdaContext = pWDA;
14212 /* Store param pointer as passed in by caller */
14213 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
14214
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014215 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014216 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014217
Yue Ma7f44bbe2013-04-12 11:47:39 -070014218 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014219
14220 if(IS_WDI_STATUS_FAILURE(status))
14221 {
14222 /* failure returned by WDI API */
14223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14224 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
14225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14226 vos_mem_free(pWdaParams) ;
14227 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
14228 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
14229 }
14230
14231 return CONVERT_WDI2VOS_STATUS(status) ;
14232}
14233#endif // WLAN_FEATURE_GTK_OFFLOAD
14234
14235/*
Yue Mab9c86f42013-08-14 15:59:08 -070014236 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
14237 *
14238 */
14239VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14240 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
14241{
14242 WDI_Status wdiStatus;
14243 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
14244
14245 addPeriodicTxPtrnParams =
14246 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
14247
14248 if (NULL == addPeriodicTxPtrnParams)
14249 {
14250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14251 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
14252 __func__);
14253
14254 return VOS_STATUS_E_NOMEM;
14255 }
14256
14257 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
14258 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
14259
14260 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14261 addPeriodicTxPtrnParams->pUserData = pWDA;
14262
14263 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
14264
14265 if (WDI_STATUS_PENDING == wdiStatus)
14266 {
14267 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14268 "Pending received for %s:%d", __func__, __LINE__ );
14269 }
14270 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14271 {
14272 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14273 "Failure in %s:%d", __func__, __LINE__ );
14274 }
14275
14276 vos_mem_free(addPeriodicTxPtrnParams);
14277
14278 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14279}
14280
14281/*
14282 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
14283 *
14284 */
14285VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14286 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
14287{
14288 WDI_Status wdiStatus;
14289 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
14290
14291 delPeriodicTxPtrnParams =
14292 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
14293
14294 if (NULL == delPeriodicTxPtrnParams)
14295 {
14296 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14297 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
14298 __func__);
14299
14300 return VOS_STATUS_E_NOMEM;
14301 }
14302
14303 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
14304 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
14305
14306 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14307 delPeriodicTxPtrnParams->pUserData = pWDA;
14308
14309 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
14310
14311 if (WDI_STATUS_PENDING == wdiStatus)
14312 {
14313 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14314 "Pending received for %s:%d", __func__, __LINE__ );
14315 }
14316 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14317 {
14318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14319 "Failure in %s:%d", __func__, __LINE__ );
14320 }
14321
14322 vos_mem_free(delPeriodicTxPtrnParams);
14323
14324 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14325}
14326
Abhishek Singh00b71972016-01-07 10:51:04 +053014327/*
14328 * FUNCTION: WDA_ProcessRateUpdateInd
14329 *
14330 */
14331VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
14332 tSirRateUpdateInd *pRateUpdateParams)
14333{
14334 WDI_Status wdiStatus;
14335 WDI_RateUpdateIndParams rateUpdateParams;
14336
14337 vos_mem_copy(rateUpdateParams.bssid,
14338 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
14339
14340 rateUpdateParams.ucastDataRateTxFlag =
14341 pRateUpdateParams->ucastDataRateTxFlag;
14342 rateUpdateParams.rmcDataRateTxFlag =
14343 pRateUpdateParams->rmcDataRateTxFlag;
14344 rateUpdateParams.mcastDataRate24GHzTxFlag =
14345 pRateUpdateParams->mcastDataRate24GHzTxFlag;
14346 rateUpdateParams.mcastDataRate5GHzTxFlag =
14347 pRateUpdateParams->mcastDataRate5GHzTxFlag;
14348
14349 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
14350 rateUpdateParams.rmcDataRate =
14351 pRateUpdateParams->rmcDataRate;
14352 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
14353 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
14354
14355 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14356 rateUpdateParams.pUserData = pWDA;
14357
14358 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
14359
14360 if (WDI_STATUS_PENDING == wdiStatus)
14361 {
14362 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14363 "Pending received for %s:%d", __func__, __LINE__ );
14364 }
14365 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14366 {
14367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14368 "Failure in %s:%d", __func__, __LINE__ );
14369 }
14370
14371 vos_mem_free(pRateUpdateParams);
14372
14373 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14374}
14375
14376
Rajeev79dbe4c2013-10-05 11:03:42 +053014377#ifdef FEATURE_WLAN_BATCH_SCAN
14378/*
14379 * FUNCTION: WDA_ProcessStopBatchScanInd
14380 *
14381 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
14382 *
14383 * PARAM:
14384 * pWDA: pointer to WDA context
14385 * pReq: pointer to stop batch scan request
14386 */
14387VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
14388 tSirStopBatchScanInd *pReq)
14389{
14390 WDI_Status wdiStatus;
14391 WDI_StopBatchScanIndType wdiReq;
14392
14393 wdiReq.param = pReq->param;
14394
14395 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14396
14397 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14398 {
14399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14400 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14401 }
14402
14403 vos_mem_free(pReq);
14404
14405 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14406}
14407/*==========================================================================
14408 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14409
14410 DESCRIPTION
14411 API to pull batch scan result from FW
14412
14413 PARAMETERS
14414 pWDA: Pointer to WDA context
14415 pGetBatchScanReq: Pointer to get batch scan result indication
14416
14417 RETURN VALUE
14418 NONE
14419
14420===========================================================================*/
14421VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14422 tSirTriggerBatchScanResultInd *pReq)
14423{
14424 WDI_Status wdiStatus;
14425 WDI_TriggerBatchScanResultIndType wdiReq;
14426
14427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14428 "------> %s " ,__func__);
14429
14430 wdiReq.param = pReq->param;
14431
14432 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14433
14434 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14435 {
14436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14437 "Trigger batch scan result ind failed %s:%d",
14438 __func__, wdiStatus);
14439 }
14440
14441 vos_mem_free(pReq);
14442
14443 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14444}
14445
14446/*==========================================================================
14447 FUNCTION WDA_SetBatchScanRespCallback
14448
14449 DESCRIPTION
14450 API to process set batch scan response from FW
14451
14452 PARAMETERS
14453 pRsp: Pointer to set batch scan response
14454 pUserData: Pointer to user data
14455
14456 RETURN VALUE
14457 NONE
14458
14459===========================================================================*/
14460void WDA_SetBatchScanRespCallback
14461(
14462 WDI_SetBatchScanRspType *pRsp,
14463 void* pUserData
14464)
14465{
14466 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14467 tpAniSirGlobal pMac;
14468 void *pCallbackContext;
14469 tWDA_CbContext *pWDA = NULL ;
14470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14471
14472
14473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14474 "<------ %s " ,__func__);
14475 if (NULL == pWdaParams)
14476 {
14477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14478 "%s: pWdaParams received NULL", __func__);
14479 VOS_ASSERT(0) ;
14480 return ;
14481 }
14482
14483 /*extract WDA context*/
14484 pWDA = pWdaParams->pWdaContext;
14485 if (NULL == pWDA)
14486 {
14487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14488 "%s:pWDA is NULL can't invole HDD callback",
14489 __func__);
14490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14491 vos_mem_free(pWdaParams->wdaMsgParam);
14492 vos_mem_free(pWdaParams);
14493 VOS_ASSERT(0);
14494 return;
14495 }
14496
14497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14498 vos_mem_free(pWdaParams->wdaMsgParam);
14499 vos_mem_free(pWdaParams);
14500
14501 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14502 if (NULL == pMac)
14503 {
14504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14505 "%s:pMac is NULL", __func__);
14506 VOS_ASSERT(0);
14507 return;
14508 }
14509
14510 pHddSetBatchScanRsp =
14511 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14512 if (NULL == pHddSetBatchScanRsp)
14513 {
14514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14515 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14516 VOS_ASSERT(0);
14517 return;
14518 }
14519
14520 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14521
14522 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14523 /*call hdd callback with set batch scan response data*/
14524 if(pMac->pmc.setBatchScanReqCallback)
14525 {
14526 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14527 }
14528 else
14529 {
14530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14531 "%s:HDD callback is null", __func__);
14532 VOS_ASSERT(0);
14533 }
14534
14535 vos_mem_free(pHddSetBatchScanRsp);
14536 return ;
14537}
14538
14539/*==========================================================================
14540 FUNCTION WDA_ProcessSetBatchScanReq
14541
14542 DESCRIPTION
14543 API to send set batch scan request to WDI
14544
14545 PARAMETERS
14546 pWDA: Pointer to WDA context
14547 pSetBatchScanReq: Pointer to set batch scan req
14548
14549 RETURN VALUE
14550 NONE
14551
14552===========================================================================*/
14553VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14554 tSirSetBatchScanReq *pSetBatchScanReq)
14555{
14556 WDI_Status status;
14557 tWDA_ReqParams *pWdaParams ;
14558 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14559
14560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14561 "------> %s " ,__func__);
14562
14563 pWdiSetBatchScanReq =
14564 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14565 if (NULL == pWdiSetBatchScanReq)
14566 {
14567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14568 "%s: VOS MEM Alloc Failure", __func__);
14569 vos_mem_free(pSetBatchScanReq);
14570 VOS_ASSERT(0);
14571 return VOS_STATUS_E_NOMEM;
14572 }
14573
14574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14575 if (NULL == pWdaParams)
14576 {
14577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14578 "%s: VOS MEM Alloc Failure", __func__);
14579 VOS_ASSERT(0);
14580 vos_mem_free(pSetBatchScanReq);
14581 vos_mem_free(pWdiSetBatchScanReq);
14582 return VOS_STATUS_E_NOMEM;
14583 }
14584
14585 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14586 pWdiSetBatchScanReq->numberOfScansToBatch =
14587 pSetBatchScanReq->numberOfScansToBatch;
14588 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14589 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14590 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14591
14592 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14593 pWdaParams->pWdaContext = pWDA;
14594 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14595
14596 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14597 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14598 if (IS_WDI_STATUS_FAILURE(status))
14599 {
14600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14601 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14603 vos_mem_free(pWdaParams->wdaMsgParam);
14604 vos_mem_free(pWdaParams);
14605 }
14606 return CONVERT_WDI2VOS_STATUS(status);
14607}
14608
14609#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014610/*
14611 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14612 *
14613 * DESCRIPTION: This function sends start/update OBSS scan
14614 * inidcation message to WDI
14615 *
14616 * PARAM:
14617 * pWDA: pointer to WDA context
14618 * pReq: pointer to start OBSS scan request
14619 */
14620VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14621 tSirHT40OBSSScanInd *pReq)
14622{
14623 WDI_Status status;
14624 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14625 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014626
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14628 "------> %s " ,__func__);
14629 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14630 wdiOBSSScanParams.pUserData = pWDA;
14631
14632 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14633 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14634 pWdiOBSSScanInd->scanType = pReq->scanType;
14635 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14636 pReq->OBSSScanActiveDwellTime;
14637 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14638 pReq->OBSSScanPassiveDwellTime;
14639 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14640 pReq->BSSChannelWidthTriggerScanInterval;
14641 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14642 pReq->BSSWidthChannelTransitionDelayFactor;
14643 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14644 pReq->OBSSScanActiveTotalPerChannel;
14645 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14646 pReq->OBSSScanPassiveTotalPerChannel;
14647 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14648 pReq->OBSSScanActivityThreshold;
14649 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14650 vos_mem_copy(pWdiOBSSScanInd->channels,
14651 pReq->channels,
14652 pReq->channelCount);
14653 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14654 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14655 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14656 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14657 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14658
14659 vos_mem_copy(pWdiOBSSScanInd->ieField,
14660 pReq->ieField,
14661 pReq->ieFieldLen);
14662
14663 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14664 if (WDI_STATUS_PENDING == status)
14665 {
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14667 "Pending received for %s:%d ",__func__,__LINE__ );
14668 }
14669 else if (WDI_STATUS_SUCCESS_SYNC != status)
14670 {
14671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14672 "Failure in %s:%d ",__func__,__LINE__ );
14673 }
14674 return CONVERT_WDI2VOS_STATUS(status) ;
14675}
14676/*
14677 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14678 *
14679 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14680 *
14681 * PARAM:
14682 * pWDA: pointer to WDA context
14683 * pReq: pointer to stop batch scan request
14684 */
14685VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14686 tANI_U8 *bssIdx)
14687{
14688 WDI_Status status;
14689
14690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14691 "------> %s " ,__func__);
14692
14693 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14694 if (WDI_STATUS_PENDING == status)
14695 {
14696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14697 "Pending received for %s:%d ",__func__,__LINE__ );
14698 }
14699 else if (WDI_STATUS_SUCCESS_SYNC != status)
14700 {
14701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14702 "Failure in %s:%d ",__func__,__LINE__ );
14703 }
14704 return CONVERT_WDI2VOS_STATUS(status) ;
14705}
Yue Mab9c86f42013-08-14 15:59:08 -070014706/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 * -------------------------------------------------------------------------
14708 * DATA interface with WDI for Mgmt Frames
14709 * -------------------------------------------------------------------------
14710 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014711/*
14712 * FUNCTION: WDA_TxComplete
14713 * Callback function for the WDA_TxPacket
14714 */
14715VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14716 VOS_STATUS status )
14717{
14718
14719 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14720 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014721 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014722
Mihir Shete63341222015-03-24 15:39:18 +053014723 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14724
Jeff Johnson295189b2012-06-20 16:38:30 -070014725 if(NULL == wdaContext)
14726 {
14727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14728 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014729 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014730 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014731 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014732 return VOS_STATUS_E_FAILURE;
14733 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014734
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014735 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014736 /*Check if frame was timed out or not*/
14737 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14738 (v_PVOID_t)&uUserData);
14739
14740 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14741 {
14742 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14744 "%s: MGMT Frame Tx timed out",
14745 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014746 vos_pkt_return_packet(pData);
14747 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014748 return VOS_STATUS_SUCCESS;
14749 }
14750
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14752 if( NULL!=wdaContext->pTxCbFunc)
14753 {
14754 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014755 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014756 {
14757 wdaContext->pTxCbFunc(pMac, pData);
14758 }
14759 else
14760 {
14761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014762 "%s:packet (%pK) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014763 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014764 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014765 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014766 return status;
14767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014768 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014769 else {
14770 wdaContext->mgmt_pktfree_fail++;
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014772 "%s:packet (%pK) userData (%lx) is not freed",
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014773 __func__, pData, uUserData);
14774 }
14775 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014776
14777 /*
14778 * Trigger the event to bring the HAL TL Tx complete function to come
14779 * out of wait
14780 * Let the coe above to complete the packet first. When this event is set,
14781 * the thread waiting for the event may run and set Vospacket_freed causing the original
14782 * packet not being freed.
14783 */
14784 status = vos_event_set(&wdaContext->txFrameEvent);
14785 if(!VOS_IS_STATUS_SUCCESS(status))
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014788 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014789 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 return status;
14791}
Jeff Johnson295189b2012-06-20 16:38:30 -070014792/*
14793 * FUNCTION: WDA_TxPacket
14794 * Forward TX management frame to WDI
14795 */
14796VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14797 void *pFrmBuf,
14798 tANI_U16 frmLen,
14799 eFrameType frmType,
14800 eFrameTxDir txDir,
14801 tANI_U8 tid,
14802 pWDATxRxCompFunc pCompFunc,
14803 void *pData,
14804 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014805 tANI_U32 txFlag,
14806 tANI_U32 txBdToken
14807 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014808{
14809 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14810 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14811 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14812 tANI_U8 eventIdx = 0;
14813 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14814 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014815 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014816 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014817
Jeff Johnson295189b2012-06-20 16:38:30 -070014818 if((NULL == pWDA)||(NULL == pFrmBuf))
14819 {
14820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014821 "%s:pWDA %pK or pFrmBuf %pK is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014822 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014823 VOS_ASSERT(0);
14824 return VOS_STATUS_E_FAILURE;
14825 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014826
Jeff Johnson295189b2012-06-20 16:38:30 -070014827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014828 "Tx Mgmt Frame Subtype: %d alloc(%pK) txBdToken = %u",
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014829 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14831 if(NULL == pMac)
14832 {
14833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014834 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014835 VOS_ASSERT(0);
14836 return VOS_STATUS_E_FAILURE;
14837 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014838
Jeff Johnson295189b2012-06-20 16:38:30 -070014839 /* store the call back function in WDA context */
14840 pWDA->pTxCbFunc = pCompFunc;
14841 /* store the call back for the function of ackTxComplete */
14842 if( pAckTxComp )
14843 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014844 if( NULL != pWDA->pAckTxCbFunc )
14845 {
14846 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014848 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014849 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014850 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014851
Jeff Johnsone7245742012-09-05 17:12:55 -070014852 if( VOS_STATUS_SUCCESS !=
14853 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14854 {
14855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14856 "Tx Complete timeout Timer Stop Failed ");
14857 }
14858 else
14859 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014861 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014862 }
14863 }
14864
14865 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14866 pWDA->pAckTxCbFunc = pAckTxComp;
14867 if( VOS_STATUS_SUCCESS !=
14868 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14869 {
14870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14871 "Tx Complete Timer Start Failed ");
14872 pWDA->pAckTxCbFunc = NULL;
14873 return eHAL_STATUS_FAILURE;
14874 }
14875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014876 /* Reset the event to be not signalled */
14877 status = vos_event_reset(&pWDA->txFrameEvent);
14878 if(!VOS_IS_STATUS_SUCCESS(status))
14879 {
14880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014881 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014882 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14883 if( pAckTxComp )
14884 {
14885 pWDA->pAckTxCbFunc = NULL;
14886 if( VOS_STATUS_SUCCESS !=
14887 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14888 {
14889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14890 "Tx Complete timeout Timer Stop Failed ");
14891 }
14892 }
14893 return VOS_STATUS_E_FAILURE;
14894 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014895
14896 /* If Peer Sta mask is set don't overwrite to self sta */
14897 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014898 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014899 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014900 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014901 else
14902 {
Ganesh K08bce952012-12-13 15:04:41 -080014903 /* Get system role, use the self station if in unknown role or STA role */
14904 systemRole = wdaGetGlobalSystemRole(pMac);
14905 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14906 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014907#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014908 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014909#endif
Ganesh K08bce952012-12-13 15:04:41 -080014910 ))
14911 {
14912 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14913 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014915
Jeff Johnsone7245742012-09-05 17:12:55 -070014916 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14917 disassoc frame reaches the HW, HAL has already deleted the peer station */
14918 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014919 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014920 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014921 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014922 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014923 /*Send Probe request frames on self sta idx*/
14924 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014925 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 /* Since we donot want probe responses to be retried, send probe responses
14927 through the NO_ACK queues */
14928 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14929 {
14930 //probe response is sent out using self station and no retries options.
14931 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14932 }
14933 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14934 {
14935 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14936 }
14937 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014938#ifdef FEATURE_WLAN_TDLS
14939 /* TDLS Management frames are sent using Peer Sta mask */
14940 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14941 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14942 {
14943 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14944
14945 }
14946#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014947 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014948
14949 /*Set frame tag to 0
14950 We will use the WDA user data in order to tag a frame as expired*/
14951 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14952 (v_PVOID_t)0);
14953
14954
14955 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014956 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14957 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014958 {
14959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014960 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014961 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014962 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 -070014963 if( pAckTxComp )
14964 {
14965 pWDA->pAckTxCbFunc = NULL;
14966 if( VOS_STATUS_SUCCESS !=
14967 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14968 {
14969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14970 "Tx Complete timeout Timer Stop Failed ");
14971 }
14972 }
14973 return VOS_STATUS_E_FAILURE;
14974 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014975 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014976 /*
14977 * Wait for the event to be set by the TL, to get the response of TX
14978 * complete, this event should be set by the Callback function called by TL
14979 */
14980 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14981 &eventIdx);
14982 if(!VOS_IS_STATUS_SUCCESS(status))
14983 {
14984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14985 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014986 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014987 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014988 /*Tag Frame as timed out for later deletion*/
14989 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14990 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014991 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14992 after the packet gets completed(packet freed once)*/
14993
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014994 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14995
14996 /*
14997 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14998 * TX completion call back
14999 */
15000 VOS_SMP_MB;
15001 vos_lock_release(&pWDA->mgmt_pkt_lock);
15002
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070015003 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053015004 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070015005
Abhishek Singh837adf22015-10-01 17:37:37 +053015006 if (vos_isFatalEventEnabled())
15007 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
15008 WLAN_LOG_INDICATOR_HOST_DRIVER,
15009 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
15010 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070015011
Jeff Johnson295189b2012-06-20 16:38:30 -070015012 if( pAckTxComp )
15013 {
15014 pWDA->pAckTxCbFunc = NULL;
15015 if( VOS_STATUS_SUCCESS !=
15016 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15017 {
15018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15019 "Tx Complete timeout Timer Stop Failed ");
15020 }
15021 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053015022 pWDA->mgmtTxfailureCnt++;
15023
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053015024 /* Request firmware recovery */
15025 if (WDA_TX_FW_RECOVERY_THRESHOLD ==
15026 pWDA->mgmtTxfailureCnt)
15027 {
15028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15029 "%s: Request firmware for recovery", __func__);
15030 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
15031 }
15032
Abhishek Singhe721fb42015-11-30 14:22:10 +053015033 /* SSR if timeout continously for
15034 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
15035 */
15036 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
15037 pWDA->mgmtTxfailureCnt)
15038 {
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053015039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15040 "%s: Request system recovery", __func__);
Anurag Chouhanf0d0ba12018-02-09 15:13:43 +053015041 vos_wlanRestart(VOS_TRANSMISSIONS_TIMEOUT);
Abhishek Singhe721fb42015-11-30 14:22:10 +053015042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015043 status = VOS_STATUS_E_FAILURE;
15044 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053015045
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053015046#ifdef WLAN_DUMP_MGMTFRAMES
15047 if (VOS_IS_STATUS_SUCCESS(status))
15048 {
15049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15050 "%s() TX packet : SubType %d", __func__,pFc->subType);
15051 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15052 pData, frmLen);
15053 }
15054#endif
15055
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015056 if (VOS_IS_STATUS_SUCCESS(status))
15057 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053015058 pWDA->mgmtTxfailureCnt = 0;
15059 if ((vos_timer_get_system_time() - time_snapshot) >=
15060 WDA_TX_TIME_THRESHOLD)
15061 {
15062 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15063 "Tx Complete took %lu ms",
15064 vos_timer_get_system_time() - time_snapshot);
15065 }
15066
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015067 if (pMac->fEnableDebugLog & 0x1)
15068 {
15069 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
15070 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
15071 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
15072 {
15073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
15074 pFc->type, pFc->subType);
15075 }
15076 }
15077 }
15078
15079
Jeff Johnson295189b2012-06-20 16:38:30 -070015080 return status;
15081}
Jeff Johnson295189b2012-06-20 16:38:30 -070015082/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015083 * FUNCTION: WDA_ProcessDHCPStartInd
15084 * Forward DHCP Start to WDI
15085 */
15086static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
15087 tAniDHCPInd *dhcpStartInd)
15088{
15089 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015090 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015091
c_hpothu0b0cab72014-02-13 21:52:40 +053015092 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
15093 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015094 sizeof(tSirMacAddr));
15095
c_hpothu0b0cab72014-02-13 21:52:40 +053015096 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015097
c_hpothu0b0cab72014-02-13 21:52:40 +053015098 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015099 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15101 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015102 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015103 else if (WDI_STATUS_SUCCESS_SYNC != status)
15104 {
15105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15106 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
15107 }
15108
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015109 vos_mem_free(dhcpStartInd);
15110 return CONVERT_WDI2VOS_STATUS(status) ;
15111}
15112
15113 /*
15114 * FUNCTION: WDA_ProcessDHCPStopInd
15115 * Forward DHCP Stop to WDI
15116 */
15117 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
15118 tAniDHCPInd *dhcpStopInd)
15119 {
15120 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015121 WDI_DHCPInd wdiDHCPInd;
15122
15123 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
15124 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
15125
15126 status = WDI_dhcpStopInd(&wdiDHCPInd);
15127
15128 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015129 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15131 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015132 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015133 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015134 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15136 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015137 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015138
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015139 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053015140
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015141 return CONVERT_WDI2VOS_STATUS(status) ;
15142 }
15143
Abhishek Singh00b71972016-01-07 10:51:04 +053015144#ifdef WLAN_FEATURE_RMC
15145
15146void
15147WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
15148{
15149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15150 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
15151
15152 switch (wdiRmcResponse->cmd)
15153 {
15154 case eWDI_BECOME_RULER_CMD :
15155 {
15156 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
15157
15158 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
15159 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
15160
15161 if (NULL == pRmcBecomeRulerInd)
15162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15164 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
15165 break;
15166 }
15167
15168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15169 "Received eWDI_BECOME_RULER_CMD from WDI");
15170
15171 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
15172
15173 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
15174 wdiRmcResponse->mcastTransmitter,
15175 sizeof(tSirMacAddr));
15176 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
15177 wdiRmcResponse->mcastGroup,
15178 sizeof(tSirMacAddr));
15179
15180 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
15181 (void *)pRmcBecomeRulerInd, 0) ;
15182 break;
15183 }
15184 case eWDI_SUGGEST_RULER_CMD :
15185 {
15186 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
15187
15188 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
15189 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
15190
15191 if (NULL == pRmcRulerSelectInd)
15192 {
15193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15194 "%s: unable to allocate pRmcRulerSelectInd", __func__);
15195 break;
15196 }
15197
15198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15199 "Received eWDI_SUGGEST_RULER_CMD from WDI");
15200
15201 pRmcRulerSelectInd->status = wdiRmcResponse->status;
15202
15203 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
15204 wdiRmcResponse->mcastTransmitter,
15205 sizeof(tSirMacAddr));
15206 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
15207 wdiRmcResponse->mcastGroup,
15208 sizeof(tSirMacAddr));
15209 vos_mem_copy(pRmcRulerSelectInd->ruler,
15210 wdiRmcResponse->ruler,
15211 sizeof(pRmcRulerSelectInd->ruler));
15212
15213 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
15214 (void *)pRmcRulerSelectInd, 0) ;
15215 break;
15216 }
15217 }
15218
15219 /* free the config structure */
15220 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15221 {
15222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15223 }
15224 vos_mem_free(pWdaParams->wdaMsgParam);
15225 vos_mem_free(pWdaParams);
15226
15227}
15228
15229void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
15230{
15231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15232
15233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15234 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15235
15236 if (NULL == pWdaParams)
15237 {
15238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15239 "%s: pWdaParams received NULL", __func__);
15240 VOS_ASSERT(0);
15241 return;
15242 }
15243
15244 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15245 {
15246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15247 vos_mem_free(pWdaParams->wdaMsgParam);
15248 vos_mem_free(pWdaParams);
15249 }
15250
15251 return;
15252}
15253
15254static VOS_STATUS
15255WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15256 tSirRmcRulerReq *rmcRulerReq)
15257{
15258 WDI_Status status;
15259 WDI_RmcRulerReqParams *wdiRulerReq;
15260 tWDA_ReqParams *pWdaParams;
15261
15262 wdiRulerReq = (WDI_RmcRulerReqParams *)
15263 vos_mem_malloc(sizeof(*wdiRulerReq));
15264
15265 if (NULL == wdiRulerReq)
15266 {
15267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15268 "%s: VOS MEM Alloc Failure", __func__);
15269 VOS_ASSERT(0);
15270 vos_mem_free(rmcRulerReq);
15271 return VOS_STATUS_E_NOMEM;
15272 }
15273
15274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15275 if (NULL == pWdaParams)
15276 {
15277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15278 "%s: VOS MEM Alloc Failure", __func__);
15279 VOS_ASSERT(0);
15280 vos_mem_free(rmcRulerReq);
15281 vos_mem_free(wdiRulerReq);
15282 return VOS_STATUS_E_NOMEM;
15283 }
15284
15285 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15286 /* Store param pointer as passed in by caller */
15287 pWdaParams->wdaMsgParam = rmcRulerReq;
15288 pWdaParams->pWdaContext = pWDA;
15289
15290 wdiRulerReq->cmd = rmcRulerReq->cmd;
15291
15292 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15293 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15294 vos_mem_copy(wdiRulerReq->mcastGroup,
15295 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15296 vos_mem_copy(wdiRulerReq->blacklist,
15297 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15298
15299 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15300
15301 status = WDI_RmcRulerReq(wdiRulerReq,
15302 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15303 (void *)pWdaParams);
15304 if (IS_WDI_STATUS_FAILURE(status))
15305 {
15306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15307 vos_mem_free(pWdaParams->wdaMsgParam);
15308 vos_mem_free(pWdaParams) ;
15309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15310 "Ruler Request failed");
15311 }
15312 return CONVERT_WDI2VOS_STATUS(status) ;
15313}
15314
15315/*
15316 * FUNCTION: WDA_ProcessRMCUpdateInd
15317 * Forward Update Indication to WDI
15318*/
15319static VOS_STATUS
15320WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15321 tSirRmcUpdateInd *rmcUpdateInd)
15322{
15323 WDI_Status status;
15324 WDI_RmcUpdateIndParams wdiUpdateInd;
15325
15326 /* Copy the paramters for Update_Ind */
15327
15328 wdiUpdateInd.indication = rmcUpdateInd->indication;
15329 wdiUpdateInd.role = rmcUpdateInd->role;
15330
15331 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15332 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15333
15334 vos_mem_copy(wdiUpdateInd.mcastGroup,
15335 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15336
15337 vos_mem_copy(wdiUpdateInd.mcastRuler,
15338 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15339
15340 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15341 wdiUpdateInd.pUserData = pWDA;
15342 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15343
15344 if (WDI_STATUS_PENDING == status)
15345 {
15346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15347 "Pending received for %s:%d ",__func__,__LINE__ );
15348 }
15349 else if (WDI_STATUS_SUCCESS_SYNC != status)
15350 {
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15352 "Failure in %s:%d ",__func__,__LINE__ );
15353 }
15354
15355 vos_mem_free(rmcUpdateInd);
15356
15357 return CONVERT_WDI2VOS_STATUS(status) ;
15358}
15359
15360void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15361 ,void* pUserData)
15362{
15363
15364 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15365 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15366 tWDA_CbContext *pWDA;
15367 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15368 vos_msg_t vosMsg;
15369 v_U32_t wdaCnt = 0;
15370
15371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15372 "<------ %s " ,__func__);
15373 if (NULL == pWdaParams)
15374 {
15375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15376 "%s: pWdaParams received NULL", __func__);
15377 VOS_ASSERT(0);
15378 return;
15379 }
15380
15381 if (NULL == peerInfoRspParams)
15382 {
15383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15384 "%s: peerInfoRspParams received NULL", __func__);
15385 if(pWdaParams->wdaMsgParam)
15386 vos_mem_free(pWdaParams->wdaMsgParam);
15387 if(pWdaParams->wdaWdiApiMsgParam)
15388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15389 vos_mem_free(pWdaParams);
15390
15391 VOS_ASSERT(0);
15392 return;
15393 }
15394
15395 pIbssPeerInfoParams =
15396 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15397
15398 pIbssGetPeerInfoRsp =
15399 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15400
15401 if(NULL == pIbssGetPeerInfoRsp)
15402 {
15403 if(pWdaParams->wdaMsgParam)
15404 vos_mem_free(pWdaParams->wdaMsgParam);
15405 if(pWdaParams->wdaWdiApiMsgParam)
15406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15407 vos_mem_free(pWdaParams);
15408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15409 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15410 __func__);
15411 VOS_ASSERT(0);
15412 return;
15413
15414 }
15415
15416 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15417
15418
15419 if (peerInfoRspParams->wdiNumPeers > 32)
15420 {
15421 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15422 /* free the mem and return */
15423 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15424 if(pWdaParams->wdaMsgParam)
15425 vos_mem_free(pWdaParams->wdaMsgParam);
15426 if(pWdaParams->wdaWdiApiMsgParam)
15427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15428 vos_mem_free(pWdaParams);
15429
15430 return;
15431 }
15432
15433 /* Message Header */
15434 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15435 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15436 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15437 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15438
15439 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15440 {
15441 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15442 tSirIbssPeerInfoParams *pSmeTmp =
15443 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15444
15445 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15446 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15447 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15448 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15449 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15450 }
15451
15452 /* VOS message wrapper */
15453 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15454 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15455 vosMsg.bodyval = 0;
15456
15457 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15458 {
15459 /* free the mem and return */
15460 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15461 }
15462
15463 if(NULL != pWdaParams)
15464 {
15465 if(pWdaParams->wdaMsgParam)
15466 vos_mem_free(pWdaParams->wdaMsgParam);
15467 if(pWdaParams->wdaWdiApiMsgParam)
15468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15469 vos_mem_free(pWdaParams);
15470 }
15471
15472 return;
15473}
15474
15475static VOS_STATUS
15476WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15477 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15478{
15479 WDI_Status status;
15480 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15481 tWDA_ReqParams *pWdaParams;
15482
15483 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15484 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15485 if (NULL == wdiPeerInfoReq)
15486 {
15487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15488 "%s: VOS MEM Alloc Failure", __func__);
15489 VOS_ASSERT(0);
15490 vos_mem_free(ibssPeerInfoReqParams);
15491 return VOS_STATUS_E_NOMEM;
15492 }
15493
15494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15495 if (NULL == pWdaParams)
15496 {
15497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15498 "%s: VOS MEM Alloc Failure", __func__);
15499 VOS_ASSERT(0);
15500 vos_mem_free(wdiPeerInfoReq);
15501 vos_mem_free(ibssPeerInfoReqParams);
15502 return VOS_STATUS_E_NOMEM;
15503 }
15504
15505 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15506 /* Store param pointer as passed in by caller */
15507 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15508 pWdaParams->pWdaContext = pWDA;
15509
15510 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15511 ibssPeerInfoReqParams->allPeerInfoReqd;
15512 wdiPeerInfoReq->wdiStaIdx =
15513 ibssPeerInfoReqParams->staIdx;
15514
15515 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15516 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15517 (void *)pWdaParams);
15518 if (IS_WDI_STATUS_FAILURE(status))
15519 {
15520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15521 vos_mem_free(pWdaParams->wdaMsgParam);
15522 vos_mem_free(pWdaParams) ;
15523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15524 "IBSS Peer Info Request failed");
15525 }
15526 return CONVERT_WDI2VOS_STATUS(status) ;
15527
15528}
15529
Kapil Gupta3d923fb2016-12-20 18:59:27 +053015530#ifdef WLAN_FEATURE_APFIND
15531/*
15532 * FUNCTION: WDA_Process_apfind_set_cmd
15533 * Forward AP find config request to WDI
15534 */
15535VOS_STATUS WDA_Process_apfind_set_cmd(tWDA_CbContext *pWDA,
15536 struct hal_apfind_request *ap_find_req)
15537{
15538 WDI_Status status;
15539 struct WDI_APFind_cmd *wdi_ap_find_cmd;
15540
15541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15542 "------> %s " ,__func__);
15543 if (NULL == ap_find_req)
15544 {
15545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15546 "%s: apfind_req info received NULL", __func__);
15547 VOS_ASSERT(0) ;
15548 return VOS_STATUS_E_FAULT;
15549 }
15550
15551 wdi_ap_find_cmd = (struct WDI_APFind_cmd *)vos_mem_malloc(
15552 sizeof(struct hal_apfind_request) + ap_find_req->request_data_len);
15553
15554 wdi_ap_find_cmd->data_len = ap_find_req->request_data_len;
15555 vos_mem_copy(wdi_ap_find_cmd->data, ap_find_req->request_data,
15556 ap_find_req->request_data_len);
15557
15558 status = WDI_process_ap_find_cmd(wdi_ap_find_cmd);
15559 if (WDI_STATUS_PENDING == status) {
15560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15561 FL("pending status received"));
15562 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15563 (WDI_STATUS_SUCCESS != status)) {
15564
15565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15566 FL("Failure in process_sap_auth_offload API %d"), status);
15567
15568 }
15569 vos_mem_free(wdi_ap_find_cmd);
15570 return CONVERT_WDI2VOS_STATUS(status) ;
15571}
15572#endif
15573
Abhishek Singh00b71972016-01-07 10:51:04 +053015574/*
15575 * FUNCTION: WDA_ProcessTXFailMonitorInd
15576 * Forward TX Fail Monitor to WDI
15577 */
15578static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15579 tWDA_CbContext *pWDA,
15580 tAniTXFailMonitorInd *txFailMonitorInd)
15581{
15582 WDI_Status status;
15583 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15584 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15585
15586 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15587 "<------ %s " ,__func__);
15588
15589 if (NULL == wdiTXFailMonitorInd)
15590 {
15591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15592 "%s: VOS MEM Alloc Failure", __func__);
15593 VOS_ASSERT(0);
15594 vos_mem_free(txFailMonitorInd);
15595 return VOS_STATUS_E_NOMEM;
15596 }
15597
15598 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15599
15600 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15601 wdiTXFailMonitorInd->pUserData = pWDA;
15602
15603 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15604
15605 if (WDI_STATUS_PENDING == status)
15606 {
15607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15608 "TX Fail Monitor Indication Pending");
15609 }
15610 else if (WDI_STATUS_SUCCESS_SYNC == status)
15611 {
15612 if (0 == txFailMonitorInd->tx_fail_count)
15613 pWDA->txFailIndCallback = NULL;
15614 else
15615 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15616 }
15617 else
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15620 "TX Fail Monitor Indication Failed");
15621 }
15622
15623 vos_mem_free(wdiTXFailMonitorInd);
15624 vos_mem_free(txFailMonitorInd);
15625
15626 return CONVERT_WDI2VOS_STATUS(status) ;
15627}
15628#endif /* WLAN_FEATURE_RMC */
15629
Kapil Gupta04ab1992016-06-26 13:36:51 +053015630#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15631VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15632 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15633{
15634 WDI_Status status;
15635 tWDA_ReqParams *pWdaParams ;
15636 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15637 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15638 sizeof(WDI_PERRoamTriggerScanInfo));
15639
15640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15641 "------> %s " ,__func__);
15642
15643 if (NULL == pwdiPERRoamTriggerScanInfo)
15644 {
15645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15646 "%s: VOS MEM Alloc Failure", __func__);
15647 VOS_ASSERT(0);
15648 return VOS_STATUS_E_NOMEM;
15649 }
15650
15651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15652 if (NULL == pWdaParams)
15653 {
15654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15655 "%s: VOS MEM Alloc Failure", __func__);
15656 VOS_ASSERT(0);
15657 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15658 return VOS_STATUS_E_NOMEM;
15659 }
15660
15661 pwdiPERRoamTriggerScanInfo->roamScanReq =
15662 pPERRoamTriggerScanReqParams->start;
15663
15664 /* Store Params pass it to WDI */
15665 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15666 pWdaParams->pWdaContext = pWDA;
15667
15668 /* Store param pointer as passed in by caller */
15669 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15670 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15671 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15672 pWdaParams);
15673
15674 if(IS_WDI_STATUS_FAILURE(status))
15675 {
15676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15677 "Failure in Start Roam Candidate trigger Req WDI API" );
15678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15679 vos_mem_free(pWdaParams->wdaMsgParam);
15680 pWdaParams->wdaWdiApiMsgParam = NULL;
15681 pWdaParams->wdaMsgParam = NULL;
15682 }
15683 return CONVERT_WDI2VOS_STATUS(status) ;
15684}
15685#endif
15686
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015687/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015688 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15689 *
15690 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15691 *
15692 * PARAM:
15693 * pWDA: pointer to WDA context
15694 * pReq: pointer to stop batch scan request
15695 */
15696VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15697 tpSpoofMacAddrReqParams pReq)
15698{
15699 WDI_Status wdiStatus;
15700 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15701 tWDA_ReqParams *pWdaParams;
15702
15703 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15704 sizeof(WDI_SpoofMacAddrInfoType));
15705 if(NULL == WDI_SpoofMacAddrInfoParams) {
15706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15707 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15708 VOS_ASSERT(0);
15709 return VOS_STATUS_E_NOMEM;
15710 }
15711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15712 if(NULL == pWdaParams) {
15713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15714 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015715 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015716 VOS_ASSERT(0);
15717 return VOS_STATUS_E_NOMEM;
15718 }
15719
15720 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15721 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15722
15723 pWdaParams->pWdaContext = pWDA;
15724 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015725 pWdaParams->wdaMsgParam = (void *)pReq;
15726
15727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15728 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15729
Siddharth Bhal171788a2014-09-29 21:02:40 +053015730 /* store Params pass it to WDI */
15731 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15732
15733 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015734 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15735 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015736
15737 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15738 {
15739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15740 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15742 vos_mem_free(pWdaParams->wdaMsgParam);
15743 vos_mem_free(pWdaParams);
15744 }
15745
15746 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15747}
15748
c_manjeecfd1efb2015-09-25 19:32:34 +053015749
15750/*
15751 * FUNCTION: WDA_FwrMemDumpRespCallback
15752 * recieves Mgmt Logging init response from FW
15753 */
15754 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15755 void* pUserData)
15756{
15757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15758 tAniFwrDumpReq *pFwrMemDumpReq;
15759 tAniFwrDumpRsp *pFwrMemDumpRsp;
15760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15761 "<------ %s " ,__func__);
15762
15763 if(NULL == pWdaParams)
15764 {
15765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15766 "%s: pWdaParams received NULL", __func__);
15767 VOS_ASSERT(0);
15768 return ;
15769 }
15770
15771 if(NULL == pWdaParams->wdaMsgParam)
15772 {
15773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15774 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15775 VOS_ASSERT(0);
15776 vos_mem_free(pWdaParams);
15777 return ;
15778 }
15779
15780 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15781 if(pFwrMemDumpRsp == NULL)
15782 {
15783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15784 "%s: pFwrMemDumpRsp is NULL", __func__);
15785 VOS_ASSERT(0);
15786 vos_mem_free(pWdaParams);
15787 return ;
15788 }
15789
15790 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15791 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15792
15793 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15794 {
15795 pFwrMemDumpReq->fwMemDumpReqCallback(
15796 pFwrMemDumpReq->fwMemDumpReqContext,
15797 pFwrMemDumpRsp);
15798 }
15799 else
15800 {
15801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15802 "%s: FwrMemDump callback is NULL", __func__);
15803 }
15804
15805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15806 vos_mem_free(pWdaParams->wdaMsgParam);
15807 vos_mem_free(pWdaParams);
15808 vos_mem_free(pFwrMemDumpRsp);
15809
15810 return ;
15811}
15812
15813VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15814 tAniFwrDumpReq* pFwrMemDumpReq)
15815{
15816 VOS_STATUS status = VOS_STATUS_SUCCESS;
15817 WDI_Status wstatus;
15818 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15819 tWDA_ReqParams *pWdaParams ;
15820
15821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15822 "------> %s " ,__func__);
15823 /* Sanity Check*/
15824 if(NULL == pFwrMemDumpReq)
15825 {
15826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15827 "%s: pFwrMemDumpReq received NULL", __func__);
15828 VOS_ASSERT(0) ;
15829 return VOS_STATUS_E_FAULT;
15830 }
15831
15832 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15833 if(NULL == pWdiFwrMemDumpReq)
15834 {
15835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15836 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15837 VOS_ASSERT(0);
15838 return VOS_STATUS_E_NOMEM;
15839 }
15840
15841 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15842 if(NULL == pWdaParams)
15843 {
15844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15845 "%s: pWdaParams Alloc Failure", __func__);
15846 VOS_ASSERT(0);
15847 vos_mem_free(pWdiFwrMemDumpReq);
15848 return VOS_STATUS_E_NOMEM;
15849 }
15850
15851 /* Store Params pass it to WDI */
15852 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15853 pWdaParams->pWdaContext = pWDA;
15854 /* Store param pointer as passed in by caller */
15855 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15856
15857 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15858 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15859 pWdaParams);
15860
15861 if(IS_WDI_STATUS_FAILURE(wstatus))
15862 {
15863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15864 FL("Fwr Mem Dump Req failed, free all the memory"));
15865 status = CONVERT_WDI2VOS_STATUS(wstatus);
15866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015867 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015868 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015869 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015870 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015871 }
15872
15873 return status;
15874
15875}
15876
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015877/**
15878 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15879 *
15880 * @pWDA: WDA Call back context
15881 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15882 * that holds allowed action frames bitmask
15883 *
15884 * This function sets the allowed action frames that the FW needs to
15885 * handover to host.The Action frames other than the requested ones
15886 * can be dropped in FW
15887 *
15888 * Return: VOS_STATUS enumeration
15889 */
15890VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15891 struct sir_allowed_action_frames *allowed_action_frames)
15892{
15893 WDI_Status status;
15894 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15896 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015897
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015898 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15899 vos_mem_malloc(sizeof
15900 (*wdi_allowed_action_frames));
15901 if (!wdi_allowed_action_frames) {
15902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15903 "%s: VOS MEM Alloc Failure", __func__);
15904 vos_mem_free(allowed_action_frames);
15905 return VOS_STATUS_E_NOMEM;
15906 }
15907
15908 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15909 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15910
15911 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15912 if (WDI_STATUS_PENDING == status) {
15913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15914 FL("pending status received"));
15915 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15916 (WDI_STATUS_SUCCESS != status)) {
15917 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15918 FL("Failure in allowed_action_frames API %d"), status);
15919 }
15920
15921 vos_mem_free(wdi_allowed_action_frames);
15922 vos_mem_free(allowed_action_frames);
15923 return CONVERT_WDI2VOS_STATUS(status) ;
15924}
c_manjeecfd1efb2015-09-25 19:32:34 +053015925
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015926#ifdef SAP_AUTH_OFFLOAD
15927VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15928 struct tSirSapOffloadInfo *sap_auth_offload_info)
15929{
15930 WDI_Status status = WDI_STATUS_SUCCESS;
15931 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15932 v_U16_t psk_len, psk_len_padded;
15933
15934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15935 "------> %s " ,__func__);
15936
15937 if(NULL == sap_auth_offload_info)
15938 {
15939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15940 "%s: sap_auth_offload_info received NULL", __func__);
15941 VOS_ASSERT(0) ;
15942 return VOS_STATUS_E_FAULT;
15943 }
15944 psk_len = sap_auth_offload_info->key_len;
15945 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15946
15947 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15948 vos_mem_malloc(sizeof
15949 (*sap_ofl_enable_cmd));
15950 if (!sap_ofl_enable_cmd) {
15951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15952 "%s: VOS MEM Alloc Failure", __func__);
15953 vos_mem_free(sap_auth_offload_info);
15954 return VOS_STATUS_E_NOMEM;
15955 }
15956 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15957 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15958 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15959
15960 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15961 sap_ofl_enable_cmd->psk_len = psk_len;
15962 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15963 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15964 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15965 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15966 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15967 break;
15968 case eSIR_OFFLOAD_NONE:
15969 default:
15970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15971 "Set SAP AP Auth offload with none support security type\n");
15972 break;
15973 }
15974 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15975
15976 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15977
15978 if (WDI_STATUS_PENDING == status) {
15979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15980 FL("pending status received"));
15981 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15982 (WDI_STATUS_SUCCESS != status)) {
15983 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15984 FL("Failure in process_sap_auth_offload API %d"), status);
15985 }
15986
15987 vos_mem_free(sap_ofl_enable_cmd);
15988 vos_mem_free(sap_auth_offload_info);
15989 return CONVERT_WDI2VOS_STATUS(status) ;
15990
15991}
15992#endif
15993
Siddharth Bhal171788a2014-09-29 21:02:40 +053015994/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015995 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15996 * Request to WDI.
15997 */
15998VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15999{
16000 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053016001 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016002
16003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
16004
16005 staId = (v_U8_t)params;
16006
Bhargav Shahfbaeca22016-07-13 10:27:35 +053016007 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
16008 if ( NULL == pTLCb )
16009 {
16010 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
16011 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
16012 return VOS_STATUS_E_FAULT;
16013 }
16014
16015
16016 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016017 /* Pause TL for Sta ID */
16018 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
16019}
16020
Anurag Chouhan6ee81542017-02-09 18:09:27 +053016021/**
16022 * WDA_SetARPStatsParamsRspCallback() - WDA callback api to set/reset arp stats
16023 * @wdiSetStatsRsp: pointer to set stats response
16024 * @user_data: user data
16025 *
16026 * Return: None
16027 */
16028void WDA_SetARPStatsParamsRspCallback(
16029 WDI_SetARPStatsRspParamsType *wdiSetStatsRsp,
16030 void *user_data)
16031{
16032 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
16033 setArpStatsParams *arpStatsParams;
16034
16035 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16036 "ENTER <------ %s " ,__func__);
16037
16038 if(NULL == wda_params)
16039 {
16040 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16041 "%s: wda_params received NULL", __func__);
16042 VOS_ASSERT(0);
16043 return;
16044 }
16045
16046 if(NULL == wda_params->wdaMsgParam)
16047 {
16048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16049 "%s: wda_params->wdaMsgParam is NULL", __func__);
16050 VOS_ASSERT(0);
16051 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16052 vos_mem_free(wda_params);
16053 return;
16054 }
16055
16056 arpStatsParams = (setArpStatsParams *)wda_params->wdaMsgParam;
16057 if(arpStatsParams->rsp_cb_fn)
16058 {
16059 arpStatsParams->rsp_cb_fn(arpStatsParams->data_ctx,
16060 CONVERT_WDI2VOS_STATUS(wdiSetStatsRsp->status));
16061 }
16062 else
16063 {
16064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16065 "%s: ARP stats callback is NULL", __func__);
16066 }
16067
16068 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16069 vos_mem_free(wda_params->wdaMsgParam);
16070 vos_mem_free(wda_params);
16071 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16072 "EXIT <------ %s " ,__func__);
16073 return;
16074}
16075
16076/**
16077 * WDA_GetARPStatsParamsRspCallback() - WDA callback api to get arp stats
16078 * @wdiGetStatsRsp: pointer to get stats response
16079 * @user_data: user data
16080 *
16081 * Return: None
16082 */
16083void WDA_GetARPStatsParamsRspCallback(
16084 WDI_GetARPStatsRspParamsType *wdiGetStatsRsp,
16085 void *user_data)
16086{
16087 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
16088 getArpStatsParams *arpStatsParams;
16089
16090 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16091 "ENTER <------ %s " ,__func__);
16092
16093 if(NULL == wda_params)
16094 {
16095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16096 "%s: wda_params received NULL", __func__);
16097 VOS_ASSERT(0);
16098 return;
16099 }
16100
16101 if(NULL == wda_params->wdaMsgParam)
16102 {
16103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16104 "%s: wda_params->wdaMsgParam is NULL", __func__);
16105 VOS_ASSERT(0);
16106 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16107 vos_mem_free(wda_params);
16108 return;
16109 }
16110
16111 arpStatsParams = (getArpStatsParams *)wda_params->wdaMsgParam;
16112 if(arpStatsParams->get_rsp_cb_fn)
16113 {
16114 arpStatsParams->get_rsp_cb_fn(arpStatsParams->data_ctx,
16115 (rsp_stats *)wdiGetStatsRsp);
16116 }
16117 else
16118 {
16119 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16120 "%s: ARP stats callback is NULL", __func__);
16121 }
16122
16123 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16124 vos_mem_free(wda_params->wdaMsgParam);
16125 vos_mem_free(wda_params);
16126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16127 "EXIT <------ %s " ,__func__);
16128 return;
16129}
16130
16131/**
16132 * WDA_ProcessSetARPStatsReq() - WDA api to process set arp stats command
16133 * @pWDA: wda handle
16134 * @pSetStatsParams: pointer to set arp stats
16135 *
16136 * Return: VOS_STATUS
16137 * 0 Success else failure
16138 */
16139VOS_STATUS WDA_ProcessSetARPStatsReq(tWDA_CbContext *pWDA,
16140 setArpStatsParams *pSetStatsParams)
16141{
16142 WDI_SetARPStatsParamsInfoType *wdiSetStatsParam;
16143 tWDA_ReqParams *wda_params;
16144 WDI_Status wdi_status = WDI_STATUS_SUCCESS;
16145
16146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16147 FL("---> %s"), __func__);
16148
16149 if(NULL == pSetStatsParams)
16150 {
16151 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16152 "%s: pSetStatsParams received NULL",
16153 __func__);
16154 VOS_ASSERT(0) ;
16155 return VOS_STATUS_E_FAULT;
16156 }
16157
16158 wdiSetStatsParam = (WDI_SetARPStatsParamsInfoType *)
16159 vos_mem_malloc(sizeof(*wdiSetStatsParam));
16160 if (!wdiSetStatsParam) {
16161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16162 "Failed to allocate buffer to send "
16163 "set_dhcp_server_offload cmd");
16164 vos_mem_free(pSetStatsParams);
16165 return VOS_STATUS_E_NOMEM;
16166 }
16167
16168 vos_mem_zero(wdiSetStatsParam, sizeof(*wdiSetStatsParam));
16169
16170 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16171 if(NULL == wda_params)
16172 {
16173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16174 "%s: VOS MEM Alloc Failure", __func__);
16175 VOS_ASSERT(0);
16176 vos_mem_free(wdiSetStatsParam);
16177 vos_mem_free(pSetStatsParams);
16178 return VOS_STATUS_E_NOMEM;
16179 }
16180
16181 wdiSetStatsParam->flag = pSetStatsParams->flag;
16182 wdiSetStatsParam->pkt_type = pSetStatsParams->pkt_type;
16183 wdiSetStatsParam->ip_addr = pSetStatsParams->ip_addr;
16184
16185 /* Store Params pass it to WDI */
16186 wda_params->wdaWdiApiMsgParam = (void *)wdiSetStatsParam;
16187 wda_params->pWdaContext = pWDA;
16188 /* Store param pointer as passed in by caller */
16189 wda_params->wdaMsgParam = pSetStatsParams;
16190
16191 wdi_status = WDI_SetARPStatsReq(wdiSetStatsParam,
16192 (WDI_SetARPStatsRspCb)WDA_SetARPStatsParamsRspCallback,
16193 wda_params);
16194
16195 if(IS_WDI_STATUS_FAILURE(wdi_status))
16196 {
16197 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16198 "%s: Failure, free all the memory", __func__);
16199 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16200 vos_mem_free(wda_params->wdaMsgParam);
16201 vos_mem_free(wda_params);
16202 }
16203
16204 return wdi_status;
16205}
16206
16207/**
16208 * WDA_ProcessGetARPStatsReq() - WDA api to process get arp stats command
16209 * @pWDA: wda handle
16210 * @pGetStatsParams: pointer to get arp stats
16211 *
16212 * Return: VOS_STATUS
16213 * 0 Success else failure
16214 */
16215VOS_STATUS WDA_ProcessGetARPStatsReq(tWDA_CbContext *pWDA,
16216 getArpStatsParams *pGetStatsParams)
16217{
16218 WDI_GetARPStatsParamsInfoType *wdiGetStatsParam;
16219 tWDA_ReqParams *wda_params;
16220 WDI_Status wdi_status = WDI_STATUS_SUCCESS;
16221
16222 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16223 FL("---> %s"), __func__);
16224
16225 if(NULL == pGetStatsParams)
16226 {
16227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16228 "%s: pGetStatsParams received NULL",
16229 __func__);
16230 VOS_ASSERT(0) ;
16231 return VOS_STATUS_E_FAULT;
16232 }
16233
16234 wdiGetStatsParam = (WDI_GetARPStatsParamsInfoType *)
16235 vos_mem_malloc(sizeof(*wdiGetStatsParam));
16236 if (!wdiGetStatsParam) {
16237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16238 "Failed to allocate buffer to send "
16239 "set_dhcp_server_offload cmd");
16240 vos_mem_free(pGetStatsParams);
16241 return VOS_STATUS_E_NOMEM;
16242 }
16243
16244 vos_mem_zero(wdiGetStatsParam, sizeof(*wdiGetStatsParam));
16245
16246 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16247 if(NULL == wda_params)
16248 {
16249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16250 "%s: VOS MEM Alloc Failure", __func__);
16251 VOS_ASSERT(0);
16252 vos_mem_free(wdiGetStatsParam);
16253 vos_mem_free(pGetStatsParams);
16254 return VOS_STATUS_E_NOMEM;
16255 }
16256
16257 wdiGetStatsParam->pkt_type = pGetStatsParams->pkt_type;
16258
16259 /* Store Params pass it to WDI */
16260 wda_params->wdaWdiApiMsgParam = (void *)wdiGetStatsParam;
16261 wda_params->pWdaContext = pWDA;
16262 /* Store param pointer as passed in by caller */
16263 wda_params->wdaMsgParam = pGetStatsParams;
16264
16265 wdi_status = WDI_GetARPStatsReq(wdiGetStatsParam,
16266 (WDI_GetARPStatsRspCb)WDA_GetARPStatsParamsRspCallback,
16267 wda_params);
16268
16269 if(IS_WDI_STATUS_FAILURE(wdi_status))
16270 {
16271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16272 "%s: Failure, free all the memory", __func__);
16273 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16274 vos_mem_free(wda_params->wdaMsgParam);
16275 vos_mem_free(wda_params);
16276 }
16277
16278 return wdi_status;
16279}
16280
16281
Anurag Chouhan83026002016-12-13 22:46:21 +053016282#ifdef DHCP_SERVER_OFFLOAD
16283/**
16284 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
16285 * @wda_handle: pointer to wda handle
16286 * @dhcp_server_offload_info: dhcp server offload info
16287 *
16288 * Return: status
16289 * 0 - success or else failure
16290 */
16291static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
16292 sir_dhcp_srv_offload_info_t
16293 *dhcp_server_offload_info)
16294{
16295 wdi_set_dhcp_server_offload_t *dhcp_info;
16296 tWDA_ReqParams *wda_params;
16297 WDI_Status wstatus;
16298 VOS_STATUS status = VOS_STATUS_SUCCESS;
16299
16300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16301 FL("---> %s"), __func__);
16302
16303 if(NULL == dhcp_server_offload_info)
16304 {
16305 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16306 "%s: dhcp_server_offload_info received NULL",
16307 __func__);
16308 VOS_ASSERT(0) ;
16309 return VOS_STATUS_E_FAULT;
16310 }
16311
16312 dhcp_info = (wdi_set_dhcp_server_offload_t *)
16313 vos_mem_malloc(sizeof(*dhcp_info));
16314 if (!dhcp_info) {
16315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16316 "Failed to allocate buffer to send "
16317 "set_dhcp_server_offload cmd");
16318 vos_mem_free(dhcp_server_offload_info);
16319 return VOS_STATUS_E_NOMEM;
16320 }
16321
16322 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
16323
16324 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16325 if(NULL == wda_params)
16326 {
16327 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16328 "%s: VOS MEM Alloc Failure", __func__);
16329 VOS_ASSERT(0);
16330 vos_mem_free(dhcp_info);
16331 vos_mem_free(dhcp_server_offload_info);
16332 return VOS_STATUS_E_NOMEM;
16333 }
16334
16335 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
16336 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
16337 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
16338 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
16339 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
16340
16341 wda_params->pWdaContext = wda_handle;
16342 wda_params->wdaMsgParam = dhcp_server_offload_info;
16343 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
16344
16345 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
16346 (wdi_dhcp_srv_offload_rsp_cb)
16347 wda_dhcp_server_offload_rsp_callback,
16348 wda_params);
16349 if(IS_WDI_STATUS_FAILURE(wstatus))
16350 {
16351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16352 "Failed to send set_dhcp_server_offload cmd" );
16353 status = CONVERT_WDI2VOS_STATUS(wstatus);
16354 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16355 vos_mem_free(wda_params->wdaMsgParam);
16356 vos_mem_free(wda_params);
16357 }
16358
16359 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16360 "Set dhcp server offload");
16361 return status;
16362}
16363#endif /* DHCP_SERVER_OFFLOAD */
16364
Anurag Chouhan0b29de02016-12-16 13:18:40 +053016365#ifdef MDNS_OFFLOAD
16366/**
16367 * wda_set_mdns_offload_req() - wda api to set mdns offload
16368 * @wda_handle: wda handle
16369 * @mdns_offload_info: mdns offload info
16370 *
16371 * Return - 0 for success or else failure
16372 */
16373static int
16374wda_set_mdns_offload_req(tWDA_CbContext *wda_handle,
16375 sir_mdns_offload_info_t *mdns_offload_info)
16376{
16377 wdi_mdns_enable_offload_cmd_req *mdns_info;
16378 tWDA_ReqParams *wda_params;
16379 WDI_Status wstatus;
16380 VOS_STATUS status = VOS_STATUS_SUCCESS;
16381
16382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16383 FL("---> %s"), __func__);
16384
16385 if(NULL == mdns_offload_info)
16386 {
16387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16388 "%s: set_mdns_offload received NULL",
16389 __func__);
16390 VOS_ASSERT(0) ;
16391 return VOS_STATUS_E_FAULT;
16392 }
16393
16394 mdns_info = (wdi_mdns_enable_offload_cmd_req *)
16395 vos_mem_malloc(sizeof(*mdns_info));
16396 if (!mdns_info) {
16397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16398 "Failed to allocate buffer to send "
16399 "set_mdns_offload cmd");
16400 vos_mem_free(mdns_offload_info);
16401 return VOS_STATUS_E_NOMEM;
16402 }
16403
16404 vos_mem_zero(mdns_info, sizeof(*mdns_info));
16405
16406 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16407 if(NULL == wda_params)
16408 {
16409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16410 "%s: VOS MEM Alloc Failure", __func__);
16411 VOS_ASSERT(0);
16412 vos_mem_free(mdns_info);
16413 vos_mem_free(mdns_offload_info);
16414 return VOS_STATUS_E_NOMEM;
16415 }
16416
16417 mdns_info->bss_idx = mdns_offload_info->bss_idx;
16418 mdns_info->enable = mdns_offload_info->enable;
16419
16420 wda_params->pWdaContext = wda_handle;
16421 wda_params->wdaMsgParam = mdns_offload_info;
16422 wda_params->wdaWdiApiMsgParam = (void *)mdns_info;
16423
16424 wstatus = wdi_set_mdns_offload_req(mdns_info,
16425 (wdi_mdns_enable_rsp_cb)
16426 wda_mdns_enable_rsp_callback,
16427 wda_params);
16428 if(IS_WDI_STATUS_FAILURE(wstatus))
16429 {
16430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16431 "Failed to send wdi_set_mdns_offload_req cmd" );
16432 status = CONVERT_WDI2VOS_STATUS(wstatus);
16433 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16434 vos_mem_free(wda_params->wdaMsgParam);
16435 vos_mem_free(wda_params);
16436 }
16437
16438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16439 "mdns enabled!");
16440 return status;
16441
16442}
16443
16444/**
16445 * wda_set_mdns_fqdn_req() - wda api to set mdns fqdn offload
16446 * @wda_handle: wda handle
16447 * @mdns_fqdn_info: mdns fqdn offload info
16448 *
16449 * Return - 0 for success or else failure
16450 */
16451static int
16452wda_set_mdns_fqdn_req(tWDA_CbContext *wda_handle,
16453 sir_mdns_fqdn_info_t *mdns_fqdn_info)
16454{
16455 wdi_mdns_set_fqdn_cmd_req *fqdn_info;
16456 tWDA_ReqParams *wda_params;
16457 WDI_Status wstatus;
16458 VOS_STATUS status = VOS_STATUS_SUCCESS;
16459
16460 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16461 FL("---> %s"), __func__);
16462
16463 if(NULL == mdns_fqdn_info)
16464 {
16465 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16466 "%s: set_mdns_fqdn received NULL",
16467 __func__);
16468 VOS_ASSERT(0) ;
16469 return VOS_STATUS_E_FAULT;
16470 }
16471
16472 fqdn_info = (wdi_mdns_set_fqdn_cmd_req *)
16473 vos_mem_malloc(sizeof(*fqdn_info));
16474 if (!fqdn_info) {
16475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16476 "Failed to allocate buffer to send "
16477 "set_mdns_fqdn cmd");
16478 vos_mem_free(mdns_fqdn_info);
16479 return VOS_STATUS_E_NOMEM;
16480 }
16481
16482 vos_mem_zero(fqdn_info, sizeof(*fqdn_info));
16483
16484 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16485 if(NULL == wda_params)
16486 {
16487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16488 "%s: VOS MEM Alloc Failure", __func__);
16489 VOS_ASSERT(0);
16490 vos_mem_free(fqdn_info);
16491 vos_mem_free(mdns_fqdn_info);
16492 return VOS_STATUS_E_NOMEM;
16493 }
16494
16495 fqdn_info->bss_idx = mdns_fqdn_info->bss_idx;
16496 fqdn_info->type = mdns_fqdn_info->fqdn_type;
16497 fqdn_info->fqdn_len = mdns_fqdn_info->fqdn_len;
16498 vos_mem_copy(fqdn_info->fqdn_data, mdns_fqdn_info->fqdn_data,
16499 mdns_fqdn_info->fqdn_len);
16500 fqdn_info->fqdn_data[mdns_fqdn_info->fqdn_len] = '\0';
16501
16502 wda_params->pWdaContext = wda_handle;
16503 wda_params->wdaMsgParam = mdns_fqdn_info;
16504 wda_params->wdaWdiApiMsgParam = (void *)fqdn_info;
16505
16506 wstatus = wdi_set_mdns_fqdn_req(fqdn_info,
16507 (wdi_mdns_fqdn_rsp_cb)
16508 wda_mdns_fqdn_rsp_callback,
16509 wda_params);
16510 if(IS_WDI_STATUS_FAILURE(wstatus))
16511 {
16512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16513 "Failed to send wdi_set_mdns_fqdn_req cmd" );
16514 status = CONVERT_WDI2VOS_STATUS(wstatus);
16515 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16516 vos_mem_free(wda_params->wdaMsgParam);
16517 vos_mem_free(wda_params);
16518 }
16519
16520 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16521 "mDNS FQDN set");
16522 return status;
16523}
16524
16525/**
16526 * wda_set_mdns_response_req() - wda api to set mdns resp offload
16527 * @wda_handle: wda handle
16528 * @mdns_rsp_info: mdns resp offload info
16529 *
16530 * Return - 0 for success or else failure
16531 */
16532static int
16533wda_set_mdns_response_req(tWDA_CbContext *wda_handle,
16534 sir_mdns_resp_info_t *mdns_rsp_info)
16535{
16536 wdi_mdns_set_resp_req *rsp_info;
16537 tWDA_ReqParams *wda_params;
16538 WDI_Status wstatus;
16539 VOS_STATUS status = VOS_STATUS_SUCCESS;
16540
16541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16542 FL("---> %s"), __func__);
16543
16544 if(NULL == mdns_rsp_info)
16545 {
16546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16547 "%s: dhcp_server_offload_info received NULL",
16548 __func__);
16549 VOS_ASSERT(0) ;
16550 return VOS_STATUS_E_FAULT;
16551 }
16552
16553 rsp_info = (wdi_mdns_set_resp_req *)
16554 vos_mem_malloc(sizeof(*rsp_info));
16555 if (!rsp_info) {
16556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16557 "Failed to allocate buffer to send "
16558 "wdi_set_mdns_response_req cmd");
16559 vos_mem_free(mdns_rsp_info);
16560 return VOS_STATUS_E_NOMEM;
16561 }
16562
16563 vos_mem_zero(rsp_info, sizeof(*rsp_info));
16564
16565 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16566 if(NULL == wda_params)
16567 {
16568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16569 "%s: VOS MEM Alloc Failure", __func__);
16570 VOS_ASSERT(0);
16571 vos_mem_free(rsp_info);
16572 vos_mem_free(mdns_rsp_info);
16573 return VOS_STATUS_E_NOMEM;
16574 }
16575
16576 rsp_info->bss_idx = mdns_rsp_info->bss_idx;
16577 rsp_info->ar_count = mdns_rsp_info->resourceRecord_count;
16578 rsp_info->resp_len = mdns_rsp_info->resp_len;
16579 vos_mem_copy(rsp_info->resp_data, mdns_rsp_info->resp_data,
16580 mdns_rsp_info->resp_len);
16581 rsp_info->resp_data[mdns_rsp_info->resp_len] = '\0';
16582
16583 wda_params->pWdaContext = wda_handle;
16584 wda_params->wdaMsgParam = mdns_rsp_info;
16585 wda_params->wdaWdiApiMsgParam = (void *)rsp_info;
16586
16587 wstatus = wdi_set_mdns_response_req(rsp_info,
16588 (wdi_mdns_resp_rsp_cb)
16589 wda_mdns_resp_rsp_callback,
16590 wda_params);
16591 if(IS_WDI_STATUS_FAILURE(wstatus))
16592 {
16593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16594 "Failed to send wdi_set_mdns_response_req cmd" );
16595 status = CONVERT_WDI2VOS_STATUS(wstatus);
16596 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16597 vos_mem_free(wda_params->wdaMsgParam);
16598 vos_mem_free(wda_params);
16599 }
16600
16601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16602 "mDNS Response set!");
16603 return status;
16604}
16605
16606/**
16607 * wda_get_mdns_stats_req() - wda api to get mdns stats
16608 * @wda_handle: wda handle
16609 * @mdns_info: mdns info
16610 *
16611 * Return - 0 for success or else failure
16612 */
16613static int
16614wda_get_mdns_stats_req(tWDA_CbContext *wda_handle,
16615 sir_get_mdns_stats_info_t *mdns_info)
16616{
16617 wdi_mdns_get_stats_req *status_info;
16618 tWDA_ReqParams *wda_params;
16619 WDI_Status wstatus;
16620
16621 VOS_STATUS status = VOS_STATUS_SUCCESS;
16622
16623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16624 FL("---> %s"), __func__);
16625
16626 if(NULL == mdns_info)
16627 {
16628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16629 "%s: dhcp_server_offload_info received NULL",
16630 __func__);
16631 VOS_ASSERT(0) ;
16632 return VOS_STATUS_E_FAULT;
16633 }
16634
16635 status_info = (wdi_mdns_get_stats_req *)
16636 vos_mem_malloc(sizeof(*status_info));
16637 if (!status_info) {
16638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16639 "Failed to allocate buffer to send "
16640 "wdi_set_mdns_response_req cmd");
16641 vos_mem_free(mdns_info);
16642 return VOS_STATUS_E_NOMEM;
16643 }
16644
16645 vos_mem_zero(status_info, sizeof(*status_info));
16646
16647 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16648 if(NULL == wda_params)
16649 {
16650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16651 "%s: VOS MEM Alloc Failure", __func__);
16652 VOS_ASSERT(0);
16653 vos_mem_free(status_info);
16654 vos_mem_free(mdns_info);
16655 return VOS_STATUS_E_NOMEM;
16656 }
16657
16658 status_info->bss_idx = mdns_info->bss_idx;
16659
16660 wda_params->pWdaContext = wda_handle;
16661 wda_params->wdaMsgParam = mdns_info;
16662 wda_params->wdaWdiApiMsgParam = (void *)status_info;
16663
16664 wstatus = wdi_get_mdns_stats_req(status_info,
16665 (wdi_get_stats_rsp_cb)
16666 wda_get_stats_rsp_callback,
16667 wda_params);
16668 if(IS_WDI_STATUS_FAILURE(wstatus))
16669 {
16670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16671 "Failed to send wdi_set_mdns_response_req cmd" );
16672 status = CONVERT_WDI2VOS_STATUS(wstatus);
16673 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16674 vos_mem_free(wda_params->wdaMsgParam);
16675 vos_mem_free(wda_params);
16676 }
16677
16678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16679 "Get mDNS stats");
16680 return status;
16681}
16682#endif /* MDNS_OFFLOAD */
Anurag Chouhan83026002016-12-13 22:46:21 +053016683
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016684/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016685 * FUNCTION: WDA_McProcessMsg
16686 * Trigger DAL-AL to start CFG download
16687 */
16688VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
16689{
16690 VOS_STATUS status = VOS_STATUS_SUCCESS;
16691 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016692 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070016693 {
16694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016695 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 VOS_ASSERT(0);
16697 return VOS_STATUS_E_FAILURE;
16698 }
16699
16700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016701 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070016702
16703 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
16704 if(NULL == pWDA )
16705 {
16706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016707 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016708 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016709 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016710 return VOS_STATUS_E_FAILURE;
16711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016712 /* Process all the WDA messages.. */
16713 switch( pMsg->type )
16714 {
16715 case WNI_CFG_DNLD_REQ:
16716 {
16717 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070016718 /* call WDA complete event if config download success */
16719 if( VOS_IS_STATUS_SUCCESS(status) )
16720 {
16721 vos_WDAComplete_cback(pVosContext);
16722 }
16723 else
16724 {
16725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16726 "WDA Config Download failure" );
16727 }
16728 break ;
16729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016730 /*
16731 * Init SCAN request from PE, convert it into DAL format
16732 * and send it to DAL
16733 */
16734 case WDA_INIT_SCAN_REQ:
16735 {
16736 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
16737 break ;
16738 }
16739 /* start SCAN request from PE */
16740 case WDA_START_SCAN_REQ:
16741 {
16742 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
16743 break ;
16744 }
16745 /* end SCAN request from PE */
16746 case WDA_END_SCAN_REQ:
16747 {
16748 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
16749 break ;
16750 }
16751 /* end SCAN request from PE */
16752 case WDA_FINISH_SCAN_REQ:
16753 {
16754 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
16755 break ;
16756 }
16757 /* join request from PE */
16758 case WDA_CHNL_SWITCH_REQ:
16759 {
16760 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
16761 {
16762 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
16763 }
16764 else
16765 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080016766 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
16767 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
16768 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
16769 {
16770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16771 "call ProcessChannelSwitchReq_V1" );
16772 WDA_ProcessChannelSwitchReq_V1(pWDA,
16773 (tSwitchChannelParams*)pMsg->bodyptr) ;
16774 }
16775 else
16776 {
16777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16778 "call ProcessChannelSwitchReq" );
16779 WDA_ProcessChannelSwitchReq(pWDA,
16780 (tSwitchChannelParams*)pMsg->bodyptr) ;
16781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016782 }
16783 break ;
16784 }
16785 /* ADD BSS request from PE */
16786 case WDA_ADD_BSS_REQ:
16787 {
16788 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
16789 break ;
16790 }
16791 case WDA_ADD_STA_REQ:
16792 {
16793 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
16794 break ;
16795 }
16796 case WDA_DELETE_BSS_REQ:
16797 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016798 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
16799 break ;
16800 }
16801 case WDA_DELETE_STA_REQ:
16802 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016803 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
16804 break ;
16805 }
16806 case WDA_CONFIG_PARAM_UPDATE_REQ:
16807 {
16808 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
16809 break ;
16810 }
16811 case WDA_SET_BSSKEY_REQ:
16812 {
16813 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
16814 break ;
16815 }
16816 case WDA_SET_STAKEY_REQ:
16817 {
16818 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16819 break ;
16820 }
16821 case WDA_SET_STA_BCASTKEY_REQ:
16822 {
16823 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16824 break ;
16825 }
16826 case WDA_REMOVE_BSSKEY_REQ:
16827 {
16828 WDA_ProcessRemoveBssKeyReq(pWDA,
16829 (tRemoveBssKeyParams *)pMsg->bodyptr);
16830 break ;
16831 }
16832 case WDA_REMOVE_STAKEY_REQ:
16833 {
16834 WDA_ProcessRemoveStaKeyReq(pWDA,
16835 (tRemoveStaKeyParams *)pMsg->bodyptr);
16836 break ;
16837 }
16838 case WDA_REMOVE_STA_BCASTKEY_REQ:
16839 {
16840 /* TODO: currently UMAC is not sending this request, Add the code for
16841 handling this request when UMAC supports */
16842 break;
16843 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016844#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070016845 case WDA_TSM_STATS_REQ:
16846 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070016847 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016848 break;
16849 }
16850#endif
16851 case WDA_UPDATE_EDCA_PROFILE_IND:
16852 {
16853 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
16854 break;
16855 }
16856 case WDA_ADD_TS_REQ:
16857 {
16858 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
16859 break;
16860 }
16861 case WDA_DEL_TS_REQ:
16862 {
16863 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
16864 break;
16865 }
16866 case WDA_ADDBA_REQ:
16867 {
16868 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
16869 break;
16870 }
16871 case WDA_DELBA_IND:
16872 {
16873 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
16874 break;
16875 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080016876 case WDA_UPDATE_CHAN_LIST_REQ:
16877 {
16878 WDA_ProcessUpdateChannelList(pWDA,
16879 (tSirUpdateChanList *)pMsg->bodyptr);
16880 break;
16881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016882 case WDA_SET_LINK_STATE:
16883 {
16884 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
16885 break;
16886 }
16887 case WDA_GET_STATISTICS_REQ:
16888 {
16889 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
16890 break;
16891 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016892#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080016893 case WDA_GET_ROAM_RSSI_REQ:
16894 {
16895 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
16896 break;
16897 }
16898#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016899 case WDA_PWR_SAVE_CFG:
16900 {
16901 if(pWDA->wdaState == WDA_READY_STATE)
16902 {
16903 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
16904 }
16905 else
16906 {
16907 if(NULL != pMsg->bodyptr)
16908 {
16909 vos_mem_free(pMsg->bodyptr);
16910 }
16911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16912 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
16913 }
16914 break;
16915 }
mukul sharma6b53e202016-11-23 19:29:18 +053016916 case WDA_UPDATE_CFG_INT_PARAM:
16917 {
16918 if(pWDA->wdaState == WDA_READY_STATE)
16919 {
16920 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
16921 vos_mem_free(pMsg->bodyptr);
16922 }
16923 else
16924 {
16925 if(NULL != pMsg->bodyptr)
16926 {
16927 vos_mem_free(pMsg->bodyptr);
16928 }
16929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16930 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
16931 pWDA->wdaState );
16932 }
16933 break;
16934 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016935 case WDA_ENTER_IMPS_REQ:
16936 {
16937 if(pWDA->wdaState == WDA_READY_STATE)
16938 {
16939 WDA_ProcessEnterImpsReq(pWDA);
16940 }
16941 else
16942 {
16943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16944 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16945 }
16946 break;
16947 }
16948 case WDA_EXIT_IMPS_REQ:
16949 {
16950 if(pWDA->wdaState == WDA_READY_STATE)
16951 {
16952 WDA_ProcessExitImpsReq(pWDA);
16953 }
16954 else
16955 {
16956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16957 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16958 }
16959 break;
16960 }
16961 case WDA_ENTER_BMPS_REQ:
16962 {
16963 if(pWDA->wdaState == WDA_READY_STATE)
16964 {
16965 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
16966 }
16967 else
16968 {
16969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16970 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16971 }
16972 break;
16973 }
16974 case WDA_EXIT_BMPS_REQ:
16975 {
16976 if(pWDA->wdaState == WDA_READY_STATE)
16977 {
16978 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
16979 }
16980 else
16981 {
16982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16983 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16984 }
16985 break;
16986 }
16987 case WDA_ENTER_UAPSD_REQ:
16988 {
16989 if(pWDA->wdaState == WDA_READY_STATE)
16990 {
16991 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
16992 }
16993 else
16994 {
16995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16996 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16997 }
16998 break;
16999 }
17000 case WDA_EXIT_UAPSD_REQ:
17001 {
17002 if(pWDA->wdaState == WDA_READY_STATE)
17003 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017004 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070017005 }
17006 else
17007 {
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17009 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
17010 }
17011 break;
17012 }
17013 case WDA_UPDATE_UAPSD_IND:
17014 {
17015 if(pWDA->wdaState == WDA_READY_STATE)
17016 {
17017 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
17018 }
17019 else
17020 {
17021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17022 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
17023 }
17024 break;
17025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017026 case WDA_REGISTER_PE_CALLBACK :
17027 {
17028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17029 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
17030 /*TODO: store the PE callback */
17031 /* Do Nothing? MSG Body should be freed at here */
17032 if(NULL != pMsg->bodyptr)
17033 {
17034 vos_mem_free(pMsg->bodyptr);
17035 }
17036 break;
17037 }
17038 case WDA_SYS_READY_IND :
17039 {
17040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17041 "Handling msg type WDA_SYS_READY_IND " );
17042 pWDA->wdaState = WDA_READY_STATE;
17043 if(NULL != pMsg->bodyptr)
17044 {
17045 vos_mem_free(pMsg->bodyptr);
17046 }
17047 break;
17048 }
17049 case WDA_BEACON_FILTER_IND :
17050 {
17051 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
17052 break;
17053 }
17054 case WDA_BTC_SET_CFG:
17055 {
17056 /*TODO: handle this while dealing with BTC */
17057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17058 "Handling msg type WDA_BTC_SET_CFG " );
17059 /* Do Nothing? MSG Body should be freed at here */
17060 if(NULL != pMsg->bodyptr)
17061 {
17062 vos_mem_free(pMsg->bodyptr);
17063 }
17064 break;
17065 }
17066 case WDA_SIGNAL_BT_EVENT:
17067 {
17068 /*TODO: handle this while dealing with BTC */
17069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17070 "Handling msg type WDA_SIGNAL_BT_EVENT " );
17071 /* Do Nothing? MSG Body should be freed at here */
17072 if(NULL != pMsg->bodyptr)
17073 {
17074 vos_mem_free(pMsg->bodyptr);
17075 }
17076 break;
17077 }
17078 case WDA_CFG_RXP_FILTER_REQ:
17079 {
17080 WDA_ProcessConfigureRxpFilterReq(pWDA,
17081 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
17082 break;
17083 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053017084 case WDA_MGMT_LOGGING_INIT_REQ:
17085 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053017086 WDA_ProcessFWLoggingInitReq(pWDA,
17087 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053017088 break;
17089 }
Siddharth Bhal64246172015-02-27 01:04:37 +053017090 case WDA_GET_FRAME_LOG_REQ:
17091 {
17092 WDA_ProcessGetFrameLogReq(pWDA,
17093 (tAniGetFrameLogReq *)pMsg->bodyptr);
17094 break;
17095 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017096 case WDA_START_RSSI_MONITOR_REQ:
17097 {
17098 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
17099 break;
17100 }
17101 case WDA_STOP_RSSI_MONITOR_REQ:
17102 {
17103 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
17104 break;
17105 }
Karthick Sa35b0692015-08-21 15:57:05 +053017106 case WDA_SEND_LOG_DONE_IND:
17107 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053017108 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053017109 break;
17110 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053017111 case WDA_FATAL_EVENT_LOGS_REQ:
17112 {
17113 WDA_ProcessFatalEventLogsReq(pWDA,
17114 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
17115 break;
17116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017117 case WDA_SET_HOST_OFFLOAD:
17118 {
17119 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
17120 break;
17121 }
17122 case WDA_SET_KEEP_ALIVE:
17123 {
17124 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
17125 break;
17126 }
17127#ifdef WLAN_NS_OFFLOAD
17128 case WDA_SET_NS_OFFLOAD:
17129 {
17130 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
17131 break;
17132 }
17133#endif //WLAN_NS_OFFLOAD
17134 case WDA_ADD_STA_SELF_REQ:
17135 {
17136 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
17137 break;
17138 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017139 case WDA_DEL_STA_SELF_REQ:
17140 {
17141 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
17142 break;
17143 }
17144 case WDA_WOWL_ADD_BCAST_PTRN:
17145 {
17146 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
17147 break;
17148 }
17149 case WDA_WOWL_DEL_BCAST_PTRN:
17150 {
17151 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
17152 break;
17153 }
17154 case WDA_WOWL_ENTER_REQ:
17155 {
17156 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
17157 break;
17158 }
17159 case WDA_WOWL_EXIT_REQ:
17160 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017161 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070017162 break;
17163 }
17164 case WDA_TL_FLUSH_AC_REQ:
17165 {
17166 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
17167 break;
17168 }
17169 case WDA_SIGNAL_BTAMP_EVENT:
17170 {
17171 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
17172 break;
17173 }
Abhishek Singh85b74712014-10-08 11:38:19 +053017174 case WDA_FW_STATS_GET_REQ:
17175 {
17176 WDA_ProcessFWStatsGetReq(pWDA,
17177 (tSirFWStatsGetReq *)pMsg->bodyptr);
17178 break;
17179 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053017180#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17181 case WDA_LINK_LAYER_STATS_SET_REQ:
17182 {
17183 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
17184 break;
17185 }
17186 case WDA_LINK_LAYER_STATS_GET_REQ:
17187 {
17188 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
17189 break;
17190 }
17191 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
17192 {
17193 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
17194 break;
17195 }
17196#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053017197#ifdef WLAN_FEATURE_EXTSCAN
17198 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
17199 {
17200 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
17201 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
17202 break;
17203 }
17204 case WDA_EXTSCAN_START_REQ:
17205 {
17206 WDA_ProcessEXTScanStartReq(pWDA,
17207 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
17208 break;
17209 }
17210 case WDA_EXTSCAN_STOP_REQ:
17211 {
17212 WDA_ProcessEXTScanStopReq(pWDA,
17213 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
17214 break;
17215 }
17216 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
17217 {
17218 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
17219 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
17220 break;
17221 }
17222 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
17223 {
17224 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
17225 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
17226 break;
17227 }
17228 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
17229 {
17230 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
17231 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
17232 break;
17233 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053017234 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
17235 {
17236 WDA_ProcessHighPriorityDataInfoInd(pWDA,
17237 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
17238 break;
17239 }
Dino Mycle41bdc942014-06-10 11:30:24 +053017240#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070017241#ifdef WDA_UT
17242 case WDA_WDI_EVENT_MSG:
17243 {
17244 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
17245 break ;
17246 }
17247#endif
17248 case WDA_UPDATE_BEACON_IND:
17249 {
17250 WDA_ProcessUpdateBeaconParams(pWDA,
17251 (tUpdateBeaconParams *)pMsg->bodyptr);
17252 break;
17253 }
17254 case WDA_SEND_BEACON_REQ:
17255 {
17256 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
17257 break;
17258 }
17259 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
17260 {
17261 WDA_ProcessUpdateProbeRspTemplate(pWDA,
17262 (tSendProbeRespParams *)pMsg->bodyptr);
17263 break;
17264 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017265#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070017266 case WDA_SET_MAX_TX_POWER_REQ:
17267 {
17268 WDA_ProcessSetMaxTxPowerReq(pWDA,
17269 (tMaxTxPowerParams *)pMsg->bodyptr);
17270 break;
17271 }
17272#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070017273 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
17274 {
17275 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
17276 pMsg->bodyptr);
17277 break;
17278 }
schang86c22c42013-03-13 18:41:24 -070017279 case WDA_SET_TX_POWER_REQ:
17280 {
17281 WDA_ProcessSetTxPowerReq(pWDA,
17282 (tSirSetTxPowerReq *)pMsg->bodyptr);
17283 break;
17284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017285 case WDA_SET_P2P_GO_NOA_REQ:
17286 {
17287 WDA_ProcessSetP2PGONOAReq(pWDA,
17288 (tP2pPsParams *)pMsg->bodyptr);
17289 break;
17290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017291 /* timer related messages */
17292 case WDA_TIMER_BA_ACTIVITY_REQ:
17293 {
17294 WDA_BaCheckActivity(pWDA) ;
17295 break ;
17296 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017297
17298 /* timer related messages */
17299 case WDA_TIMER_TRAFFIC_STATS_IND:
17300 {
17301 WDA_TimerTrafficStatsInd(pWDA);
17302 break;
17303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017304#ifdef WLAN_FEATURE_VOWIFI_11R
17305 case WDA_AGGR_QOS_REQ:
17306 {
17307 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
17308 break;
17309 }
17310#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070017311 case WDA_FTM_CMD_REQ:
17312 {
17313 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
17314 break ;
17315 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017316#ifdef FEATURE_OEM_DATA_SUPPORT
17317 case WDA_START_OEM_DATA_REQ:
17318 {
17319 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
17320 break;
17321 }
17322#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070017323 /* Tx Complete Time out Indication */
17324 case WDA_TX_COMPLETE_TIMEOUT_IND:
17325 {
17326 WDA_ProcessTxCompleteTimeOutInd(pWDA);
17327 break;
17328 }
17329 case WDA_WLAN_SUSPEND_IND:
17330 {
17331 WDA_ProcessWlanSuspendInd(pWDA,
17332 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
17333 break;
17334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017335 case WDA_WLAN_RESUME_REQ:
17336 {
17337 WDA_ProcessWlanResumeReq(pWDA,
17338 (tSirWlanResumeParam *)pMsg->bodyptr) ;
17339 break;
17340 }
17341
17342 case WDA_UPDATE_CF_IND:
17343 {
17344 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
17345 pMsg->bodyptr = NULL;
17346 break;
17347 }
17348#ifdef FEATURE_WLAN_SCAN_PNO
17349 case WDA_SET_PNO_REQ:
17350 {
17351 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
17352 break;
17353 }
17354 case WDA_UPDATE_SCAN_PARAMS_REQ:
17355 {
17356 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
17357 break;
17358 }
17359 case WDA_SET_RSSI_FILTER_REQ:
17360 {
17361 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
17362 break;
17363 }
17364#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017365#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017366 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017367 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017368 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017369 break;
17370 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053017371 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
17372 {
17373 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
17374 break;
17375 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017376#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017377 case WDA_SET_TX_PER_TRACKING_REQ:
17378 {
17379 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
17380 break;
17381 }
17382
17383#ifdef WLAN_FEATURE_PACKET_FILTERING
17384 case WDA_8023_MULTICAST_LIST_REQ:
17385 {
17386 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
17387 break;
17388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017389 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
17390 {
17391 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
17392 break;
17393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017394 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
17395 {
17396 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
17397 break;
17398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017399 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
17400 {
17401 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
17402 break;
17403 }
17404#endif // WLAN_FEATURE_PACKET_FILTERING
17405
17406
17407 case WDA_TRANSMISSION_CONTROL_IND:
17408 {
17409 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
17410 break;
17411 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017412 case WDA_SET_POWER_PARAMS_REQ:
17413 {
17414 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
17415 break;
17416 }
c_manjeecfd1efb2015-09-25 19:32:34 +053017417 case WDA_FW_MEM_DUMP_REQ:
17418 {
17419 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
17420 break;
17421 }
17422
Jeff Johnson295189b2012-06-20 16:38:30 -070017423#ifdef WLAN_FEATURE_GTK_OFFLOAD
17424 case WDA_GTK_OFFLOAD_REQ:
17425 {
17426 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
17427 break;
17428 }
17429
17430 case WDA_GTK_OFFLOAD_GETINFO_REQ:
17431 {
17432 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
17433 break;
17434 }
17435#endif //WLAN_FEATURE_GTK_OFFLOAD
17436
17437 case WDA_SET_TM_LEVEL_REQ:
17438 {
17439 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
17440 break;
17441 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053017442
Mohit Khanna4a70d262012-09-11 16:30:12 -070017443 case WDA_UPDATE_OP_MODE:
17444 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053017445 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
17446 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
17447 {
17448 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17449 }
17450 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070017451 {
17452 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
17453 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17454 else
17455 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017456 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017457 }
17458 else
17459 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017460 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017461 break;
17462 }
Chet Lanctot186b5732013-03-18 10:26:30 -070017463#ifdef WLAN_FEATURE_11W
17464 case WDA_EXCLUDE_UNENCRYPTED_IND:
17465 {
17466 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
17467 break;
17468 }
17469#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017470#ifdef FEATURE_WLAN_TDLS
17471 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
17472 {
17473 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
17474 break;
17475 }
17476#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017477 case WDA_DHCP_START_IND:
17478 {
17479 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17480 break;
17481 }
17482 case WDA_DHCP_STOP_IND:
17483 {
17484 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17485 break;
17486 }
Leo Chang9056f462013-08-01 19:21:11 -070017487#ifdef FEATURE_WLAN_LPHB
17488 case WDA_LPHB_CONF_REQ:
17489 {
17490 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
17491 break;
17492 }
17493#endif
Yue Mab9c86f42013-08-14 15:59:08 -070017494 case WDA_ADD_PERIODIC_TX_PTRN_IND:
17495 {
17496 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
17497 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
17498 break;
17499 }
17500 case WDA_DEL_PERIODIC_TX_PTRN_IND:
17501 {
17502 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
17503 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
17504 break;
17505 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017506 case WDA_RATE_UPDATE_IND:
17507 {
17508 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
17509 break;
17510 }
17511#ifdef WLAN_FEATURE_RMC
17512 case WDA_RMC_RULER_REQ:
17513 {
17514 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
17515 break;
17516 }
17517 case WDA_RMC_UPDATE_IND:
17518 {
17519 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
17520 break;
17521 }
17522 case WDA_GET_IBSS_PEER_INFO_REQ:
17523 {
17524 WDA_ProcessIbssPeerInfoReq(pWDA,
17525 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
17526 break;
17527 }
17528 case WDA_TX_FAIL_MONITOR_IND:
17529 {
17530 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
17531 break;
17532 }
17533#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053017534#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17535 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
17536 {
17537 WDA_ProcessPERRoamScanTriggerReq(pWDA,
17538 (tPERRoamScanStart *)pMsg->bodyptr);
17539 break;
17540 }
17541#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053017542#ifdef FEATURE_WLAN_BATCH_SCAN
17543 case WDA_SET_BATCH_SCAN_REQ:
17544 {
17545 WDA_ProcessSetBatchScanReq(pWDA,
17546 (tSirSetBatchScanReq *)pMsg->bodyptr);
17547 break;
17548 }
17549 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
17550 {
17551 WDA_ProcessTriggerBatchScanResultInd(pWDA,
17552 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
17553 break;
17554 }
17555 case WDA_STOP_BATCH_SCAN_IND:
17556 {
17557 WDA_ProcessStopBatchScanInd(pWDA,
17558 (tSirStopBatchScanInd *)pMsg->bodyptr);
17559 break;
17560 }
c_hpothu92367912014-05-01 15:18:17 +053017561 case WDA_GET_BCN_MISS_RATE_REQ:
17562 WDA_ProcessGetBcnMissRateReq(pWDA,
17563 (tSirBcnMissRateReq *)pMsg->bodyptr);
17564 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053017565#endif
17566
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053017567 case WDA_HT40_OBSS_SCAN_IND:
17568 {
17569 WDA_ProcessHT40OBSSScanInd(pWDA,
17570 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
17571 break;
17572 }
17573 case WDA_HT40_OBSS_STOP_SCAN_IND:
17574 {
17575 WDA_ProcessHT40OBSSStopScanInd(pWDA,
17576 (tANI_U8*)pMsg->bodyptr);
17577 break;
17578 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053017579// tdlsoffchan
17580#ifdef FEATURE_WLAN_TDLS
17581 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
17582 {
17583 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
17584 break;
17585 }
17586#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053017587 case WDA_SPOOF_MAC_ADDR_REQ:
17588 {
17589 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
17590 break;
17591 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053017592 case WDA_ENCRYPT_MSG_REQ:
17593 {
17594 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
17595 break;
17596 }
Anurag Chouhan83026002016-12-13 22:46:21 +053017597#ifdef DHCP_SERVER_OFFLOAD
17598 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
17599 {
17600 wda_process_dhcpserver_offload_req(pWDA,
17601 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
17602 break;
17603 }
17604#endif /* DHCP_SERVER_OFFLOAD */
Anurag Chouhan0b29de02016-12-16 13:18:40 +053017605#ifdef MDNS_OFFLOAD
17606 case WDA_SET_MDNS_OFFLOAD_CMD:
17607 wda_set_mdns_offload_req(pWDA,
17608 (sir_mdns_offload_info_t *)pMsg->bodyptr);
17609 break;
17610 case WDA_SET_MDNS_FQDN_CMD:
17611 wda_set_mdns_fqdn_req(pWDA,
17612 (sir_mdns_fqdn_info_t *)pMsg->bodyptr);
17613 break;
17614 case WDA_SET_MDNS_RESPONSE_CMD:
17615 wda_set_mdns_response_req(pWDA,
17616 (sir_mdns_resp_info_t *)pMsg->bodyptr);
17617 break;
17618 case WDA_GET_MDNS_STATUS_CMD:
17619 wda_get_mdns_stats_req(pWDA,
17620 (sir_get_mdns_stats_info_t *) pMsg->bodyptr);
17621 break;
17622#endif /* MDNS_OFFLOAD */
Srinivas Dasari32a79262015-02-19 13:04:49 +053017623 case WDA_NAN_REQUEST:
17624 {
17625 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
17626 break;
17627 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053017628 case WDA_SET_RTS_CTS_HTVHT:
17629 {
17630 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
17631 break;
17632 }
Katya Nigamf0511f62015-05-05 16:40:57 +053017633
17634 case WDA_MON_START_REQ:
17635 {
17636 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
17637 break;
17638 }
17639 case WDA_MON_STOP_REQ:
17640 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053017641 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053017642 break;
17643 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053017644 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
17645 {
17646 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
17647 break;
17648 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053017649 case WDA_WIFI_CONFIG_REQ:
17650 {
17651 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
17652 break;
17653 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017654#ifdef FEATURE_OEM_DATA_SUPPORT
17655 case WDA_START_OEM_DATA_REQ_IND_NEW:
17656 {
17657 WDA_ProcessStartOemDataReqIndNew(pWDA,
17658 (tOemDataReqNewConfig *)pMsg->bodyptr);
17659 break;
17660 }
17661#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053017662 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
17663 {
17664 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
17665 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
17666 break;
17667 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053017668 case WDA_MODIFY_ROAM_PARAMS_IND:
17669 {
17670 WDA_ProcessBcnMissPenaltyCount(pWDA,
17671 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
17672 break;
17673 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053017674
17675 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
17676 wda_process_set_allowed_action_frames_ind(pWDA,
17677 (struct sir_allowed_action_frames*)pMsg->bodyptr);
17678 break;
17679
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053017680 case WDA_PAUSE_TL_IND:
17681 {
17682 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
17683 break;
17684 }
Kapil Gupta3d923fb2016-12-20 18:59:27 +053017685#ifdef WLAN_FEATURE_APFIND
17686 case WDA_APFIND_SET_CMD:
17687 {
17688 WDA_Process_apfind_set_cmd(pWDA,
17689 (struct hal_apfind_request *)pMsg->bodyptr);
17690 }
17691#endif
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017692#ifdef SAP_AUTH_OFFLOAD
17693 case WDA_SET_SAP_AUTH_OFL:
17694 {
17695 wda_process_sap_auth_offload(pWDA,
17696 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
17697 break;
17698 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053017699 case WDA_SAP_OFL_ADD_STA:
17700 {
17701 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
17702 (tAddStaParams *)pMsg->bodyptr);
17703 break;
17704 }
17705 case WDA_SAP_OFL_DEL_STA:
17706 {
17707 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
17708 (tDeleteStaParams *)pMsg->bodyptr);
17709 break;
17710 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017711#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053017712 case WDA_CAP_TSF_REQ:
17713 {
17714 WDA_ProcessCapTsfReq(pWDA, (tSirCapTsfParams *)
17715 pMsg->bodyptr);
17716 break;
17717 }
17718 case WDA_GET_TSF_REQ:
17719 {
17720 WDA_ProcessGetTsfReq(pWDA, (tSirCapTsfParams *)pMsg->bodyptr);
17721 break;
17722 }
Anurag Chouhan6ee81542017-02-09 18:09:27 +053017723 case WDA_SET_ARP_STATS_REQ:
17724 {
17725 WDA_ProcessSetARPStatsReq(pWDA, (setArpStatsParams *)pMsg->bodyptr);
17726 break;
17727 }
17728 case WDA_GET_ARP_STATS_REQ:
17729 {
17730 WDA_ProcessGetARPStatsReq(pWDA, (getArpStatsParams *)pMsg->bodyptr);
17731 break;
17732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017733 default:
17734 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053017735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017736 "No Handling for msg type %x in WDA "
17737 ,pMsg->type);
17738 /* Do Nothing? MSG Body should be freed at here */
17739 if(NULL != pMsg->bodyptr)
17740 {
17741 vos_mem_free(pMsg->bodyptr);
17742 }
17743 //WDA_VOS_ASSERT(0) ;
17744 }
17745 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017746 return status ;
17747}
17748
Jeff Johnson295189b2012-06-20 16:38:30 -070017749/*
17750 * FUNCTION: WDA_LowLevelIndCallback
17751 * IND API callback from WDI, send Ind to PE
17752 */
17753void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
17754 void* pUserData )
17755{
17756 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
17757#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17758 tSirRSSINotification rssiNotification;
17759#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017760 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017761 {
17762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017763 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017764 VOS_ASSERT(0);
17765 return ;
17766 }
17767
17768 switch(wdiLowLevelInd->wdiIndicationType)
17769 {
17770 case WDI_RSSI_NOTIFICATION_IND:
17771 {
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17773 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017774#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17775 rssiNotification.bReserved =
17776 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
17777 rssiNotification.bRssiThres1NegCross =
17778 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
17779 rssiNotification.bRssiThres1PosCross =
17780 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
17781 rssiNotification.bRssiThres2NegCross =
17782 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
17783 rssiNotification.bRssiThres2PosCross =
17784 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
17785 rssiNotification.bRssiThres3NegCross =
17786 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
17787 rssiNotification.bRssiThres3PosCross =
17788 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080017789 rssiNotification.avgRssi = (v_S7_t)
17790 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070017791 WLANTL_BMPSRSSIRegionChangedNotification(
17792 pWDA->pVosContext,
17793 &rssiNotification);
17794#endif
17795 break ;
17796 }
17797 case WDI_MISSED_BEACON_IND:
17798 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017799 tpSirSmeMissedBeaconInd pMissBeacInd =
17800 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17802 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017803 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017804 if(NULL == pMissBeacInd)
17805 {
17806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17807 "%s: VOS MEM Alloc Failure", __func__);
17808 break;
17809 }
17810 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
17811 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
17812 pMissBeacInd->bssIdx =
17813 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
17814 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017815 break ;
17816 }
Kapil Gupta7a3d9b12016-12-20 20:36:38 +053017817#ifdef WLAN_FEATURE_APFIND
17818 case WDI_AP_FOUND_IND:
17819 {
17820 WDA_SendMsg(pWDA, WDA_AP_FIND_IND, NULL, 0) ;
17821 break ;
17822 }
17823#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017824 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
17825 {
17826 /* TODO: Decode Ind and send Ind to PE */
17827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17828 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
17829 break ;
17830 }
17831
17832 case WDI_MIC_FAILURE_IND:
17833 {
17834 tpSirSmeMicFailureInd pMicInd =
17835 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
17836
17837 if(NULL == pMicInd)
17838 {
17839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017841 break;
17842 }
17843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17844 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017845 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
17846 pMicInd->length = sizeof(tSirSmeMicFailureInd);
17847 vos_mem_copy(pMicInd->bssId,
17848 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
17849 sizeof(tSirMacAddr));
17850 vos_mem_copy(pMicInd->info.srcMacAddr,
17851 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
17852 sizeof(tSirMacAddr));
17853 vos_mem_copy(pMicInd->info.taMacAddr,
17854 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
17855 sizeof(tSirMacAddr));
17856 vos_mem_copy(pMicInd->info.dstMacAddr,
17857 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
17858 sizeof(tSirMacAddr));
17859 vos_mem_copy(pMicInd->info.rxMacAddr,
17860 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
17861 sizeof(tSirMacAddr));
17862 pMicInd->info.multicast =
17863 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
17864 pMicInd->info.keyId=
17865 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
17866 pMicInd->info.IV1=
17867 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
17868 vos_mem_copy(pMicInd->info.TSC,
17869 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070017870 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
17871 (void *)pMicInd , 0) ;
17872 break ;
17873 }
17874 case WDI_FATAL_ERROR_IND:
17875 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070017876 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070017877 /* TODO: Decode Ind and send Ind to PE */
17878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17879 "Received WDI_FATAL_ERROR_IND from WDI ");
17880 break ;
17881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017882 case WDI_DEL_STA_IND:
17883 {
Jeff Johnson295189b2012-06-20 16:38:30 -070017884 tpDeleteStaContext pDelSTACtx =
17885 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
17886
17887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17888 "Received WDI_DEL_STA_IND from WDI ");
17889 if(NULL == pDelSTACtx)
17890 {
17891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017893 break;
17894 }
17895 vos_mem_copy(pDelSTACtx->addr2,
17896 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
17897 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017898 vos_mem_copy(pDelSTACtx->bssId,
17899 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
17900 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017901 pDelSTACtx->assocId =
17902 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
17903 pDelSTACtx->reasonCode =
17904 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
17905 pDelSTACtx->staId =
17906 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070017907 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
17908 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017909 break ;
17910 }
17911 case WDI_COEX_IND:
17912 {
17913 tANI_U32 index;
17914 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053017915 tSirSmeCoexInd *pSmeCoexInd;
17916
17917 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
17918 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
17919 {
17920 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
17921 {
17922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17923 FL("Coex state: 0x%x coex feature: 0x%x"),
17924 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
17925 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
17926
17927 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
17928 {
17929 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
17930 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
17931 }
17932 }
17933 break;
17934 }
17935
17936 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017937 if(NULL == pSmeCoexInd)
17938 {
17939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017940 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017941 break;
17942 }
17943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17944 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017945 /* Message Header */
17946 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
17947 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017948 /* Info from WDI Indication */
17949 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
17950 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
17951 {
17952 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
17953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017954 /* VOS message wrapper */
17955 vosMsg.type = eWNI_SME_COEX_IND;
17956 vosMsg.bodyptr = (void *)pSmeCoexInd;
17957 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017958 /* Send message to SME */
17959 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17960 {
17961 /* free the mem and return */
17962 vos_mem_free((v_VOID_t *)pSmeCoexInd);
17963 }
17964 else
17965 {
17966 /* DEBUG */
17967 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17968 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
17969 pSmeCoexInd->coexIndType,
17970 pSmeCoexInd->coexIndData[0],
17971 pSmeCoexInd->coexIndData[1],
17972 pSmeCoexInd->coexIndData[2],
17973 pSmeCoexInd->coexIndData[3]);
17974 }
17975 break;
17976 }
17977 case WDI_TX_COMPLETE_IND:
17978 {
17979 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
17980 /* Calling TxCompleteAck Indication from wda context*/
17981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17982 "Complete Indication received from HAL");
17983 if( pWDA->pAckTxCbFunc )
17984 {
17985 if( VOS_STATUS_SUCCESS !=
17986 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
17987 {
17988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17989 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017990 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053017991 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017992 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
17993 else
17994 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017995 pWDA->pAckTxCbFunc = NULL;
17996 }
17997 else
17998 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053017999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070018000 "Tx Complete Indication is received after timeout ");
18001 }
18002 break;
18003 }
Viral Modid86bde22012-12-10 13:09:21 -080018004 case WDI_P2P_NOA_START_IND :
18005 {
18006 tSirP2PNoaStart *pP2pNoaStart =
18007 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
18008
18009 if (NULL == pP2pNoaStart)
18010 {
18011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18012 "Memory allocation failure, "
18013 "WDI_P2P_NOA_START_IND not forwarded");
18014 break;
18015 }
18016 pP2pNoaStart->status =
18017 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
18018 pP2pNoaStart->bssIdx =
18019 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
18020 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
18021 (void *)pP2pNoaStart , 0) ;
18022 break;
18023 }
18024
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053018025#ifdef FEATURE_WLAN_TDLS
18026 case WDI_TDLS_IND :
18027 {
18028 tSirTdlsInd *pTdlsInd =
18029 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
18030
18031 if (NULL == pTdlsInd)
18032 {
18033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18034 "Memory allocation failure, "
18035 "WDI_TDLS_IND not forwarded");
18036 break;
18037 }
18038 pTdlsInd->status =
18039 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
18040 pTdlsInd->assocId =
18041 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
18042 pTdlsInd->staIdx =
18043 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
18044 pTdlsInd->reasonCode =
18045 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
18046 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
18047 (void *)pTdlsInd , 0) ;
18048 break;
18049 }
18050#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070018051 case WDI_P2P_NOA_ATTR_IND :
18052 {
18053 tSirP2PNoaAttr *pP2pNoaAttr =
18054 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18056 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070018057 if (NULL == pP2pNoaAttr)
18058 {
18059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18060 "Memory allocation failure, "
18061 "WDI_P2P_NOA_ATTR_IND not forwarded");
18062 break;
18063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018064 pP2pNoaAttr->index =
18065 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
18066 pP2pNoaAttr->oppPsFlag =
18067 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
18068 pP2pNoaAttr->ctWin =
18069 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
18070
18071 pP2pNoaAttr->uNoa1IntervalCnt =
18072 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
18073 pP2pNoaAttr->uNoa1Duration =
18074 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
18075 pP2pNoaAttr->uNoa1Interval =
18076 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
18077 pP2pNoaAttr->uNoa1StartTime =
18078 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070018079 pP2pNoaAttr->uNoa2IntervalCnt =
18080 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
18081 pP2pNoaAttr->uNoa2Duration =
18082 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
18083 pP2pNoaAttr->uNoa2Interval =
18084 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
18085 pP2pNoaAttr->uNoa2StartTime =
18086 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070018087 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
18088 (void *)pP2pNoaAttr , 0) ;
18089 break;
18090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018091#ifdef FEATURE_WLAN_SCAN_PNO
18092 case WDI_PREF_NETWORK_FOUND_IND:
18093 {
18094 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070018095 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
18096 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
18097 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
18098 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
18099
Jeff Johnson295189b2012-06-20 16:38:30 -070018100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18101 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070018102 if (NULL == pPrefNetworkFoundInd)
18103 {
18104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18105 "Memory allocation failure, "
18106 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053018107 if (NULL !=
18108 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
18109 {
18110 wpalMemoryFree(
18111 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
18112 );
18113 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
18114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018115 break;
18116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018117 /* Message Header */
18118 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070018119 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070018120
18121 /* Info from WDI Indication */
18122 pPrefNetworkFoundInd->ssId.length =
18123 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070018124 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070018125 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
18126 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
18127 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070018128 if (NULL !=
18129 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
18130 {
18131 pPrefNetworkFoundInd->frameLength =
18132 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
18133 vos_mem_copy( pPrefNetworkFoundInd->data,
18134 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
18135 pPrefNetworkFoundInd->frameLength);
18136 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
18137 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
18138 }
18139 else
18140 {
18141 pPrefNetworkFoundInd->frameLength = 0;
18142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018143 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070018144 /* VOS message wrapper */
18145 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
18146 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
18147 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018148 /* Send message to SME */
18149 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18150 {
18151 /* free the mem and return */
18152 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
18153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018154 break;
18155 }
18156#endif // FEATURE_WLAN_SCAN_PNO
18157
18158#ifdef WLAN_WAKEUP_EVENTS
18159 case WDI_WAKE_REASON_IND:
18160 {
18161 vos_msg_t vosMsg;
18162 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
18163 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
18164 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
18165
18166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053018167 "[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 -070018168 wdiLowLevelInd->wdiIndicationType,
18169 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
18170 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
18171 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
18172
18173 if (NULL == pWakeReasonInd)
18174 {
18175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18176 "Memory allocation failure, "
18177 "WDI_WAKE_REASON_IND not forwarded");
18178 break;
18179 }
18180
18181 vos_mem_zero(pWakeReasonInd, allocSize);
18182
18183 /* Message Header */
18184 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
18185 pWakeReasonInd->mesgLen = allocSize;
18186
18187 /* Info from WDI Indication */
18188 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
18189 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
18190 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
18191 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
18192 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
18193 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
18194 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
18195 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
18196
18197 /* VOS message wrapper */
18198 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
18199 vosMsg.bodyptr = (void *) pWakeReasonInd;
18200 vosMsg.bodyval = 0;
18201
18202 /* Send message to SME */
18203 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18204 {
18205 /* free the mem and return */
18206 vos_mem_free((v_VOID_t *) pWakeReasonInd);
18207 }
18208
18209 break;
18210 }
18211#endif // WLAN_WAKEUP_EVENTS
18212
18213 case WDI_TX_PER_HIT_IND:
18214 {
18215 vos_msg_t vosMsg;
18216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
18217 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
18218 /* VOS message wrapper */
18219 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
18220 vosMsg.bodyptr = NULL;
18221 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018222 /* Send message to SME */
18223 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18224 {
18225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
18226 }
18227 break;
18228 }
Abhishek Singh00b71972016-01-07 10:51:04 +053018229#ifdef WLAN_FEATURE_RMC
18230 case WDI_TX_FAIL_IND:
18231 {
18232 if (pWDA->txFailIndCallback)
18233 {
18234 pWDA->txFailIndCallback(
18235 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
18236 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
18237 }
18238 break;
18239 }
18240#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070018241
Leo Chang9056f462013-08-01 19:21:11 -070018242#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070018243 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070018244 {
Leo Changd9df8aa2013-09-26 13:32:26 -070018245 vos_msg_t vosMsg;
18246 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070018247
Leo Changd9df8aa2013-09-26 13:32:26 -070018248 lphbInd =
18249 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
18250 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070018251 {
18252 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18253 "%s: LPHB IND buffer alloc Fail", __func__);
18254 return ;
18255 }
18256
Leo Changd9df8aa2013-09-26 13:32:26 -070018257 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070018258 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070018259 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070018260 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070018261 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070018262 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
18263
18264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070018265 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070018266 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
18267
Leo Changd9df8aa2013-09-26 13:32:26 -070018268 vosMsg.type = eWNI_SME_LPHB_IND;
18269 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070018270 vosMsg.bodyval = 0;
18271 /* Send message to SME */
18272 if (VOS_STATUS_SUCCESS !=
18273 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18274 {
18275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18276 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070018277 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070018278 }
18279 break;
18280 }
18281#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070018282 case WDI_PERIODIC_TX_PTRN_FW_IND:
18283 {
18284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18285 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
18286 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
18287 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
18288 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
18289 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
18290 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
18291
18292 break;
18293 }
Leo Chang9056f462013-08-01 19:21:11 -070018294
Ravi Joshid2ca7c42013-07-23 08:37:49 -070018295 case WDI_IBSS_PEER_INACTIVITY_IND:
18296 {
18297 tSirIbssPeerInactivityInd *pIbssInd =
18298 (tSirIbssPeerInactivityInd *)
18299 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
18300
18301 if (NULL == pIbssInd)
18302 {
18303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18304 "Memory allocation failure, "
18305 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
18306 break;
18307 }
18308
18309 pIbssInd->bssIdx =
18310 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
18311 pIbssInd->staIdx =
18312 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
18313 vos_mem_copy(pIbssInd->peerAddr,
18314 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
18315 sizeof(tSirMacAddr));
18316 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
18317 break;
18318 }
18319
Abhishek Singh00b71972016-01-07 10:51:04 +053018320#ifdef WLAN_FEATURE_RMC
18321 case WDI_RMC_RULER_PICK_NEW :
18322 {
18323 tSirRmcUpdateInd *pRmcUpdateInd =
18324 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
18325
18326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18327 "Received WDI_RMC_UPDATE_IND from WDI");
18328 if (NULL == pRmcUpdateInd)
18329 {
18330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18331 "Memory allocation failure, "
18332 "WDI_RMC_UPDATE_IND not forwarded");
18333 break;
18334 }
18335
18336 pRmcUpdateInd->indication =
18337 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
18338 pRmcUpdateInd->role =
18339 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
18340
18341 /* Copy the mcast transmitter which should be us */
18342 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
18343 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
18344 mcastTransmitter,
18345 sizeof(tSirMacAddr));
18346 /* Copy the mcast group address */
18347 vos_mem_copy(pRmcUpdateInd->mcastGroup,
18348 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
18349 sizeof(tSirMacAddr));
18350 vos_mem_copy(pRmcUpdateInd->mcastRuler,
18351 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
18352 sizeof(tSirMacAddr));
18353 vos_mem_copy(pRmcUpdateInd->ruler,
18354 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
18355 sizeof(pRmcUpdateInd->ruler));
18356
18357 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
18358 break;
18359 }
18360#endif /* WLAN_FEATURE_RMC */
18361
Rajeev79dbe4c2013-10-05 11:03:42 +053018362#ifdef FEATURE_WLAN_BATCH_SCAN
18363 case WDI_BATCH_SCAN_RESULT_IND:
18364 {
18365 void *pBatchScanResult;
18366 void *pCallbackContext;
18367 tpAniSirGlobal pMac;
18368
18369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
18370 "Received WDI_BATCHSCAN_RESULT_IND from FW");
18371
18372 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053018373 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053018374 {
18375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18376 "%s:pWDA is NULL", __func__);
18377 VOS_ASSERT(0);
18378 return;
18379 }
18380
18381 pBatchScanResult =
18382 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
18383 if (NULL == pBatchScanResult)
18384 {
18385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18386 "%s:Batch scan result from FW is null can't invoke HDD callback",
18387 __func__);
18388 VOS_ASSERT(0);
18389 return;
18390 }
18391
18392 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18393 if (NULL == pMac)
18394 {
18395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18396 "%s:pMac is NULL", __func__);
18397 VOS_ASSERT(0);
18398 return;
18399 }
18400
18401 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
18402 /*call hdd callback with set batch scan response data*/
18403 if(pMac->pmc.batchScanResultCallback)
18404 {
18405 pMac->pmc.batchScanResultCallback(pCallbackContext,
18406 pBatchScanResult);
18407 }
18408 else
18409 {
18410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18411 "%s:HDD callback is null", __func__);
18412 VOS_ASSERT(0);
18413 }
18414 break;
18415 }
18416#endif
18417
Leo Chang0b0e45a2013-12-15 15:18:55 -080018418#ifdef FEATURE_WLAN_CH_AVOID
18419 case WDI_CH_AVOID_IND:
18420 {
18421 vos_msg_t vosMsg;
18422 tSirChAvoidIndType *chAvoidInd;
18423
18424 chAvoidInd =
18425 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
18426 if (NULL == chAvoidInd)
18427 {
18428 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18429 "%s: CH_AVOID IND buffer alloc Fail", __func__);
18430 return ;
18431 }
18432
18433 chAvoidInd->avoidRangeCount =
18434 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
18435 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
18436 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
18437 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
18438
18439 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18440 "%s : WDA CH avoid notification", __func__);
18441
18442 vosMsg.type = eWNI_SME_CH_AVOID_IND;
18443 vosMsg.bodyptr = chAvoidInd;
18444 vosMsg.bodyval = 0;
18445 /* Send message to SME */
18446 if (VOS_STATUS_SUCCESS !=
18447 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18448 {
18449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18450 "post eWNI_SME_CH_AVOID_IND to SME Failed");
18451 vos_mem_free(chAvoidInd);
18452 }
18453 break;
18454 }
18455#endif /* FEATURE_WLAN_CH_AVOID */
18456
Sunil Duttbd736ed2014-05-26 21:19:41 +053018457#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18458 case WDI_LL_STATS_RESULTS_IND:
18459 {
18460 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018461 tpAniSirGlobal pMac;
18462
18463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18464 "Received WDI_LL_STATS_RESULTS_IND from FW");
18465
18466 /*sanity check*/
18467 if (NULL == pWDA)
18468 {
18469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18470 "%s:pWDA is NULL", __func__);
18471 VOS_ASSERT(0);
18472 return;
18473 }
18474
18475 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053018476 (void *)wdiLowLevelInd->
18477 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018478 if (NULL == pLinkLayerStatsInd)
18479 {
18480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18481 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
18482 __func__);
18483 VOS_ASSERT(0);
18484 return;
18485 }
18486
18487 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18488 if (NULL == pMac)
18489 {
18490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18491 "%s:pMac is NULL", __func__);
18492 VOS_ASSERT(0);
18493 return;
18494 }
18495
Dino Mycled3d50022014-07-07 12:58:25 +053018496 /* call hdd callback with Link Layer Statistics.
18497 * vdev_id/ifacId in link_stats_results will be
18498 * used to retrieve the correct HDD context
18499 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053018500 if (pMac->sme.pLinkLayerStatsIndCallback)
18501 {
Dino Mycled3d50022014-07-07 12:58:25 +053018502 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053018503 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053018504 pLinkLayerStatsInd,
18505 wdiLowLevelInd->
18506 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053018507 }
18508 else
18509 {
18510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18511 "%s:HDD callback is null", __func__);
18512 }
18513 break;
18514 }
18515#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
18516
Dino Mycle41bdc942014-06-10 11:30:24 +053018517#ifdef WLAN_FEATURE_EXTSCAN
18518 case WDI_EXTSCAN_PROGRESS_IND:
18519 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
18520 case WDI_EXTSCAN_SCAN_RESULT_IND:
18521 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053018522 {
18523 void *pEXTScanData;
18524 void *pCallbackContext;
18525 tpAniSirGlobal pMac;
18526 tANI_U16 indType;
18527
18528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18529 "Received WDI_EXTSCAN Indications from FW");
18530 /*sanity check*/
18531 if (NULL == pWDA)
18532 {
18533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18534 "%s:pWDA is NULL", __func__);
18535 VOS_ASSERT(0);
18536 return;
18537 }
18538 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
18539 {
18540 indType = WDA_EXTSCAN_PROGRESS_IND;
18541
18542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18543 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
18544 }
18545 if (wdiLowLevelInd->wdiIndicationType ==
18546 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
18547 {
18548 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
18549
18550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18551 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
18552 }
18553 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
18554 {
18555 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
18556
18557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18558 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
18559 }
18560 if (wdiLowLevelInd->wdiIndicationType ==
18561 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
18562 {
18563 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
18564
18565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18566 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
18567 }
Dino Mycle41bdc942014-06-10 11:30:24 +053018568
18569 pEXTScanData =
18570 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
18571 if (NULL == pEXTScanData)
18572 {
18573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18574 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
18575 __func__);
18576 VOS_ASSERT(0);
18577 return;
18578 }
18579
18580 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18581 if (NULL == pMac)
18582 {
18583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18584 "%s:pMac is NULL", __func__);
18585 VOS_ASSERT(0);
18586 return;
18587 }
18588
18589 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18590
18591 if(pMac->sme.pEXTScanIndCb)
18592 {
18593 pMac->sme.pEXTScanIndCb(pCallbackContext,
18594 indType,
18595 pEXTScanData);
18596 }
18597 else
18598 {
18599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18600 "%s:HDD callback is null", __func__);
18601 }
18602 break;
18603 }
18604#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053018605 case WDI_DEL_BA_IND:
18606 {
18607 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053018608 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053018609
18610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18611 "Received WDI_DEL_BA_IND from WDI ");
18612 if(NULL == pDelBAInd)
18613 {
18614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18615 "%s: VOS MEM Alloc Failure", __func__);
18616 break;
18617 }
18618 vos_mem_copy(pDelBAInd->peerMacAddr,
18619 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
18620 sizeof(tSirMacAddr));
18621 vos_mem_copy(pDelBAInd->bssId,
18622 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
18623 sizeof(tSirMacAddr));
18624 pDelBAInd->staIdx =
18625 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
18626 pDelBAInd->baTID =
18627 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
18628 pDelBAInd->baDirection =
18629 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
18630 pDelBAInd->reasonCode =
18631 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
18632
18633 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
18634 (void *)pDelBAInd , 0) ;
18635 break;
18636 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053018637 case WDI_NAN_EVENT_IND:
18638 {
18639 vos_msg_t vosMsg;
18640 tpSirNanEvent pSirNanEvent = NULL;
18641
18642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18643 "Received WDI_NAN_EVENT");
18644
18645 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
18646 - sizeof( pSirNanEvent->event_data)
18647 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18648
18649 if (NULL == pSirNanEvent)
18650 {
18651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18652 "%s: VOS MEM Alloc Failure", __func__);
18653 VOS_ASSERT(0) ;
18654 break;
18655 }
18656
18657 pSirNanEvent->event_data_len =
18658 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
18659
18660 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
18661 {
18662 vos_mem_copy( pSirNanEvent->event_data,
18663 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
18664 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18665 }
18666
18667 /* VOS message wrapper */
18668 vosMsg.type = eWNI_SME_NAN_EVENT;
18669 vosMsg.bodyptr = pSirNanEvent;
18670 vosMsg.bodyval = 0;
18671
18672 /* Send message to SME */
18673 if (VOS_STATUS_SUCCESS
18674 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18675 {
18676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18677 "post eWNI_SME_NAN_EVENT to SME Failed");
18678 vos_mem_free(pSirNanEvent);
18679 }
18680 break;
18681 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018682 case WDI_LOST_LINK_PARAMS_IND:
18683 {
18684 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
18685 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053018686
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018687 if (NULL == pLostLinkParamInd)
18688 {
18689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18690 "%s: VOS MEM Alloc Failure", __func__);
18691 break;
18692 }
18693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18694 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
18695
18696 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
18697 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
18698 pLostLinkParamInd->info.bssIdx =
18699 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
18700 pLostLinkParamInd->info.rssi =
18701 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
18702 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
18703 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
18704 sizeof(tSirMacAddr));
18705 pLostLinkParamInd->info.linkFlCnt =
18706 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
18707 pLostLinkParamInd->info.linkFlTx =
18708 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
18709 pLostLinkParamInd->info.lastDataRate =
18710 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
18711 pLostLinkParamInd->info.rsvd1 =
18712 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
18713 pLostLinkParamInd->info.rsvd2 =
18714 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
18715 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
18716 (void *)pLostLinkParamInd , 0) ;
18717 break;
18718 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053018719 case WDI_RSSI_BREACHED_IND:
18720 {
18721 WDI_RssiBreachedIndType *pRssiBreachedInd;
18722 tpAniSirGlobal pMac;
18723
18724 pRssiBreachedInd =
18725 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
18726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18727 "Received WDI_RSSI_BREACHED_IND from FW");
18728
18729 vos_mem_copy(pRssiBreachedInd,
18730 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
18731 sizeof(WDI_RssiBreachedIndType));
18732
18733 /*sanity check*/
18734 if (NULL == pWDA)
18735 {
18736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18737 "%s:pWDA is NULL", __func__);
18738 vos_mem_free(pRssiBreachedInd);
18739 VOS_ASSERT(0);
18740 return;
18741 }
18742
18743 if (NULL == pRssiBreachedInd)
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 "%s:Breach indication from FW is null can't invoke HDD callback",
18747 __func__);
18748 VOS_ASSERT(0);
18749 return;
18750 }
18751
18752 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18753 if (NULL == pMac)
18754 {
18755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18756 "%s:pMac is NULL", __func__);
18757 VOS_ASSERT(0);
18758 vos_mem_free(pRssiBreachedInd);
18759 return;
18760 }
18761
18762 if (pMac->sme.rssiThresholdBreachedCb)
18763 {
18764 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
18765 }
18766 else
18767 {
18768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18769 "%s:HDD callback is null", __func__);
18770 }
18771 vos_mem_free(pRssiBreachedInd);
18772 break;
18773 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018774#ifdef FEATURE_OEM_DATA_SUPPORT
18775 case WDI_START_OEM_DATA_RSP_IND_NEW:
18776 {
18777 void *pCallbackContext;
18778 tpAniSirGlobal pMac;
18779 tANI_U16 indType;
18780 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018781 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018782
18783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18784 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
18785
18786 /*sanity check*/
18787 if (NULL == pWDA)
18788 {
18789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18790 "%s:pWDA is NULL", __func__);
18791 VOS_ASSERT(0);
18792 return;
18793 }
18794
18795 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
18796 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018797 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18798 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018799 if (NULL == pOemRspNewIndData)
18800 {
18801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18802 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
18803 __func__);
18804 VOS_ASSERT(0);
18805 return;
18806 }
18807
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018808 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18809 OemRspNewLen;
18810
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018811 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18812 if (NULL == pMac)
18813 {
18814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18815 "%s:pMac is NULL", __func__);
18816 VOS_ASSERT(0);
18817 return;
18818 }
18819
18820 pCallbackContext = pMac->sme.pOemDataCallbackContext;
18821
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18823 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
18824
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018825 if(pMac->sme.pOemDataIndCb)
18826 {
18827 pMac->sme.pOemDataIndCb(pCallbackContext,
18828 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018829 pOemRspNewIndData,
18830 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018831 }
18832 else
18833 {
18834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18835 "%s:HDD callback is null", __func__);
18836 }
18837 break;
18838 }
18839#endif /* FEATURE_OEM_DATA_SUPPORT */
18840
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 default:
18842 {
18843 /* TODO error */
18844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18845 "Received UNKNOWN Indication from WDI ");
18846 }
18847 }
18848 return ;
18849}
18850
Jeff Johnson295189b2012-06-20 16:38:30 -070018851/*
18852 * BA related processing in WDA.
18853 */
Jeff Johnson295189b2012-06-20 16:38:30 -070018854void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
18855 void* pUserData)
18856{
18857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18858 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070018859 if(NULL == pWdaParams)
18860 {
18861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018862 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018863 VOS_ASSERT(0) ;
18864 return ;
18865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018866 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070018867 vos_mem_free(pWdaParams->wdaMsgParam) ;
18868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018872 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
18873 {
18874 tANI_U8 i = 0 ;
18875 tBaActivityInd *baActivityInd = NULL ;
18876 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
18877 tANI_U8 allocSize = sizeof(tBaActivityInd)
18878 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
18879 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
18880 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018881 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018882 if(NULL == baActivityInd)
18883 {
18884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018886 VOS_ASSERT(0) ;
18887 return;
18888 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018889 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
18890 sizeof(tSirMacAddr)) ;
18891 baActivityInd->baCandidateCnt = baCandidateCount ;
18892
18893 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
18894 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
18895
18896 for(i = 0 ; i < baCandidateCount ; i++)
18897 {
18898 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018899 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
18900 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018901 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
18902 {
18903 baCandidate->baInfo[tid].fBaEnable =
18904 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
18905 baCandidate->baInfo[tid].startingSeqNum =
18906 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
18907 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018908 wdiBaCandidate++ ;
18909 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018911 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
18912 }
18913 else
18914 {
18915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18916 "BA Trigger RSP with Failure received ");
18917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018918 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018919}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018920
18921
18922/*
18923 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
18924 * during MCC
18925 */
18926void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
18927{
18928 wpt_uint32 enabled;
18929 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
18930 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
18931 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
18932
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018933 if (NULL == pMac )
18934 {
18935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18936 "%s: Invoked with invalid MAC context ", __func__ );
18937 VOS_ASSERT(0);
18938 return;
18939 }
18940
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018941 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18942 != eSIR_SUCCESS)
18943 {
18944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18945 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18946 return;
18947 }
18948
18949 if(!enabled)
18950 {
18951 return;
18952 }
18953
18954 if(NULL == pWDA)
18955 {
18956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18957 "%s:WDA context is NULL", __func__);
18958 VOS_ASSERT(0);
18959 return;
18960 }
18961
18962 if(activate)
18963 {
18964 if( VOS_STATUS_SUCCESS !=
18965 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18966 {
18967 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18968 "Traffic Stats Timer Start Failed ");
18969 return;
18970 }
18971 WDI_DS_ActivateTrafficStats();
18972 }
18973 else
18974 {
18975 WDI_DS_DeactivateTrafficStats();
18976 WDI_DS_ClearTrafficStats();
18977
18978 if( VOS_STATUS_SUCCESS !=
18979 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18980 {
18981 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18982 "Traffic Stats Timer Stop Failed ");
18983 return;
18984 }
18985 }
18986}
18987
18988/*
18989 * Traffic Stats Timer handler
18990 */
18991void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
18992{
18993 WDI_Status wdiStatus;
18994 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
18995 WDI_TrafficStatsIndType trafficStatsIndParams;
18996 wpt_uint32 length, enabled;
18997 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18998
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018999 if (NULL == pMac )
19000 {
19001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19002 "%s: Invoked with invalid MAC context ", __func__ );
19003 VOS_ASSERT(0);
19004 return;
19005 }
19006
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019007 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
19008 != eSIR_SUCCESS)
19009 {
19010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19011 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
19012 return;
19013 }
19014
19015 if(!enabled)
19016 {
19017 WDI_DS_DeactivateTrafficStats();
19018 return;
19019 }
19020
19021 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
19022
19023 if(pWdiTrafficStats != NULL)
19024 {
19025 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
19026 trafficStatsIndParams.length = length;
19027 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080019028 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019029 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
19030 trafficStatsIndParams.pUserData = pWDA;
19031
19032 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
19033
19034 if(WDI_STATUS_PENDING == wdiStatus)
19035 {
19036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19037 "Pending received for %s:%d ",__func__,__LINE__ );
19038 }
19039 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
19040 {
19041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19042 "Failure in %s:%d ",__func__,__LINE__ );
19043 }
19044
19045 WDI_DS_ClearTrafficStats();
19046 }
19047 else
19048 {
19049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
19050 "pWdiTrafficStats is Null");
19051 }
19052
19053 if( VOS_STATUS_SUCCESS !=
19054 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
19055 {
19056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
19057 "Traffic Stats Timer Start Failed ");
19058 return;
19059 }
19060}
19061
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053019062bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
19063{
19064 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
19065 return true;
19066 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
19067 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
19068 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
19069 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
19070 jiffies_to_msecs(jiffies)))
19071 {
19072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19073 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
19074 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
19075 return false;
19076 }
19077 return true;
19078}
19079
Jeff Johnson295189b2012-06-20 16:38:30 -070019080/*
19081 * BA Activity check timer handler
19082 */
19083void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
19084{
19085 tANI_U8 curSta = 0 ;
19086 tANI_U8 tid = 0 ;
19087 tANI_U8 size = 0 ;
19088 tANI_U8 baCandidateCount = 0 ;
19089 tANI_U8 newBaCandidate = 0 ;
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019090 tANI_U32 val, val1;
Jeff Johnson295189b2012-06-20 16:38:30 -070019091 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053019092 tpAniSirGlobal pMac;
19093
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053019094 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070019095 {
19096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053019097 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019098 VOS_ASSERT(0);
19099 return ;
19100 }
19101 if(WDA_MAX_STA < pWDA->wdaMaxSta)
19102 {
19103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19104 "Inconsistent STA entries in WDA");
19105 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053019106 }
19107 if(NULL == pWDA->pVosContext)
19108 {
19109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19110 "%s: pVosContext is NULL",__func__);
19111 VOS_ASSERT(0);
19112 return ;
19113 }
19114 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053019115 if(NULL == pMac)
19116 {
19117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19118 "%s: pMac is NULL",__func__);
19119 VOS_ASSERT(0);
19120 return ;
19121 }
19122
Abhishek Singh0644e482014-10-06 18:38:23 +053019123 if (wlan_cfgGetInt(pMac,
19124 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
19125 eSIR_SUCCESS)
19126 {
19127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19128 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
19129 val = 0;
19130 }
19131
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019132 if (wlan_cfgGetInt(pMac,
19133 WNI_CFG_ENABLE_TX_RX_AGGREGATION, &val1) !=
19134 eSIR_SUCCESS)
19135 {
19136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19137 "Unable to get WNI_CFG_ENABLE_TX_RX_AGGREGATION");
19138 val1 = 1;
19139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019140 /* walk through all STA entries and find out TX packet count */
19141 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
19142 {
Abhishek Singh0644e482014-10-06 18:38:23 +053019143 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080019144#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053019145 // We can only do BA on "hard" STAs.
19146 if (!(IS_HWSTA_IDX(curSta)))
19147 {
19148 continue;
19149 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080019150#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053019151 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
19152 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019153 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019154 tANI_U32 txPktCount = 0 ;
19155 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019156 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019157 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
19158 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070019159 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
19160 curSta, tid, &txPktCount)))
19161 {
19162#if 0
19163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
19164 "************* %d:%d, %d ",curSta, txPktCount,
19165 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
19166#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053019167 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
19168 (currentOperChan <= SIR_11B_CHANNEL_END)))
19169 {
19170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19171 "%s: BTC disabled aggregation - dont start "
19172 "TX ADDBA req",__func__);
19173 }
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019174 else if (!val1)
19175 {
19176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19177 "%s: aggregation disabled- dont start "
19178 "TX ADDBA req",__func__);
19179 }
Abhishek Singh0644e482014-10-06 18:38:23 +053019180 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019181 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053019182 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053019183 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
19184 pWDA->wdaGlobalSystemRole) && txPktCount )
19185 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
19186 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070019187 {
19188 /* get prepare for sending message to HAL */
19189 //baCandidate[baCandidateCount].staIdx = curSta ;
19190 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
19191 newBaCandidate = WDA_ENABLE_BA ;
19192 }
19193 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
19194 }
19195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019196 /* fill the entry for all the sta with given TID's */
19197 if(WDA_ENABLE_BA == newBaCandidate)
19198 {
19199 /* move to next BA candidate */
19200 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
19201 size += sizeof(WDI_TriggerBAReqCandidateType) ;
19202 baCandidateCount++ ;
19203 newBaCandidate = WDA_DISABLE_BA ;
19204 }
19205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019206 /* prepare and send message to hal */
19207 if( 0 < baCandidateCount)
19208 {
19209 WDI_Status status = WDI_STATUS_SUCCESS ;
19210 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
19211 tWDA_ReqParams *pWdaParams =
19212 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019213 if(NULL == pWdaParams)
19214 {
19215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019217 VOS_ASSERT(0) ;
19218 return;
19219 }
19220 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
19221 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
19222 if(NULL == wdiTriggerBaReq)
19223 {
19224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019226 VOS_ASSERT(0) ;
19227 vos_mem_free(pWdaParams);
19228 return;
19229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019230 do
19231 {
19232 WDI_TriggerBAReqinfoType *triggerBaInfo =
19233 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
19234 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
19235 /* TEMP_FIX: Need to see if WDI need check for assoc session for
19236 * for each request */
19237 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
19238 triggerBaInfo->ucBASessionID = 0;
19239 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
19240 } while(0) ;
19241 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
19242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019244 pWdaParams->pWdaContext = pWDA;
19245 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
19246 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053019247 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070019248 WDA_TriggerBaReqCallback, pWdaParams) ;
19249 if(IS_WDI_STATUS_FAILURE(status))
19250 {
19251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19252 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
19253 vos_mem_free(pWdaParams->wdaMsgParam) ;
19254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19255 vos_mem_free(pWdaParams) ;
19256 }
19257 }
19258 else
19259 {
19260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
19261 "There is no TID for initiating BA");
19262 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019263 if( VOS_STATUS_SUCCESS !=
19264 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
19265 {
19266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19267 "BA Activity Timer Stop Failed ");
19268 return ;
19269 }
19270 if( VOS_STATUS_SUCCESS !=
19271 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
19272 {
19273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19274 "BA Activity Timer Start Failed ");
19275 return;
19276 }
19277 return ;
19278}
Jeff Johnson295189b2012-06-20 16:38:30 -070019279/*
19280 * WDA common routine to create timer used by WDA.
19281 */
19282static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
19283{
Jeff Johnson295189b2012-06-20 16:38:30 -070019284 VOS_STATUS status = VOS_STATUS_SUCCESS ;
19285 tANI_U32 val = 0 ;
19286 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19287
19288 if(NULL == pMac)
19289 {
19290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019291 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019292 VOS_ASSERT(0);
19293 return VOS_STATUS_E_FAILURE;
19294 }
19295 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
19296 != eSIR_SUCCESS)
19297 {
19298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19299 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
19300 return VOS_STATUS_E_FAILURE;
19301 }
19302 val = SYS_MS_TO_TICKS(val) ;
19303
19304 /* BA activity check timer */
19305 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
19306 "BA Activity Check timer", WDA_TimerHandler,
19307 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
19308 if(status != TX_SUCCESS)
19309 {
19310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19311 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019312 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019314 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019315 /* Tx Complete Timeout timer */
19316 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
19317 "Tx Complete Check timer", WDA_TimerHandler,
19318 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019319 if(status != TX_SUCCESS)
19320 {
19321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19322 "Unable to create Tx Complete Timeout timer");
19323 /* Destroy timer of BA activity check timer */
19324 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19325 if(status != TX_SUCCESS)
19326 {
19327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19328 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019329 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019330 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019331 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019332 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019333
19334 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
19335
19336 /* Traffic Stats timer */
19337 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
19338 "Traffic Stats timer", WDA_TimerHandler,
19339 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
19340 if(status != TX_SUCCESS)
19341 {
19342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19343 "Unable to create traffic stats timer");
19344 /* Destroy timer of BA activity check timer */
19345 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19346 if(status != TX_SUCCESS)
19347 {
19348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19349 "Unable to Destroy BA activity timer");
19350 }
19351 /* Destroy timer of tx complete timer */
19352 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19353 if(status != TX_SUCCESS)
19354 {
19355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19356 "Unable to Tx complete timer");
19357 }
19358 return VOS_STATUS_E_FAILURE ;
19359 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019360 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019361}
Jeff Johnson295189b2012-06-20 16:38:30 -070019362/*
19363 * WDA common routine to destroy timer used by WDA.
19364 */
19365static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
19366{
19367 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019368 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19369 if(status != TX_SUCCESS)
19370 {
19371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19372 "Unable to Destroy Tx Complete Timeout timer");
19373 return eSIR_FAILURE ;
19374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019375 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19376 if(status != TX_SUCCESS)
19377 {
19378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19379 "Unable to Destroy BA activity timer");
19380 return eSIR_FAILURE ;
19381 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019382 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
19383 if(status != TX_SUCCESS)
19384 {
19385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19386 "Unable to Destroy traffic stats timer");
19387 return eSIR_FAILURE ;
19388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019389 return eSIR_SUCCESS ;
19390}
Jeff Johnson295189b2012-06-20 16:38:30 -070019391/*
19392 * WDA timer handler.
19393 */
19394void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
19395{
19396 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
19397 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019398 /*
19399 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
19400 */
19401 wdaMsg.type = timerInfo ;
19402 wdaMsg.bodyptr = NULL;
19403 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070019404 /* post the message.. */
19405 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
19406 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
19407 {
19408 vosStatus = VOS_STATUS_E_BADMSG;
19409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019410}
Jeff Johnson295189b2012-06-20 16:38:30 -070019411/*
19412 * WDA Tx Complete timeout Indication.
19413 */
19414void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
19415{
19416 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019417 tpSirTxBdStatus txBdStatus = {0};
19418
Jeff Johnson295189b2012-06-20 16:38:30 -070019419 if( pWDA->pAckTxCbFunc )
19420 {
19421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019422 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019423 /*Indicate failure*/
19424 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070019425 pWDA->pAckTxCbFunc = NULL;
19426 }
19427 else
19428 {
19429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019430 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070019431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019432}
Jeff Johnson295189b2012-06-20 16:38:30 -070019433/*
19434 * WDA Set REG Domain to VOS NV
19435 */
Abhishek Singha306a442013-11-07 18:39:01 +053019436eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
19437 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070019438{
Abhishek Singha306a442013-11-07 18:39:01 +053019439 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070019440 {
19441 return eHAL_STATUS_INVALID_PARAMETER;
19442 }
19443 return eHAL_STATUS_SUCCESS;
19444}
Jeff Johnson295189b2012-06-20 16:38:30 -070019445
Jeff Johnson295189b2012-06-20 16:38:30 -070019446#ifdef FEATURE_WLAN_SCAN_PNO
19447/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019448 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019449 *
19450 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019451void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019452{
19453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019454 tSirPNOScanReq *pPNOScanReqParams;
19455
Jeff Johnson295189b2012-06-20 16:38:30 -070019456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019457 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019458 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019459 {
19460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019462 VOS_ASSERT(0) ;
19463 return ;
19464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019465
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019466 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19467 if(pPNOScanReqParams->statusCallback)
19468 {
19469 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19470 (status == WDI_STATUS_SUCCESS) ?
19471 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
19472 }
19473
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019474 if (pPNOScanReqParams->enable == 1)
19475 {
19476 if (pPNOScanReqParams->aNetworks)
19477 vos_mem_free(pPNOScanReqParams->aNetworks);
19478 if (pPNOScanReqParams->p24GProbeTemplate)
19479 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19480 if (pPNOScanReqParams->p5GProbeTemplate)
19481 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19482 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19484 vos_mem_free(pWdaParams->wdaMsgParam);
19485 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019486
19487 return ;
19488}
Jeff Johnson295189b2012-06-20 16:38:30 -070019489/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019490 * FUNCTION: WDA_PNOScanReqCallback
19491 * Free memory.
19492 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
19493 */
19494void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019495{
Yue Ma7f44bbe2013-04-12 11:47:39 -070019496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019497 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019498
19499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19500 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19501
19502 if(NULL == pWdaParams)
19503 {
19504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19505 "%s: pWdaParams received NULL", __func__);
19506 VOS_ASSERT(0);
19507 return;
19508 }
19509
19510 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19511 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019512 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19513 if(pPNOScanReqParams->statusCallback)
19514 {
19515 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19516 VOS_STATUS_E_FAILURE);
19517 }
19518
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053019519 if (pPNOScanReqParams->enable == 1)
19520 {
19521 if (pPNOScanReqParams->aNetworks)
19522 vos_mem_free(pPNOScanReqParams->aNetworks);
19523 if (pPNOScanReqParams->p24GProbeTemplate)
19524 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19525 if (pPNOScanReqParams->p5GProbeTemplate)
19526 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19527 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19529 vos_mem_free(pWdaParams->wdaMsgParam);
19530 vos_mem_free(pWdaParams);
19531 }
19532
19533 return;
19534}
19535/*
19536 * FUNCTION: WDA_UpdateScanParamsRespCallback
19537 *
19538 */
19539void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
19540{
19541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019543 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019544 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019545 {
19546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019548 VOS_ASSERT(0) ;
19549 return ;
19550 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019551
19552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19553 vos_mem_free(pWdaParams->wdaMsgParam);
19554 vos_mem_free(pWdaParams);
19555
Jeff Johnson295189b2012-06-20 16:38:30 -070019556 return ;
19557}
Jeff Johnson295189b2012-06-20 16:38:30 -070019558/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019559 * FUNCTION: WDA_UpdateScanParamsReqCallback
19560 * Free memory.
19561 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
19562 */
19563void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19564{
19565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19566
19567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19568 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19569
19570 if(NULL == pWdaParams)
19571 {
19572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19573 "%s: pWdaParams received NULL", __func__);
19574 VOS_ASSERT(0);
19575 return;
19576 }
19577
19578 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19579 {
19580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19581 vos_mem_free(pWdaParams->wdaMsgParam);
19582 vos_mem_free(pWdaParams);
19583 }
19584
19585 return;
19586}
19587/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019588 * FUNCTION: WDA_ProcessSetPreferredNetworkList
19589 * Request to WDI to set Preferred Network List.Offload
19590 */
19591VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
19592 tSirPNOScanReq *pPNOScanReqParams)
19593{
Jeff Johnson43971f52012-07-17 12:26:56 -070019594 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019595 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
19596 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
19597 tWDA_ReqParams *pWdaParams ;
19598 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019600 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019601 if(NULL == pwdiPNOScanReqInfo)
19602 {
19603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019605 VOS_ASSERT(0);
19606 return VOS_STATUS_E_NOMEM;
19607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019608 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19609 if(NULL == pWdaParams)
19610 {
19611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019613 VOS_ASSERT(0);
19614 vos_mem_free(pwdiPNOScanReqInfo);
19615 return VOS_STATUS_E_NOMEM;
19616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019617 //
19618 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
19619 //
19620 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
19621 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070019622 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
19623 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
19624 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019625 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
19626 {
19627 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
19628 &pPNOScanReqParams->aNetworks[i],
19629 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
19630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019631 /*Scan timer intervals*/
19632 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
19633 &pPNOScanReqParams->scanTimers,
19634 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070019635 /*Probe template for 2.4GHz band*/
19636 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
19637 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19638 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019639 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
19640 pPNOScanReqParams->p24GProbeTemplate,
19641 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070019642 /*Probe template for 5GHz band*/
19643 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
19644 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19645 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019646 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
19647 pPNOScanReqParams->p5GProbeTemplate,
19648 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019649 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
19650 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019651
Jeff Johnson295189b2012-06-20 16:38:30 -070019652 /* Store Params pass it to WDI */
19653 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
19654 pWdaParams->pWdaContext = pWDA;
19655 /* Store param pointer as passed in by caller */
19656 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019657 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019658 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019659 if(IS_WDI_STATUS_FAILURE(status))
19660 {
19661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19662 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019663 if(pPNOScanReqParams->statusCallback)
19664 {
19665 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19666 VOS_STATUS_E_FAILURE);
19667 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019668 if (pPNOScanReqParams->enable == 1)
19669 {
19670 if (pPNOScanReqParams->aNetworks)
19671 vos_mem_free(pPNOScanReqParams->aNetworks);
19672 if (pPNOScanReqParams->p24GProbeTemplate)
19673 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19674 if (pPNOScanReqParams->p5GProbeTemplate)
19675 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19678 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019679
Jeff Johnson295189b2012-06-20 16:38:30 -070019680 pWdaParams->wdaWdiApiMsgParam = NULL;
19681 pWdaParams->wdaMsgParam = NULL;
19682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019683 return CONVERT_WDI2VOS_STATUS(status) ;
19684}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019685
19686#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19687
19688void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
19689{
19690 /*Convert the CSR Auth types to WDI Auth types */
19691 switch (csrAuthType)
19692 {
19693 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
19694 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19695 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019696#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019697 case eCSR_AUTH_TYPE_CCKM_WPA:
19698 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
19699 break;
19700#endif
19701 case eCSR_AUTH_TYPE_WPA:
19702 *AuthType = eWDA_AUTH_TYPE_WPA;
19703 break;
19704 case eCSR_AUTH_TYPE_WPA_PSK:
19705 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
19706 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019707#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019708 case eCSR_AUTH_TYPE_CCKM_RSN:
19709 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
19710 break;
19711#endif
19712 case eCSR_AUTH_TYPE_RSN:
19713 *AuthType = eWDA_AUTH_TYPE_RSN;
19714 break;
19715 case eCSR_AUTH_TYPE_RSN_PSK:
19716 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
19717 break;
19718#if defined WLAN_FEATURE_VOWIFI_11R
19719 case eCSR_AUTH_TYPE_FT_RSN:
19720 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
19721 break;
19722 case eCSR_AUTH_TYPE_FT_RSN_PSK:
19723 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
19724 break;
19725#endif
19726#ifdef FEATURE_WLAN_WAPI
19727 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
19728 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
19729 break;
19730 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
19731 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
19732 break;
19733#endif /* FEATURE_WLAN_WAPI */
19734 case eCSR_AUTH_TYPE_SHARED_KEY:
19735 case eCSR_AUTH_TYPE_AUTOSWITCH:
19736 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19737 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019738#ifdef WLAN_FEATURE_11W
19739 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
19740 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019741 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019742 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
19743 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
19744 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019745#endif
19746 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053019747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019748 "%s: Unknown Auth Type", __func__);
19749 break;
19750 }
19751}
19752void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
19753{
19754 switch (csrEncrType)
19755 {
19756 case eCSR_ENCRYPT_TYPE_NONE:
19757 *EncrType = WDI_ED_NONE;
19758 break;
19759 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
19760 case eCSR_ENCRYPT_TYPE_WEP40:
19761 *EncrType = WDI_ED_WEP40;
19762 break;
19763 case eCSR_ENCRYPT_TYPE_WEP104:
19764 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
19765 *EncrType = WDI_ED_WEP104;
19766 break;
19767 case eCSR_ENCRYPT_TYPE_TKIP:
19768 *EncrType = WDI_ED_TKIP;
19769 break;
19770 case eCSR_ENCRYPT_TYPE_AES:
19771 *EncrType = WDI_ED_CCMP;
19772 break;
19773#ifdef WLAN_FEATURE_11W
19774 case eCSR_ENCRYPT_TYPE_AES_CMAC:
19775 *EncrType = WDI_ED_AES_128_CMAC;
19776 break;
19777#endif
19778#ifdef FEATURE_WLAN_WAPI
19779 case eCSR_ENCRYPT_TYPE_WPI:
19780 *EncrType = WDI_ED_WPI;
19781 break;
19782#endif
19783 case eCSR_ENCRYPT_TYPE_ANY:
19784 *EncrType = WDI_ED_ANY;
19785 break;
19786
19787 default:
19788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19789 "%s: Unknown Encryption Type", __func__);
19790 break;
19791 }
19792}
19793
Kapil Gupta04ab1992016-06-26 13:36:51 +053019794#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19795VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
19796 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
19797{
19798 WDI_Status status;
19799 tWDA_ReqParams *pWdaParams ;
19800 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
19801
19802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19803 "------> %s " ,__func__);
19804
19805 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
19806 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
19807 if (NULL == pwdiPERRoamOffloadScanInfo) {
19808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19809 "%s: VOS MEM Alloc Failure", __func__);
19810 VOS_ASSERT(0);
19811 return VOS_STATUS_E_NOMEM;
19812 }
19813
19814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19815 if (NULL == pWdaParams) {
19816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19817 "%s: VOS MEM Alloc Failure", __func__);
19818 VOS_ASSERT(0);
19819 vos_mem_free(pwdiPERRoamOffloadScanInfo);
19820 return VOS_STATUS_E_NOMEM;
19821 }
19822
19823 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
19824 pPERRoamOffloadScanReqParams->rateUpThreshold;
19825 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
19826 pPERRoamOffloadScanReqParams->rateDownThreshold;
19827 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
19828 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
19829 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
19830 pPERRoamOffloadScanReqParams->PERtimerThreshold;
19831 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
19832 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053019833 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
19834 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053019835 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
19836 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
19837
19838 /* Store Params pass it to WDI */
19839 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
19840 pWdaParams->pWdaContext = pWDA;
19841
19842 /* Store param pointer as passed in by caller */
19843 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
19844 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
19845 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
19846 pWdaParams);
19847
19848 if(IS_WDI_STATUS_FAILURE(status)) {
19849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19850 "Failure in Send config PER roam params");
19851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19852 vos_mem_free(pWdaParams->wdaMsgParam);
19853 vos_mem_free(pWdaParams);
19854 }
19855 return CONVERT_WDI2VOS_STATUS(status) ;
19856}
19857#endif
19858
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019859/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019860 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019861 * Request to WDI to set Roam Offload Scan
19862 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019863VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019864 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
19865{
19866 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019867 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
19868 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019869 tWDA_ReqParams *pWdaParams ;
19870 v_U8_t csrAuthType;
19871 WDI_RoamNetworkType *pwdiRoamNetworkType;
19872 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
19873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19874 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019875 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019876 {
19877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19878 "%s: VOS MEM Alloc Failure", __func__);
19879 VOS_ASSERT(0);
19880 return VOS_STATUS_E_NOMEM;
19881 }
19882 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19883 if (NULL == pWdaParams)
19884 {
19885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19886 "%s: VOS MEM Alloc Failure", __func__);
19887 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019888 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019889 return VOS_STATUS_E_NOMEM;
19890 }
19891
19892 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019893 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019894 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019895 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
19896 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019897 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
19898 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
19899 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
19900 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
19901 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
19902 sizeof(pwdiRoamNetworkType->currAPbssid));
19903 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
19904 csrAuthType);
19905 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
19906 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
19907 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
19908 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
19909 pwdiRoamOffloadScanInfo->LookupThreshold =
19910 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080019911 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
19912 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019913 pwdiRoamOffloadScanInfo->RoamRssiDiff =
19914 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080019915 pwdiRoamOffloadScanInfo->MAWCEnabled =
19916 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019917 pwdiRoamOffloadScanInfo->Command =
19918 pRoamOffloadScanReqParams->Command ;
19919 pwdiRoamOffloadScanInfo->StartScanReason =
19920 pRoamOffloadScanReqParams->StartScanReason ;
19921 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
19922 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
19923 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
19924 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
19925 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
19926 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
19927 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
19928 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
19929 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
19930 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019931 pwdiRoamOffloadScanInfo->IsESEEnabled =
19932 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019933 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
19934 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
19935 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
19936 pwdiRoamNetworkType->ssId.ucLength =
19937 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
19938 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
19939 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
19940 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
19941 pwdiRoamNetworkType->ChannelCount =
19942 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
19943 pwdiRoamOffloadScanInfo->ChannelCacheType =
19944 pRoamOffloadScanReqParams->ChannelCacheType;
19945 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
19946 pRoamOffloadScanReqParams->ValidChannelList,
19947 pRoamOffloadScanReqParams->ValidChannelCount);
19948 pwdiRoamOffloadScanInfo->ValidChannelCount =
19949 pRoamOffloadScanReqParams->ValidChannelCount;
19950 pwdiRoamOffloadScanInfo->us24GProbeSize =
19951 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19952 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19953 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
19954 pRoamOffloadScanReqParams->p24GProbeTemplate,
19955 pwdiRoamOffloadScanInfo->us24GProbeSize);
19956 pwdiRoamOffloadScanInfo->us5GProbeSize =
19957 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19958 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19959 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
19960 pRoamOffloadScanReqParams->p5GProbeTemplate,
19961 pwdiRoamOffloadScanInfo->us5GProbeSize);
19962 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
19963 pRoamOffloadScanReqParams->MDID.mdiePresent;
19964 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
19965 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019966 pwdiRoamOffloadScanInfo->nProbes =
19967 pRoamOffloadScanReqParams->nProbes;
19968 pwdiRoamOffloadScanInfo->HomeAwayTime =
19969 pRoamOffloadScanReqParams->HomeAwayTime;
Sreelakshmi Konamki70bfdaf2017-05-29 18:47:29 +053019970 pwdiRoamOffloadScanInfo->WeakZoneRssiThresholdForRoam =
19971 pRoamOffloadScanReqParams->WeakZoneRssiThresholdForRoam;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019972 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019973 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019974 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019975 pWdaParams->pWdaContext = pWDA;
19976 /* Store param pointer as passed in by caller */
19977 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019978 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019979 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
19980 if(IS_WDI_STATUS_FAILURE(status))
19981 {
19982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19983 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
19984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19985 vos_mem_free(pWdaParams->wdaMsgParam);
19986 pWdaParams->wdaWdiApiMsgParam = NULL;
19987 pWdaParams->wdaMsgParam = NULL;
19988 }
19989 return CONVERT_WDI2VOS_STATUS(status) ;
19990}
19991#endif
19992
Jeff Johnson295189b2012-06-20 16:38:30 -070019993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019994 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019995 *
19996 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019997void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019998{
19999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20000
20001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020003
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053020004 if(NULL == pWdaParams)
20005 {
20006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020007 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053020008 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070020009 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053020010 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020011
Jeff Johnson295189b2012-06-20 16:38:30 -070020012 vos_mem_free(pWdaParams->wdaMsgParam) ;
20013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20014 vos_mem_free(pWdaParams) ;
20015
20016 return ;
20017}
20018/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020019 * FUNCTION: WDA_RssiFilterReqCallback
20020 * Free memory.
20021 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
20022 */
20023void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20024{
20025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20026
20027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20028 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20029
20030 if(NULL == pWdaParams)
20031 {
20032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20033 "%s: pWdaParams received NULL", __func__);
20034 VOS_ASSERT(0);
20035 return;
20036 }
20037
20038 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20039 {
20040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20041 vos_mem_free(pWdaParams->wdaMsgParam);
20042 vos_mem_free(pWdaParams);
20043 }
20044
20045 return;
20046}
20047/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053020048 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070020049 * Request to WDI to set Preferred Network List.Offload
20050 */
20051VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
20052 tSirSetRSSIFilterReq* pRssiFilterParams)
20053{
Jeff Johnson43971f52012-07-17 12:26:56 -070020054 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020055 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
20056 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
20057 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020060 if(NULL == pwdiSetRssiFilterReqInfo)
20061 {
20062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020064 VOS_ASSERT(0);
20065 return VOS_STATUS_E_NOMEM;
20066 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20068 if(NULL == pWdaParams)
20069 {
20070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020072 VOS_ASSERT(0);
20073 vos_mem_free(pwdiSetRssiFilterReqInfo);
20074 return VOS_STATUS_E_NOMEM;
20075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020076 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020077 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
20078 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020079
Jeff Johnson295189b2012-06-20 16:38:30 -070020080 /* Store Params pass it to WDI */
20081 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
20082 pWdaParams->pWdaContext = pWDA;
20083 /* Store param pointer as passed in by caller */
20084 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020085 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020086 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020087 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020088 if(IS_WDI_STATUS_FAILURE(status))
20089 {
20090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20091 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
20092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20093 vos_mem_free(pWdaParams->wdaMsgParam);
20094 pWdaParams->wdaWdiApiMsgParam = NULL;
20095 pWdaParams->wdaMsgParam = NULL;
20096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020097 return CONVERT_WDI2VOS_STATUS(status) ;
20098}
20099
Jeff Johnson295189b2012-06-20 16:38:30 -070020100/*
20101 * FUNCTION: WDA_ProcessUpdateScanParams
20102 * Request to WDI to update Scan Parameters
20103 */
20104VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
20105 tSirUpdateScanParams *pUpdateScanParams)
20106{
Jeff Johnson43971f52012-07-17 12:26:56 -070020107 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020108 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
20109 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
20110 sizeof(WDI_UpdateScanParamsInfoType)) ;
20111 tWDA_ReqParams *pWdaParams ;
20112 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020115 if(NULL == wdiUpdateScanParamsInfoType)
20116 {
20117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020119 VOS_ASSERT(0);
20120 return VOS_STATUS_E_NOMEM;
20121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20123 if ( NULL == pWdaParams )
20124 {
20125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020127 VOS_ASSERT(0);
20128 vos_mem_free(wdiUpdateScanParamsInfoType);
20129 return VOS_STATUS_E_NOMEM;
20130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020131 //
20132 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
20133 //
Jeff Johnson295189b2012-06-20 16:38:30 -070020134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20135 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
20136 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
20137 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080020138 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070020139 pUpdateScanParams->b11dEnabled,
20140 pUpdateScanParams->b11dResolved,
20141 pUpdateScanParams->ucChannelCount,
20142 pUpdateScanParams->usPassiveMinChTime,
20143 pUpdateScanParams->usPassiveMaxChTime,
20144 pUpdateScanParams->usActiveMinChTime,
20145 pUpdateScanParams->usActiveMaxChTime,
20146 sizeof(tSirUpdateScanParams),
20147 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
20148
Jeff Johnson295189b2012-06-20 16:38:30 -070020149 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
20150 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070020151 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
20152 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070020153 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
20154 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070020155 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
20156 pUpdateScanParams->usActiveMaxChTime;
20157 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
20158 pUpdateScanParams->usActiveMinChTime;
20159 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
20160 pUpdateScanParams->usPassiveMaxChTime;
20161 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
20162 pUpdateScanParams->usPassiveMinChTime;
20163
Jeff Johnson295189b2012-06-20 16:38:30 -070020164 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053020165 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
20166 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070020167
Jeff Johnson295189b2012-06-20 16:38:30 -070020168 for ( i = 0; i <
20169 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
20170 i++)
20171 {
20172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20173 "Update Scan Parameters channel: %d",
20174 pUpdateScanParams->aChannels[i]);
20175
20176 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
20177 pUpdateScanParams->aChannels[i];
20178 }
20179
Yue Ma7f44bbe2013-04-12 11:47:39 -070020180 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
20181 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020182
Jeff Johnson295189b2012-06-20 16:38:30 -070020183 /* Store Params pass it to WDI */
20184 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
20185 pWdaParams->pWdaContext = pWDA;
20186 /* Store param pointer as passed in by caller */
20187 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070020188
Jeff Johnson295189b2012-06-20 16:38:30 -070020189
20190
20191 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020192 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020193 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020194 if(IS_WDI_STATUS_FAILURE(status))
20195 {
20196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20197 "Failure in Update Scan Params EQ WDI API, free all the memory " );
20198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20199 vos_mem_free(pWdaParams->wdaMsgParam);
20200 vos_mem_free(pWdaParams);
20201 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020202 return CONVERT_WDI2VOS_STATUS(status) ;
20203}
20204#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020205
20206#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
20207/*
20208 * FUNCTION: WDA_RoamOffloadScanReqCallback
20209 *
20210 */
20211void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
20212{
20213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020214 vos_msg_t vosMsg;
20215 wpt_uint8 reason = 0;
20216
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070020217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020218 "<------ %s " ,__func__);
20219 if (NULL == pWdaParams)
20220 {
20221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20222 "%s: pWdaParams received NULL", __func__);
20223 VOS_ASSERT(0) ;
20224 return ;
20225 }
20226 if ( pWdaParams != NULL )
20227 {
20228 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
20229 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020230 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20232 }
20233 if ( pWdaParams->wdaMsgParam != NULL)
20234 {
20235 vos_mem_free(pWdaParams->wdaMsgParam);
20236 }
20237
20238 vos_mem_free(pWdaParams) ;
20239 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020240 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
20241 vosMsg.bodyptr = NULL;
20242 if (WDI_STATUS_SUCCESS != status)
20243 {
20244 reason = 0;
20245 }
20246 vosMsg.bodyval = reason;
20247 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20248 {
20249 /* free the mem and return */
20250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070020251 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020252 }
20253
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020254 return ;
20255}
Kapil Gupta04ab1992016-06-26 13:36:51 +053020256
20257void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
20258{
20259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20260 vos_msg_t vosMsg;
20261 wpt_uint8 reason = 0;
20262
20263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20264 "<------ %s " ,__func__);
20265 if (NULL == pWdaParams) {
20266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20267 "%s: pWdaParams received NULL", __func__);
20268 VOS_ASSERT(0) ;
20269 return ;
20270 }
20271 if ( pWdaParams->wdaMsgParam != NULL)
20272 vos_mem_free(pWdaParams->wdaMsgParam);
20273
20274 vos_mem_free(pWdaParams) ;
20275 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
20276 vosMsg.bodyptr = NULL;
20277 if (WDI_STATUS_SUCCESS != status)
20278 reason = 0;
20279
20280 vosMsg.bodyval = reason;
20281 if (VOS_STATUS_SUCCESS !=
20282 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
20283 /* free the mem and return */
20284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20285 "%s: Failed to post the rsp to UMAC", __func__);
20286 }
20287
20288 return ;
20289}
20290
20291
20292void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
20293{
20294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20295 vos_msg_t vosMsg;
20296 wpt_uint8 reason = 0;
20297
20298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20299 "<------ %s " ,__func__);
20300 if (NULL == pWdaParams) {
20301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20302 "%s: pWdaParams received NULL", __func__);
20303 VOS_ASSERT(0) ;
20304 return ;
20305 }
20306 if ( pWdaParams->wdaMsgParam != NULL)
20307 vos_mem_free(pWdaParams->wdaMsgParam);
20308
20309 vos_mem_free(pWdaParams) ;
20310 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
20311 vosMsg.bodyptr = NULL;
20312 if (WDI_STATUS_SUCCESS != status)
20313 reason = 0;
20314
20315 vosMsg.bodyval = reason;
20316 if (VOS_STATUS_SUCCESS !=
20317 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
20318 /* free the mem and return */
20319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20320 "%s: Failed to post the rsp to UMAC", __func__);
20321 }
20322
20323 return ;
20324}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020325#endif
20326
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020327/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020328 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020329 *
20330 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020331void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020332{
20333 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20334
20335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20336 "<------ %s " ,__func__);
20337
20338 if(NULL == pWdaParams)
20339 {
20340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20341 "%s: pWdaParams received NULL", __func__);
20342 VOS_ASSERT(0);
20343 return;
20344 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020345
20346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20347 vos_mem_free(pWdaParams->wdaMsgParam);
20348 vos_mem_free(pWdaParams);
20349
20350 return;
20351}
20352/*
20353 * FUNCTION: WDA_SetPowerParamsReqCallback
20354 * Free memory.
20355 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
20356 */
20357void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
20358{
20359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20360
20361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20362 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20363
20364 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020365 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070020366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20367 "%s: pWdaParams received NULL", __func__);
20368 VOS_ASSERT(0);
20369 return;
20370 }
20371
20372 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20373 {
20374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20375 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020376 vos_mem_free(pWdaParams);
20377 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020378
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020379 return;
20380}
20381
Jeff Johnson295189b2012-06-20 16:38:30 -070020382#ifdef WLAN_FEATURE_PACKET_FILTERING
20383/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020384 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020385 *
20386 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020387void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020388 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
20389 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020390{
20391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020393 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020394 if(NULL == pWdaParams)
20395 {
20396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020397 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020398 VOS_ASSERT(0) ;
20399 return ;
20400 }
20401
20402 vos_mem_free(pWdaParams->wdaMsgParam) ;
20403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20404 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020405 //print a msg, nothing else to do
20406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020407 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020408 return ;
20409}
Jeff Johnson295189b2012-06-20 16:38:30 -070020410/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020411 * FUNCTION: WDA_8023MulticastListReqCallback
20412 * Free memory.
20413 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
20414 */
20415void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
20416{
20417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20418
20419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20420 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20421
20422 if(NULL == pWdaParams)
20423 {
20424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20425 "%s: pWdaParams received NULL", __func__);
20426 VOS_ASSERT(0);
20427 return;
20428 }
20429
20430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20431 {
20432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20433 vos_mem_free(pWdaParams->wdaMsgParam);
20434 vos_mem_free(pWdaParams);
20435 }
20436
20437 return;
20438}
20439/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020440 * FUNCTION: WDA_Process8023MulticastListReq
20441 * Request to WDI to add 8023 Multicast List
20442 */
20443VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
20444 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
20445{
Jeff Johnson43971f52012-07-17 12:26:56 -070020446 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020447 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
20448 tWDA_ReqParams *pWdaParams ;
20449 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020452 pwdiFltPktSetMcListReqParamsType =
20453 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
20454 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
20455 ) ;
20456 if(NULL == pwdiFltPktSetMcListReqParamsType)
20457 {
20458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020460 return VOS_STATUS_E_NOMEM;
20461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20463 if(NULL == pWdaParams)
20464 {
20465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020467 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
20468 return VOS_STATUS_E_NOMEM;
20469 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020470
Jeff Johnson295189b2012-06-20 16:38:30 -070020471 //
20472 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
20473 //
20474 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070020475 pRcvFltMcAddrList->ulMulticastAddrCnt;
20476
20477 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
20478 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
20479 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
20480 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
20481
Jeff Johnson295189b2012-06-20 16:38:30 -070020482 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
20483 {
20484 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
20485 &(pRcvFltMcAddrList->multicastAddr[i]),
20486 sizeof(tSirMacAddr));
20487 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020488 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
20489 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020490
Jeff Johnson295189b2012-06-20 16:38:30 -070020491 /* Store Params pass it to WDI */
20492 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
20493 pWdaParams->pWdaContext = pWDA;
20494 /* Store param pointer as passed in by caller */
20495 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070020496 status = WDI_8023MulticastListReq(
20497 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020498 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020499 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020500 if(IS_WDI_STATUS_FAILURE(status))
20501 {
20502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20503 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
20504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20505 vos_mem_free(pWdaParams->wdaMsgParam);
20506 vos_mem_free(pWdaParams);
20507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020508 return CONVERT_WDI2VOS_STATUS(status) ;
20509}
Jeff Johnson295189b2012-06-20 16:38:30 -070020510/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020511 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020512 *
20513 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020514void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020515 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
20516 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020517{
20518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020521 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070020522 if(NULL == pWdaParams)
20523 {
20524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020525 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020526 VOS_ASSERT(0) ;
20527 return ;
20528 }
20529
20530 vos_mem_free(pWdaParams->wdaMsgParam) ;
20531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20532 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020533 //print a msg, nothing else to do
20534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020535 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020536 return ;
20537}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020538
20539/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020540 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
20541 * Free memory.
20542 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020543 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020544void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020545 void* pUserData)
20546{
20547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20548
20549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20550 "<------ %s, wdiStatus: %d",
20551 __func__, wdiStatus);
20552
20553 if (NULL == pWdaParams)
20554 {
20555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20556 "%s: Invalid pWdaParams pointer", __func__);
20557 VOS_ASSERT(0);
20558 return;
20559 }
20560
20561 if (IS_WDI_STATUS_FAILURE(wdiStatus))
20562 {
20563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20564 vos_mem_free(pWdaParams->wdaMsgParam);
20565 vos_mem_free(pWdaParams);
20566 }
20567
20568 return;
20569}
20570
Jeff Johnson295189b2012-06-20 16:38:30 -070020571/*
20572 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
20573 * Request to WDI to set Receive Filters
20574 */
20575VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
20576 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
20577{
Jeff Johnson43971f52012-07-17 12:26:56 -070020578 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020579 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
20580 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
20581 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
20582 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
20583 tWDA_ReqParams *pWdaParams ;
20584 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020587 if(NULL == pwdiSetRcvPktFilterReqParamsType)
20588 {
20589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020591 VOS_ASSERT(0);
20592 return VOS_STATUS_E_NOMEM;
20593 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20595 if(NULL == pWdaParams)
20596 {
20597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020599 VOS_ASSERT(0);
20600 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
20601 return VOS_STATUS_E_NOMEM;
20602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020603 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
20604 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
20605 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
20606 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070020607 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
20608 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
20609
20610 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
20611 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020612
20613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20614 "FID %d FT %d NParams %d CT %d",
20615 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
20616 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
20617 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
20618 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070020619 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
20620 {
20621 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
20622 &pRcvPktFilterCfg->paramsData[i],
20623 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070020624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020625 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020626 pwdiSetRcvPktFilterReqParamsType->
20627 wdiPktFilterCfg.paramsData[i].protocolLayer,
20628 pwdiSetRcvPktFilterReqParamsType->
20629 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070020630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020631 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020632 pwdiSetRcvPktFilterReqParamsType->
20633 wdiPktFilterCfg.paramsData[i].dataOffset,
20634 pwdiSetRcvPktFilterReqParamsType->
20635 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070020636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020637 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020638 pwdiSetRcvPktFilterReqParamsType->
20639 wdiPktFilterCfg.paramsData[i].compareData[0],
20640 pwdiSetRcvPktFilterReqParamsType->
20641 wdiPktFilterCfg.paramsData[i].compareData[1],
20642 pwdiSetRcvPktFilterReqParamsType->
20643 wdiPktFilterCfg.paramsData[i].compareData[2],
20644 pwdiSetRcvPktFilterReqParamsType->
20645 wdiPktFilterCfg.paramsData[i].compareData[3],
20646 pwdiSetRcvPktFilterReqParamsType->
20647 wdiPktFilterCfg.paramsData[i].compareData[4],
20648 pwdiSetRcvPktFilterReqParamsType->
20649 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020651 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020652 pwdiSetRcvPktFilterReqParamsType->
20653 wdiPktFilterCfg.paramsData[i].dataMask[0],
20654 pwdiSetRcvPktFilterReqParamsType->
20655 wdiPktFilterCfg.paramsData[i].dataMask[1],
20656 pwdiSetRcvPktFilterReqParamsType->
20657 wdiPktFilterCfg.paramsData[i].dataMask[2],
20658 pwdiSetRcvPktFilterReqParamsType->
20659 wdiPktFilterCfg.paramsData[i].dataMask[3],
20660 pwdiSetRcvPktFilterReqParamsType->
20661 wdiPktFilterCfg.paramsData[i].dataMask[4],
20662 pwdiSetRcvPktFilterReqParamsType->
20663 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020664 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020665 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020666 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020667 /* Store Params pass it to WDI */
20668 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
20669 pWdaParams->pWdaContext = pWDA;
20670 /* Store param pointer as passed in by caller */
20671 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070020672 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020673 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020674 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020675 if(IS_WDI_STATUS_FAILURE(status))
20676 {
20677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20678 "Failure in SetFilter(),free all the memory,status %d ",status);
20679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20680 vos_mem_free(pWdaParams->wdaMsgParam);
20681 vos_mem_free(pWdaParams);
20682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020683 return CONVERT_WDI2VOS_STATUS(status) ;
20684}
Jeff Johnson295189b2012-06-20 16:38:30 -070020685/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020686 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020687 *
20688 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020689void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020690 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
20691 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020692{
20693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20694 tWDA_CbContext *pWDA;
20695 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
20696 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
20697 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
20698 tANI_U8 i;
20699 vos_msg_t vosMsg;
20700
20701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020702 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020703 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
20704
Jeff Johnsone7245742012-09-05 17:12:55 -070020705 if(NULL == pRcvFltPktMatchCntRsp)
20706 {
20707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020708 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020709 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020710 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070020711 return ;
20712 }
20713
Jeff Johnson295189b2012-06-20 16:38:30 -070020714 if(NULL == pWdaParams)
20715 {
20716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020717 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020718 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020719 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070020720 return ;
20721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020722 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
20723 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020724 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
20725 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
20726
20727 /* Message Header */
20728 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20729 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
20730
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020731 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070020732
20733 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
20734 {
20735 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
20736 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
20737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020738 /* VOS message wrapper */
20739 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20740 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
20741 vosMsg.bodyval = 0;
20742 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20743 {
20744 /* free the mem and return */
20745 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
20746 }
20747
20748 vos_mem_free(pWdaParams->wdaMsgParam) ;
20749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20750 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020751
20752 return;
20753}
20754/*
20755 * FUNCTION: WDA_FilterMatchCountReqCallback
20756 * Free memory and send RSP back to SME.
20757 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
20758 */
20759void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
20760{
20761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20762 vos_msg_t vosMsg;
20763
20764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20766
20767 if(NULL == pWdaParams)
20768 {
20769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20770 "%s: pWdaParams received NULL", __func__);
20771 VOS_ASSERT(0);
20772 return;
20773 }
20774
20775 /* VOS message wrapper */
20776 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20777 vosMsg.bodyptr = NULL;
20778 vosMsg.bodyval = 0;
20779
20780 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20781 {
20782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20783 vos_mem_free(pWdaParams->wdaMsgParam);
20784 vos_mem_free(pWdaParams);
20785 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
20786 }
20787
20788 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020789}
Jeff Johnson295189b2012-06-20 16:38:30 -070020790/*
20791 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
20792 * Request to WDI to get PC Filter Match Count
20793 */
20794VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
20795{
Jeff Johnson43971f52012-07-17 12:26:56 -070020796 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020797 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
20798 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
20799 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020801 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020802 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
20803 {
20804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020806 VOS_ASSERT(0);
20807 return VOS_STATUS_E_NOMEM;
20808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20810 if(NULL == pWdaParams)
20811 {
20812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020814 VOS_ASSERT(0);
20815 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
20816 return VOS_STATUS_E_NOMEM;
20817 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020818
Yue Ma7f44bbe2013-04-12 11:47:39 -070020819 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
20820 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020821
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020822 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
20823 pRcvFltPktMatchRsp->bssId,
20824 sizeof(wpt_macAddr));
20825
Jeff Johnson295189b2012-06-20 16:38:30 -070020826 /* Store Params pass it to WDI */
20827 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
20828 pWdaParams->pWdaContext = pWDA;
20829 /* Store param pointer as passed in by caller */
20830 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070020831 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020832 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020833 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020834 if(IS_WDI_STATUS_FAILURE(status))
20835 {
20836 /* failure returned by WDI API */
20837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20838 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
20839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20840 vos_mem_free(pWdaParams) ;
20841 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
20842 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
20843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020844 return CONVERT_WDI2VOS_STATUS(status) ;
20845}
Jeff Johnson295189b2012-06-20 16:38:30 -070020846/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020847 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020848 *
20849 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020850void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020851 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
20852 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020853{
20854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020855 tSirRcvFltPktClearParam *pktClearParam;
20856
Jeff Johnson295189b2012-06-20 16:38:30 -070020857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020858 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020859/* WDA_VOS_ASSERT(NULL != pWdaParams); */
20860 if(NULL == pWdaParams)
20861 {
20862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020863 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020864 VOS_ASSERT(0) ;
20865 return ;
20866 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020867
20868 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20869 if(pktClearParam->pktFilterCallback)
20870 {
20871 pktClearParam->pktFilterCallback(
20872 pktClearParam->cbCtx,
20873 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
20874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020875 vos_mem_free(pWdaParams->wdaMsgParam) ;
20876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20877 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020878 //print a msg, nothing else to do
20879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020880 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020881 return ;
20882}
Jeff Johnson295189b2012-06-20 16:38:30 -070020883/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020884 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
20885 * Free memory.
20886 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
20887 */
20888void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20889{
20890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020891 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020892
20893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20894 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20895
20896 if(NULL == pWdaParams)
20897 {
20898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20899 "%s: Invalid pWdaParams pointer", __func__);
20900 VOS_ASSERT(0);
20901 return;
20902 }
20903
20904 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20905 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020906 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20907 if(pktClearParam->pktFilterCallback)
20908 {
20909 pktClearParam->pktFilterCallback(
20910 pktClearParam->cbCtx,
20911 CONVERT_WDI2SIR_STATUS(wdiStatus));
20912 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20914 vos_mem_free(pWdaParams->wdaMsgParam);
20915 vos_mem_free(pWdaParams);
20916 }
20917
20918 return;
20919}
20920/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020921 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
20922 * Request to WDI to clear Receive Filters
20923 */
20924VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
20925 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
20926{
Jeff Johnson43971f52012-07-17 12:26:56 -070020927 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020928 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
20929 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
20930 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020932 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020933 if(NULL == pwdiRcvFltPktClearReqParamsType)
20934 {
20935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020937 VOS_ASSERT(0);
20938 return VOS_STATUS_E_NOMEM;
20939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020940 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20941 if(NULL == pWdaParams)
20942 {
20943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020945 VOS_ASSERT(0);
20946 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
20947 return VOS_STATUS_E_NOMEM;
20948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020949 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
20950 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070020951 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
20952 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
20953 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
20954 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020955
Yue Ma7f44bbe2013-04-12 11:47:39 -070020956 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020957 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020958 /* Store Params pass it to WDI */
20959 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
20960 pWdaParams->pWdaContext = pWDA;
20961 /* Store param pointer as passed in by caller */
20962 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020963 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020964 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020965 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020966 if(IS_WDI_STATUS_FAILURE(status))
20967 {
20968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20969 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020970 if(pRcvFltPktClearParam->pktFilterCallback)
20971 {
20972 pRcvFltPktClearParam->pktFilterCallback(
20973 pRcvFltPktClearParam->cbCtx,
20974 CONVERT_WDI2SIR_STATUS(status));
20975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080020977 vos_mem_free(pWdaParams->wdaMsgParam);
20978 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020980 return CONVERT_WDI2VOS_STATUS(status) ;
20981}
20982#endif // WLAN_FEATURE_PACKET_FILTERING
20983
Jeff Johnson295189b2012-06-20 16:38:30 -070020984/*
20985 * FUNCTION: WDA_ProcessSetPowerParamsReq
20986 * Request to WDI to set power params
20987 */
20988VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
20989 tSirSetPowerParamsReq *pPowerParams)
20990{
Jeff Johnson43971f52012-07-17 12:26:56 -070020991 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020992 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
20993 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020994 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020996 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020997 if(NULL == pwdiSetPowerParamsReqInfo)
20998 {
20999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021001 VOS_ASSERT(0);
21002 return VOS_STATUS_E_NOMEM;
21003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021004 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21005 if(NULL == pWdaParams)
21006 {
21007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021009 VOS_ASSERT(0);
21010 vos_mem_free(pwdiSetPowerParamsReqInfo);
21011 return VOS_STATUS_E_NOMEM;
21012 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021013
Jeff Johnson295189b2012-06-20 16:38:30 -070021014
21015 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
21016 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070021017 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
21018 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070021019 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
21020 pPowerParams->uListenInterval;
21021 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
21022 pPowerParams->uBcastMcastFilter;
21023 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
21024 pPowerParams->uEnableBET;
21025 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
21026 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070021027 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
21028 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070021029 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
21030 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021031
Jeff Johnson295189b2012-06-20 16:38:30 -070021032 /* Store Params pass it to WDI */
21033 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
21034 pWdaParams->pWdaContext = pWDA;
21035 /* Store param pointer as passed in by caller */
21036 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070021037 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070021038 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070021039 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070021040 if(IS_WDI_STATUS_FAILURE(status))
21041 {
21042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21043 "Failure in Set power params REQ WDI API, free all the memory " );
21044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21045 vos_mem_free(pWdaParams->wdaMsgParam);
21046 pWdaParams->wdaWdiApiMsgParam = NULL;
21047 pWdaParams->wdaMsgParam = NULL;
21048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021049 return CONVERT_WDI2VOS_STATUS(status) ;
21050}
21051
21052/*
21053 * FUNCTION: WDA_SetTmLevelRspCallback
21054 * Set TM Level response
21055 */
21056void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
21057{
21058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21059
21060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021062
21063 if(NULL == pWdaParams)
21064 {
21065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021066 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021067 VOS_ASSERT(0) ;
21068 return ;
21069 }
21070
21071 /* Dose not need to send notification to upper layer
21072 * Just free allocated resources */
21073 if( pWdaParams != NULL )
21074 {
21075 if( pWdaParams->wdaWdiApiMsgParam != NULL )
21076 {
21077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21078 }
21079 vos_mem_free(pWdaParams->wdaMsgParam) ;
21080 vos_mem_free(pWdaParams) ;
21081 }
21082}
21083
21084/*
21085 * FUNCTION: WDA_ProcessSetTmLevelReq
21086 * Set TM Level request
21087 */
21088VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
21089 tAniSetTmLevelReq *setTmLevelReq)
21090{
21091 WDI_Status status = WDI_STATUS_SUCCESS ;
21092 tWDA_ReqParams *pWdaParams ;
21093 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
21094 (WDI_SetTmLevelReqType *)vos_mem_malloc(
21095 sizeof(WDI_SetTmLevelReqType)) ;
21096 if(NULL == wdiSetTmLevelReq)
21097 {
21098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021100 VOS_ASSERT(0);
21101 return VOS_STATUS_E_NOMEM;
21102 }
21103
21104 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21105 if(NULL == pWdaParams)
21106 {
21107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021109 VOS_ASSERT(0);
21110 vos_mem_free(wdiSetTmLevelReq);
21111 return VOS_STATUS_E_NOMEM;
21112 }
21113
21114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021116
21117 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
21118 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
21119
21120 pWdaParams->pWdaContext = pWDA;
21121 pWdaParams->wdaMsgParam = setTmLevelReq;
21122 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
21123
21124 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
21125 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
21126
21127 if(IS_WDI_STATUS_FAILURE(status))
21128 {
21129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080021130 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070021131 vos_mem_free(pWdaParams->wdaMsgParam) ;
21132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21133 vos_mem_free(pWdaParams) ;
21134 }
21135
21136 return CONVERT_WDI2VOS_STATUS(status) ;
21137}
21138
21139VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
21140 tpTxControlParams pTxCtrlParam)
21141{
21142 VOS_STATUS wdaStatus;
21143
21144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021146 if( pTxCtrlParam == NULL )
21147 {
21148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021149 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021150 return VOS_STATUS_E_FAILURE;
21151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021152 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
21153 {
21154 wdaStatus = WDA_SuspendDataTx(pWDA);
21155 }
21156 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
21157 {
21158 wdaStatus = WDA_ResumeDataTx(pWDA);
21159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021160 return wdaStatus;
21161}
21162
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021163void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053021164{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021165 WDI_Status status;
21166 status = WDI_FWLoggingDXEdoneInd(logType);
21167
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053021168 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021169 {
21170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21171 FL("Failure status %d"), status);
21172 }
Mihir Shete5affadc2015-05-29 20:54:57 +053021173}
21174
Jeff Johnson295189b2012-06-20 16:38:30 -070021175 /* FUNCTION WDA_featureCapsExchange
21176 * WDA API to invoke capability exchange between host and FW.
21177 */
21178void WDA_featureCapsExchange(v_PVOID_t pVosContext)
21179{
21180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021181 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070021182 WDI_featureCapsExchangeReq( NULL, pVosContext);
21183}
21184
Yathish9f22e662012-12-10 14:21:35 -080021185/* FUNCTION WDA_disableCapablityFeature
21186 * WDA API to diable Active mode offload in host.
21187 */
21188void WDA_disableCapablityFeature(tANI_U8 feature_index)
21189{
21190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21191 "%s:enter", __func__ );
21192 WDI_disableCapablityFeature(feature_index);
21193}
21194
Jeff Johnson295189b2012-06-20 16:38:30 -070021195 /* FUNCTION WDA_getHostWlanFeatCaps
21196 * Wrapper for WDI API, that will return if the feature (enum value).passed
21197 * to this API is supported or not in Host
21198 * return value
21199 * 0 - implies feature is NOT Supported
21200 * any non zero value - implies feature is SUPPORTED
21201 */
21202tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
21203{
21204 return WDI_getHostWlanFeatCaps(featEnumValue);
21205}
21206
21207 /* FUNCTION WDA_getFwWlanFeatCaps
21208 * Wrapper for WDI API, that will return if the feature (enum value).passed
21209 * to this API is supported or not in FW
21210 * return value
21211 * 0 - implies feature is NOT Supported
21212 * any non zero value - implies feature is SUPPORTED
21213 */
21214tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
21215{
21216 return WDI_getFwWlanFeatCaps(featEnumValue);
21217}
21218
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053021219
Jeff Johnson295189b2012-06-20 16:38:30 -070021220/*
21221 * FUNCTION: WDA_shutdown
21222 * Shutdown WDA/WDI without handshaking with Riva.
21223 * Synchronous function.
21224 */
21225VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
21226{
21227 WDI_Status wdiStatus;
21228 //tANI_U8 eventIdx = 0;
21229 VOS_STATUS status = VOS_STATUS_SUCCESS;
21230 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070021231 if (NULL == pWDA)
21232 {
21233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021234 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070021235 VOS_ASSERT(0);
21236 return VOS_STATUS_E_FAILURE;
21237 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021238 /* FTM mode stay START_STATE */
21239 if( (WDA_READY_STATE != pWDA->wdaState) &&
21240 (WDA_INIT_STATE != pWDA->wdaState) &&
21241 (WDA_START_STATE != pWDA->wdaState) )
21242 {
21243 VOS_ASSERT(0);
21244 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021245
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021246 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070021247 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021248 if(VOS_TRUE == pWDA->wdaTimersCreated)
21249 {
21250 wdaDestroyTimers(pWDA);
21251 pWDA->wdaTimersCreated = VOS_FALSE;
21252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021253 }
Leo Chang9d76f622013-08-23 16:34:52 -070021254 else
21255 {
21256 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021257 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021258
Jeff Johnson295189b2012-06-20 16:38:30 -070021259 /* call WDI shutdown */
21260 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070021261 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
21262 {
21263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21264 "error in WDA Stop" );
21265 status = VOS_STATUS_E_FAILURE;
21266 }
21267 /* WDI stop is synchrnous, shutdown is complete when it returns */
21268 pWDA->wdaState = WDA_STOP_STATE;
21269
Jeff Johnson295189b2012-06-20 16:38:30 -070021270 /* shutdown should perform the stop & close actions. */
21271 /* Destroy the event */
21272 status = vos_event_destroy(&pWDA->txFrameEvent);
21273 if(!VOS_IS_STATUS_SUCCESS(status))
21274 {
21275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021276 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021277 status = VOS_STATUS_E_FAILURE;
21278 }
21279 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
21280 if(!VOS_IS_STATUS_SUCCESS(status))
21281 {
21282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021283 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021284 status = VOS_STATUS_E_FAILURE;
21285 }
21286 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
21287 if(!VOS_IS_STATUS_SUCCESS(status))
21288 {
21289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021290 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021291 status = VOS_STATUS_E_FAILURE;
21292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021293 /* free WDA context */
21294 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
21295 if ( !VOS_IS_STATUS_SUCCESS(status) )
21296 {
21297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21298 "error in WDA close " );
21299 status = VOS_STATUS_E_FAILURE;
21300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021301 return status;
21302}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021303
Jeff Johnsone7245742012-09-05 17:12:55 -070021304/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021305 * FUNCTION: WDA_setNeedShutdown
21306 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070021307 */
21308
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021309void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070021310{
21311 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070021312 if(pWDA == NULL)
21313 {
21314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21315 "Could not get the WDA Context pointer" );
21316 return;
21317 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021318 pWDA->needShutdown = TRUE;
21319}
21320/*
21321 * FUNCTION: WDA_needShutdown
21322 * WDA needs a shutdown
21323 */
21324
21325v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
21326{
21327 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070021328 if(pWDA == NULL)
21329 {
21330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21331 "Could not get the WDA Context pointer" );
21332 return 0;
21333 }
21334 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070021335}
21336
Mohit Khanna4a70d262012-09-11 16:30:12 -070021337#ifdef WLAN_FEATURE_11AC
21338/*
21339 * FUNCTION: WDA_SetBeaconFilterReqCallback
21340 *
21341 */
21342void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
21343{
21344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021346 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021347 if(NULL == pWdaParams)
21348 {
21349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021350 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021351 VOS_ASSERT(0) ;
21352 return ;
21353 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021354
Mohit Khanna4a70d262012-09-11 16:30:12 -070021355 vos_mem_free(pWdaParams->wdaMsgParam) ;
21356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21357 vos_mem_free(pWdaParams) ;
21358 /*
21359 * No respone required for SetBeaconFilter req so just free the request
21360 * param here
21361 */
21362
21363 return ;
21364}
21365
21366VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
21367 tUpdateVHTOpMode *pData)
21368{
21369 WDI_Status status = WDI_STATUS_SUCCESS ;
21370 tWDA_ReqParams *pWdaParams ;
21371 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
21372 sizeof(WDI_UpdateVHTOpMode)) ;
21373 if(NULL == wdiTemp)
21374 {
21375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021376 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021377 VOS_ASSERT(0);
21378 return VOS_STATUS_E_NOMEM;
21379 }
21380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21381 if(NULL == pWdaParams)
21382 {
21383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021384 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021385 VOS_ASSERT(0);
21386 vos_mem_free(wdiTemp);
21387 return VOS_STATUS_E_NOMEM;
21388 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053021389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21390 "------> %s Opmode = %d and staid = %d" ,
21391 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021392 wdiTemp->opMode = pData->opMode;
21393 wdiTemp->staId = pData->staId;
21394
21395 pWdaParams->pWdaContext = pWDA;
21396 /* Store Req pointer, as this will be used for response */
21397 pWdaParams->wdaMsgParam = (void *)pData;
21398 /* store Params pass it to WDI */
21399 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
21400
21401 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
21402
21403 if(IS_WDI_STATUS_FAILURE(status))
21404 {
21405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21406 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
21407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21408 vos_mem_free(pWdaParams->wdaMsgParam);
21409 vos_mem_free(pWdaParams);
21410 }
21411 return CONVERT_WDI2VOS_STATUS(status) ;
21412}
21413#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021414
21415/*==========================================================================
21416 FUNCTION WDA_TransportChannelDebug
21417
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070021418 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021419 Display Transport Channel debugging information
21420 User may request to display DXE channel snapshot
21421 Or if host driver detects any abnormal stcuk may display
21422
21423 PARAMETERS
schang6295e542013-03-12 15:31:23 -070021424 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080021425 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053021426 debugFlags : Enable stall detect features
21427 defined by WPAL_DeviceDebugFlags
21428 These features may effect
21429 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021430
21431 RETURN VALUE
21432 NONE
21433
21434===========================================================================*/
21435void WDA_TransportChannelDebug
21436(
schang6295e542013-03-12 15:31:23 -070021437 tpAniSirGlobal pMac,
21438 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053021439 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021440)
21441{
Mihir Shete40a55652014-03-02 14:14:47 +053021442 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021443 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070021444}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021445
21446/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053021447 FUNCTION WDA_TransportKickDxe
21448
21449 DESCRIPTION
21450 Request Kick Dxe when first hdd TX time out
21451 happens
21452
21453 PARAMETERS
21454 NONE
21455
21456 RETURN VALUE
21457 NONE
21458
21459===========================================================================*/
21460void WDA_TransportKickDxe()
21461{
21462 WDI_TransportKickDxe();
21463 return;
21464}
21465
21466
21467/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021468 FUNCTION WDA_SetEnableSSR
21469
21470 DESCRIPTION
21471 API to enable/disable SSR on WDI timeout
21472
21473 PARAMETERS
21474 enableSSR : enable/disable SSR
21475
21476 RETURN VALUE
21477 NONE
21478
21479===========================================================================*/
21480void WDA_SetEnableSSR(v_BOOL_t enableSSR)
21481{
21482 WDI_SetEnableSSR(enableSSR);
21483}
Leo Chang9056f462013-08-01 19:21:11 -070021484
Agrawal Ashish0552be02016-03-02 18:03:43 +053021485/**
21486 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
21487 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
21488 *
21489 * Return: void
21490 */
21491void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
21492{
21493 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
21494}
21495
Leo Chang9056f462013-08-01 19:21:11 -070021496#ifdef FEATURE_WLAN_LPHB
21497/*
21498 * FUNCTION: WDA_LPHBconfRspCallback
21499 *
21500 */
21501void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
21502{
21503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21504
21505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21506 "<------ %s " ,__func__);
21507 if (NULL == pWdaParams)
21508 {
21509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21510 "%s: pWdaParams received NULL", __func__);
21511 VOS_ASSERT(0) ;
21512 return ;
21513 }
21514
21515 /* Do not need to send notification to upper layer
21516 * Just free allocated resources */
21517 if (pWdaParams != NULL)
21518 {
21519 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21520 {
21521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21522 }
21523 vos_mem_free(pWdaParams->wdaMsgParam) ;
21524 vos_mem_free(pWdaParams) ;
21525 }
21526
21527 return;
21528}
21529
21530/*
21531 * FUNCTION: WDA_ProcessLPHBConfReq
21532 *
21533 */
21534VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
21535 tSirLPHBReq *pData)
21536{
21537 WDI_Status wdiStatus;
21538 tWDA_ReqParams *pWdaParams ;
21539
21540 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21541 "------> %s " , __func__);
21542
21543 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21544 if (NULL == pWdaParams)
21545 {
21546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21547 "%s: VOS MEM Alloc Failure", __func__);
21548 VOS_ASSERT(0);
21549 vos_mem_free(pData);
21550 return VOS_STATUS_E_NOMEM;
21551 }
21552
21553 pWdaParams->pWdaContext = pWDA;
21554 pWdaParams->wdaMsgParam = (void *)pData;
21555 pWdaParams->wdaWdiApiMsgParam = NULL;
21556
21557 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
21558 if (WDI_STATUS_PENDING == wdiStatus)
21559 {
21560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21561 "Pending received for %s:%d ", __func__, __LINE__);
21562 }
21563 else if (WDI_STATUS_SUCCESS != wdiStatus)
21564 {
21565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21566 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
21567 vos_mem_free(pWdaParams->wdaMsgParam);
21568 vos_mem_free(pWdaParams);
21569 }
21570
21571 return CONVERT_WDI2VOS_STATUS(wdiStatus);
21572}
21573#endif /* FEATURE_WLAN_LPHB */
21574
c_hpothu92367912014-05-01 15:18:17 +053021575void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
21576 void* pUserData)
21577{
21578 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
21579
21580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21581 "<------ %s " ,__func__);
21582 if (NULL == pBcnMissRateInfo)
21583 {
21584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21585 "%s: pWdaParams received NULL", __func__);
21586 VOS_ASSERT(0) ;
21587 return ;
21588 }
21589 if (pBcnMissRateInfo->callback)
21590 {
21591 pBcnMissRateInfo->callback(status, bcnMissRate,
21592 pBcnMissRateInfo->data);
21593 }
21594 vos_mem_free(pUserData);
21595
21596 return;
21597}
21598
21599v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
21600 tSirBcnMissRateReq *pData)
21601{
21602 WDI_Status wdiStatus;
21603 tSirBcnMissRateInfo *pBcnMissRateInfo;
21604
21605 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21606 "------> %s " , __func__);
21607
21608 pBcnMissRateInfo =
21609 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
21610 if (NULL == pBcnMissRateInfo)
21611 {
21612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21613 "%s: VOS MEM Alloc Failure", __func__);
21614 VOS_ASSERT(0);
21615 vos_mem_free(pData);
21616 return;
21617 }
21618
21619 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
21620 pBcnMissRateInfo->data = pData->data;
21621
21622 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
21623 WDA_GetBcnMissRateCallback,
21624 pData->bssid);
21625 if (WDI_STATUS_PENDING == wdiStatus)
21626 {
21627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21628 "Pending received for %s:%d ", __func__, __LINE__);
21629 }
21630 else if (WDI_STATUS_SUCCESS != wdiStatus)
21631 {
21632 if (pBcnMissRateInfo->callback)
21633 {
21634 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
21635 -1, pBcnMissRateInfo->data);
21636 }
21637 }
21638 vos_mem_free(pData);
21639}
Dino Mycle41bdc942014-06-10 11:30:24 +053021640
21641#ifdef WLAN_FEATURE_EXTSCAN
21642
21643/*==========================================================================
21644 FUNCTION WDA_EXTScanStartRspCallback
21645
21646 DESCRIPTION
21647 API to send EXTScan Start Response to HDD
21648
21649 PARAMETERS
21650 pEventData: Response from FW
21651 pUserData:
21652===========================================================================*/
21653void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
21654{
21655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21656 tWDA_CbContext *pWDA = NULL;
21657 void *pCallbackContext;
21658 tpAniSirGlobal pMac;
21659
21660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21661 "%s:", __func__);
21662 if (NULL == pWdaParams)
21663 {
21664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21665 "%s: pWdaParams received NULL", __func__);
21666 VOS_ASSERT(0);
21667 return;
21668 }
21669
21670 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21671
21672 if (NULL == pWDA)
21673 {
21674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21675 "%s: pWDA received NULL", __func__);
21676 VOS_ASSERT(0);
21677 goto error;
21678 }
21679
21680 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21681 if (NULL == pMac)
21682 {
21683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21684 "%s:pMac is NULL", __func__);
21685 VOS_ASSERT(0);
21686 goto error;
21687 }
21688
21689 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21690
21691 if (pMac->sme.pEXTScanIndCb)
21692 {
21693 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
21694 pEventData);
21695 }
21696 else
21697 {
21698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21699 "%s:HDD callback is null", __func__);
21700 VOS_ASSERT(0);
21701 }
21702
21703error:
21704
21705 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21706 {
21707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21708 }
21709 if (pWdaParams->wdaMsgParam != NULL)
21710 {
21711 vos_mem_free(pWdaParams->wdaMsgParam);
21712 }
21713 vos_mem_free(pWdaParams) ;
21714
21715 return;
21716}
21717
21718/*==========================================================================
21719 FUNCTION WDA_EXTScanStopRspCallback
21720
21721 DESCRIPTION
21722 API to send EXTScan Stop Response to HDD
21723
21724 PARAMETERS
21725 pEventData: Response from FW
21726 pUserData:
21727===========================================================================*/
21728void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
21729{
21730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21731 tWDA_CbContext *pWDA = NULL;
21732 void *pCallbackContext;
21733 tpAniSirGlobal pMac;
21734
21735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21736 "%s:", __func__);
21737 if (NULL == pWdaParams)
21738 {
21739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21740 "%s: pWdaParams received NULL", __func__);
21741 VOS_ASSERT(0);
21742 return;
21743 }
21744
21745 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21746
21747 if (NULL == pWDA)
21748 {
21749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21750 "%s: pWDA received NULL", __func__);
21751 VOS_ASSERT(0);
21752 goto error;
21753 }
21754
21755 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21756 if (NULL == pMac)
21757 {
21758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21759 "%s:pMac is NULL", __func__);
21760 VOS_ASSERT(0);
21761 goto error;
21762 }
21763 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21764
21765 if (pMac->sme.pEXTScanIndCb)
21766 {
21767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21768 "%s:HDD call back function called", __func__);
21769 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
21770 pEventData);
21771 }
21772 else
21773 {
21774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21775 "%s:HDD callback is null", __func__);
21776 VOS_ASSERT(0);
21777 }
21778
21779error:
21780
21781 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21782 {
21783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21784 }
21785 if (pWdaParams->wdaMsgParam != NULL)
21786 {
21787 vos_mem_free(pWdaParams->wdaMsgParam);
21788 }
21789 vos_mem_free(pWdaParams) ;
21790
21791
21792 return;
21793}
21794
21795/*==========================================================================
21796 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
21797
21798 DESCRIPTION
21799 API to send EXTScan Get Cached Results Response to HDD
21800
21801 PARAMETERS
21802 pEventData: Response from FW
21803 pUserData:
21804===========================================================================*/
21805void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
21806{
21807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21808 tWDA_CbContext *pWDA = NULL;
21809 void *pCallbackContext;
21810 tpAniSirGlobal pMac;
21811
21812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21813 "%s: ", __func__);
21814 if (NULL == pWdaParams)
21815 {
21816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21817 "%s: pWdaParams received NULL", __func__);
21818 VOS_ASSERT(0);
21819 return;
21820 }
21821
21822 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21823
21824 if (NULL == pWDA)
21825 {
21826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21827 "%s: pWDA received NULL", __func__);
21828 VOS_ASSERT(0);
21829 goto error;
21830 }
21831
21832 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21833 if (NULL == pMac)
21834 {
21835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21836 "%s:pMac is NULL", __func__);
21837 VOS_ASSERT(0);
21838 goto error;
21839 }
21840
21841 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21842
21843 if (pMac->sme.pEXTScanIndCb)
21844 {
21845 pMac->sme.pEXTScanIndCb(pCallbackContext,
21846 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
21847 pEventData);
21848 }
21849 else
21850 {
21851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21852 "%s:HDD callback is null", __func__);
21853 VOS_ASSERT(0);
21854 }
21855
21856
21857error:
21858
21859 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21860 {
21861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21862 }
21863 if (pWdaParams->wdaMsgParam != NULL)
21864 {
21865 vos_mem_free(pWdaParams->wdaMsgParam);
21866 }
21867 vos_mem_free(pWdaParams) ;
21868
21869 return;
21870}
21871
21872/*==========================================================================
21873 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
21874
21875 DESCRIPTION
21876 API to send EXTScan Get Capabilities Response to HDD
21877
21878 PARAMETERS
21879 pEventData: Response from FW
21880 pUserData:
21881===========================================================================*/
21882void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
21883{
21884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21885 tWDA_CbContext *pWDA = NULL;
21886 void *pCallbackContext;
21887 tpAniSirGlobal pMac;
21888
21889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21890 "%s:", __func__);
21891 if (NULL == pWdaParams)
21892 {
21893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21894 "%s: pWdaParams received NULL", __func__);
21895 VOS_ASSERT(0);
21896 return;
21897 }
21898
21899 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21900
21901 if (NULL == pWDA)
21902 {
21903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21904 "%s: pWDA received NULL", __func__);
21905 VOS_ASSERT(0);
21906 goto error;
21907 }
21908
21909 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21910 if (NULL == pMac)
21911 {
21912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21913 "%s:pMac is NULL", __func__);
21914 VOS_ASSERT(0);
21915 goto error;
21916 }
21917
21918 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21919
21920 if (pMac->sme.pEXTScanIndCb)
21921 {
21922 pMac->sme.pEXTScanIndCb(pCallbackContext,
21923 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
21924 pEventData);
21925 }
21926 else
21927 {
21928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21929 "%s:HDD callback is null", __func__);
21930 VOS_ASSERT(0);
21931 }
21932
21933
21934error:
21935
21936 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21937 {
21938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21939 }
21940 if (pWdaParams->wdaMsgParam != NULL)
21941 {
21942 vos_mem_free(pWdaParams->wdaMsgParam);
21943 }
21944 vos_mem_free(pWdaParams) ;
21945
21946 return;
21947}
21948
21949/*==========================================================================
21950 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
21951
21952 DESCRIPTION
21953 API to send EXTScan Set BSSID Hotlist Response to HDD
21954
21955 PARAMETERS
21956 pEventData: Response from FW
21957 pUserData:
21958===========================================================================*/
21959void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21960{
21961 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21962 tWDA_CbContext *pWDA = NULL;
21963 void *pCallbackContext;
21964 tpAniSirGlobal pMac;
21965
21966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21967 "%s: ", __func__);
21968 if (NULL == pWdaParams)
21969 {
21970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21971 "%s: pWdaParams received NULL", __func__);
21972 VOS_ASSERT(0) ;
21973 return;
21974 }
21975
21976 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21977
21978 if (NULL == pWDA)
21979 {
21980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21981 "%s: pWDA received NULL", __func__);
21982 VOS_ASSERT(0);
21983 goto error;
21984 }
21985
21986 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21987 if (NULL == pMac)
21988 {
21989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21990 "%s:pMac is NULL", __func__);
21991 VOS_ASSERT(0);
21992 goto error;
21993 }
21994
21995 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21996
21997 if (pMac->sme.pEXTScanIndCb)
21998 {
21999 pMac->sme.pEXTScanIndCb(pCallbackContext,
22000 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
22001 pEventData);
22002 }
22003 else
22004 {
22005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22006 "%s:HDD callback is null", __func__);
22007 VOS_ASSERT(0);
22008 }
22009
22010
22011error:
22012
22013 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22014 {
22015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22016 }
22017 if (pWdaParams->wdaMsgParam != NULL)
22018 {
22019 vos_mem_free(pWdaParams->wdaMsgParam);
22020 }
22021 vos_mem_free(pWdaParams) ;
22022
22023 return;
22024}
22025
22026/*==========================================================================
22027 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
22028
22029 DESCRIPTION
22030 API to send EXTScan ReSet BSSID Hotlist Response to HDD
22031
22032 PARAMETERS
22033 pEventData: Response from FW
22034 pUserData:
22035===========================================================================*/
22036void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
22037{
22038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22039 tWDA_CbContext *pWDA = NULL;
22040 void *pCallbackContext;
22041 tpAniSirGlobal pMac;
22042
22043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22044 "%s:", __func__);
22045 if (NULL == pWdaParams)
22046 {
22047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22048 "%s: pWdaParams received NULL", __func__);
22049 VOS_ASSERT(0) ;
22050 return;
22051 }
22052
22053 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22054
22055 if (NULL == pWDA)
22056 {
22057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22058 "%s: pWDA received NULL", __func__);
22059 VOS_ASSERT(0);
22060 goto error;
22061 }
22062
22063 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22064 if (NULL == pMac)
22065 {
22066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22067 "%s:pMac is NULL", __func__);
22068 VOS_ASSERT(0);
22069 goto error;
22070 }
22071
22072 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
22073
22074 if (pMac->sme.pEXTScanIndCb)
22075 {
22076 pMac->sme.pEXTScanIndCb(pCallbackContext,
22077 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
22078 pEventData);
22079 }
22080 else
22081 {
22082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22083 "%s:HDD callback is null", __func__);
22084 VOS_ASSERT(0);
22085 }
22086
22087
22088error:
22089
22090 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22091 {
22092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22093 }
22094 if (pWdaParams->wdaMsgParam != NULL)
22095 {
22096 vos_mem_free(pWdaParams->wdaMsgParam);
22097 }
22098 vos_mem_free(pWdaParams) ;
22099
22100 return;
22101}
22102
22103/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053022104 FUNCTION WDA_ProcessEXTScanStartReq
22105
22106 DESCRIPTION
22107 API to send EXTScan Start Request to WDI
22108
22109 PARAMETERS
22110 pWDA: Pointer to WDA context
22111 wdaRequest: Pointer to EXTScan req parameters
22112===========================================================================*/
22113VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
22114 tSirEXTScanStartReqParams *wdaRequest)
22115{
22116 WDI_Status status = WDI_STATUS_SUCCESS;
22117 tWDA_ReqParams *pWdaParams;
22118
22119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22120 "%s: ", __func__);
22121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22122 if (NULL == pWdaParams)
22123 {
22124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22125 "%s: VOS MEM Alloc Failure", __func__);
22126 VOS_ASSERT(0);
22127 return VOS_STATUS_E_NOMEM;
22128 }
22129 pWdaParams->pWdaContext = pWDA;
22130 pWdaParams->wdaMsgParam = wdaRequest;
22131 pWdaParams->wdaWdiApiMsgParam = NULL;
22132
22133 status = WDI_EXTScanStartReq((void *)wdaRequest,
22134 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
22135 (void *)pWdaParams);
22136 if (IS_WDI_STATUS_FAILURE(status))
22137 {
22138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22139 "Failure to request. Free all the memory " );
22140 vos_mem_free(pWdaParams->wdaMsgParam);
22141 vos_mem_free(pWdaParams);
22142 }
22143 return CONVERT_WDI2VOS_STATUS(status);
22144}
22145
22146/*==========================================================================
22147 FUNCTION WDA_ProcessEXTScanStopReq
22148
22149 DESCRIPTION
22150 API to send EXTScan Start Request to WDI
22151
22152 PARAMETERS
22153 pWDA: Pointer to WDA context
22154 wdaRequest: Pointer to EXTScan req parameters
22155===========================================================================*/
22156VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
22157 tSirEXTScanStopReqParams *wdaRequest)
22158{
22159 WDI_Status status = WDI_STATUS_SUCCESS;
22160 tWDA_ReqParams *pWdaParams;
22161
22162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22163 "%s:", __func__);
22164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22165 if (NULL == pWdaParams)
22166 {
22167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22168 "%s: VOS MEM Alloc Failure", __func__);
22169 VOS_ASSERT(0);
22170 return VOS_STATUS_E_NOMEM;
22171 }
22172 pWdaParams->pWdaContext = pWDA;
22173 pWdaParams->wdaMsgParam = wdaRequest;
22174 pWdaParams->wdaWdiApiMsgParam = NULL;
22175
22176 status = WDI_EXTScanStopReq((void *)wdaRequest,
22177 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
22178 (void *)pWdaParams);
22179 if (IS_WDI_STATUS_FAILURE(status))
22180 {
22181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22182 "Failure to request. Free all the memory " );
22183 vos_mem_free(pWdaParams->wdaMsgParam);
22184 vos_mem_free(pWdaParams);
22185 }
22186 return CONVERT_WDI2VOS_STATUS(status);
22187}
22188
22189/*==========================================================================
22190 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
22191
22192 DESCRIPTION
22193 API to send EXTScan Get Cached Results Request to WDI
22194
22195 PARAMETERS
22196 pWDA: Pointer to WDA context
22197 wdaRequest: Pointer to EXTScan req parameters
22198===========================================================================*/
22199VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
22200 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
22201{
22202 WDI_Status status = WDI_STATUS_SUCCESS;
22203 tWDA_ReqParams *pWdaParams;
22204
22205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22206 "%s: ", __func__);
22207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22208 if (NULL == pWdaParams)
22209 {
22210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22211 "%s: VOS MEM Alloc Failure", __func__);
22212 VOS_ASSERT(0);
22213 return VOS_STATUS_E_NOMEM;
22214 }
22215 pWdaParams->pWdaContext = pWDA;
22216 pWdaParams->wdaMsgParam = wdaRequest;
22217 pWdaParams->wdaWdiApiMsgParam = NULL;
22218
22219 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
22220 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
22221 (void *)pWdaParams);
22222 if (IS_WDI_STATUS_FAILURE(status))
22223 {
22224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22225 "Failure to request. Free all the memory " );
22226 vos_mem_free(pWdaParams->wdaMsgParam);
22227 vos_mem_free(pWdaParams);
22228 }
22229 return CONVERT_WDI2VOS_STATUS(status);
22230}
22231
22232/*==========================================================================
22233 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
22234
22235 DESCRIPTION
22236 API to send EXTScan Get Capabilities Request to WDI
22237
22238 PARAMETERS
22239 pWDA: Pointer to WDA context
22240 wdaRequest: Pointer to EXTScan req parameters
22241===========================================================================*/
22242VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
22243 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
22244{
22245 WDI_Status status = WDI_STATUS_SUCCESS;
22246 tWDA_ReqParams *pWdaParams;
22247
22248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22249 "%s:", __func__);
22250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22251 if (NULL == pWdaParams)
22252 {
22253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22254 "%s: VOS MEM Alloc Failure", __func__);
22255 VOS_ASSERT(0);
22256 return VOS_STATUS_E_NOMEM;
22257 }
22258 pWdaParams->pWdaContext = pWDA;
22259 pWdaParams->wdaMsgParam = wdaRequest;
22260 pWdaParams->wdaWdiApiMsgParam = NULL;
22261
22262 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
22263 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
22264 (void *)pWdaParams);
22265 if (IS_WDI_STATUS_FAILURE(status))
22266 {
22267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22268 "Failure to request. Free all the memory " );
22269 vos_mem_free(pWdaParams->wdaMsgParam);
22270 vos_mem_free(pWdaParams);
22271 }
22272 return CONVERT_WDI2VOS_STATUS(status);
22273}
22274
22275/*==========================================================================
22276 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
22277
22278 DESCRIPTION
22279 API to send Set BSSID Hotlist Request to WDI
22280
22281 PARAMETERS
22282 pWDA: Pointer to WDA context
22283 wdaRequest: Pointer to EXTScan req parameters
22284===========================================================================*/
22285VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22286 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
22287{
22288 WDI_Status status = WDI_STATUS_SUCCESS;
22289 tWDA_ReqParams *pWdaParams;
22290
22291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22292 "%s: ", __func__);
22293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22294 if (NULL == pWdaParams)
22295 {
22296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22297 "%s: VOS MEM Alloc Failure", __func__);
22298 VOS_ASSERT(0);
22299 return VOS_STATUS_E_NOMEM;
22300 }
22301 pWdaParams->pWdaContext = pWDA;
22302 pWdaParams->wdaMsgParam = wdaRequest;
22303 pWdaParams->wdaWdiApiMsgParam = NULL;
22304
22305 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
22306 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
22307 (void *)pWdaParams);
22308 if (IS_WDI_STATUS_FAILURE(status))
22309 {
22310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22311 "Failure to request. Free all the memory " );
22312 vos_mem_free(pWdaParams->wdaMsgParam);
22313 vos_mem_free(pWdaParams);
22314 }
22315 return CONVERT_WDI2VOS_STATUS(status);
22316}
22317
22318/*==========================================================================
22319 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
22320
22321 DESCRIPTION
22322 API to send Reset BSSID Hotlist Request to WDI
22323
22324 PARAMETERS
22325 pWDA: Pointer to WDA context
22326 wdaRequest: Pointer to EXTScan req parameters
22327===========================================================================*/
22328VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22329 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
22330{
22331 WDI_Status status = WDI_STATUS_SUCCESS;
22332 tWDA_ReqParams *pWdaParams;
22333
22334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22335 "%s:", __func__);
22336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22337 if (NULL == pWdaParams)
22338 {
22339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22340 "%s: VOS MEM Alloc Failure", __func__);
22341 VOS_ASSERT(0);
22342 return VOS_STATUS_E_NOMEM;
22343 }
22344 pWdaParams->pWdaContext = pWDA;
22345 pWdaParams->wdaMsgParam = wdaRequest;
22346 pWdaParams->wdaWdiApiMsgParam = NULL;
22347
22348 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
22349 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
22350 (void *)pWdaParams);
22351 if (IS_WDI_STATUS_FAILURE(status))
22352 {
22353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22354 "Failure to request. Free all the memory " );
22355 vos_mem_free(pWdaParams->wdaMsgParam);
22356 vos_mem_free(pWdaParams);
22357 }
22358 return CONVERT_WDI2VOS_STATUS(status);
22359}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022360
22361/*==========================================================================
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053022362 FUNCTION WDA_ProcessHighPriorityDataInfoInd
22363
22364 DESCRIPTION
22365 API to send Reset SSID Hotlist Request to WDI
22366
22367 PARAMETERS
22368 pWDA: Pointer to WDA context
22369 wdaRequest: Pointer to EXTScan req parameters
22370===========================================================================*/
22371VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
22372 tSirHighPriorityDataInfoInd *wdaRequest)
22373{
22374 WDI_Status status = WDI_STATUS_SUCCESS;
22375
22376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22377 "%s:", __func__);
22378
22379 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
22380 if (WDI_STATUS_PENDING == status)
22381 {
22382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22383 FL("pending status received "));
22384 }
22385 else if (WDI_STATUS_SUCCESS_SYNC != status)
22386 {
22387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22388 FL("Failure status %d"), status);
22389 }
22390 return CONVERT_WDI2VOS_STATUS(status);
22391}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022392
Dino Mycle41bdc942014-06-10 11:30:24 +053022393#endif /* WLAN_FEATURE_EXTSCAN */
22394
Sunil Duttbd736ed2014-05-26 21:19:41 +053022395#ifdef WLAN_FEATURE_LINK_LAYER_STATS
22396
22397/*==========================================================================
22398 FUNCTION WDA_LLStatsSetRspCallback
22399
22400 DESCRIPTION
22401 API to process set link layer statistics response from FW
22402
22403 PARAMETERS
22404 pRsp: Pointer to set link layer statistics response
22405 pUserData: Pointer to user data
22406
22407 RETURN VALUE
22408 NONE
22409
22410===========================================================================*/
22411void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
22412{
22413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22414
22415
22416 if (NULL == pWdaParams)
22417 {
22418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22419 "%s: pWdaParams received NULL", __func__);
22420 VOS_ASSERT(0) ;
22421 return ;
22422 }
22423
22424 /* Do not need to send notification to upper layer
22425 * Just free allocated resources */
22426 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22427 {
22428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22429 }
22430 if (pWdaParams->wdaMsgParam != NULL)
22431 {
22432 vos_mem_free(pWdaParams->wdaMsgParam);
22433 }
22434 vos_mem_free(pWdaParams) ;
22435
22436 return;
22437}
22438
22439/*==========================================================================
22440 FUNCTION WDA_ProcessLLStatsSetReq
22441
22442 DESCRIPTION
22443 API to send Set Link Layer Stats request to WDI
22444
22445 PARAMETERS
22446 pWDA: Pointer to WDA context
22447 wdaRequest: Pointer to set Link Layer Stats req parameters
22448===========================================================================*/
22449VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
22450 tSirLLStatsSetReq *wdaRequest)
22451{
22452 WDI_Status status = WDI_STATUS_SUCCESS;
22453 tWDA_ReqParams *pWdaParams;
22454
22455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22456 if (NULL == pWdaParams)
22457 {
22458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22459 "%s: VOS MEM Alloc Failure", __func__);
22460 VOS_ASSERT(0);
22461 return VOS_STATUS_E_NOMEM;
22462 }
22463 pWdaParams->pWdaContext = pWDA;
22464 pWdaParams->wdaMsgParam = wdaRequest;
22465 pWdaParams->wdaWdiApiMsgParam = NULL;
22466
22467 status = WDI_LLStatsSetReq((void *)wdaRequest,
22468 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
22469 (void *)pWdaParams);
22470 if (IS_WDI_STATUS_FAILURE(status))
22471 {
22472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22473 "Failure to request. Free all the memory " );
22474 vos_mem_free(pWdaParams->wdaMsgParam);
22475 vos_mem_free(pWdaParams);
22476 }
22477 return CONVERT_WDI2VOS_STATUS(status);
22478}
22479
22480/*==========================================================================
22481 FUNCTION WDA_LLStatsGetRspCallback
22482
22483 DESCRIPTION
22484 API to process get link layer statistics response from FW
22485
22486 PARAMETERS
22487 pRsp: Pointer to get link layer statistics response
22488 pUserData: Pointer to user data
22489
22490 RETURN VALUE
22491 NONE
22492
22493===========================================================================*/
22494void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
22495{
22496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22497
22498 if (NULL == pWdaParams)
22499 {
22500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22501 "%s: pWdaParams received NULL", __func__);
22502 VOS_ASSERT(0) ;
22503 return ;
22504 }
22505
22506 /* Do not need to send notification to upper layer
22507 * Just free allocated resources */
22508 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22509 {
22510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22511 }
22512 if (pWdaParams->wdaMsgParam != NULL)
22513 {
22514 vos_mem_free(pWdaParams->wdaMsgParam);
22515 }
22516 vos_mem_free(pWdaParams) ;
22517
22518 return;
22519}
22520
22521/*==========================================================================
22522 FUNCTION WDA_ProcessLLStatsGetReq
22523
22524 DESCRIPTION
22525 API to send Get Link Layer Stats request to WDI
22526
22527 PARAMETERS
22528 pWDA: Pointer to WDA context
22529 wdaRequest: Pointer to get Link Layer Stats req parameters
22530===========================================================================*/
22531VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
22532 tSirLLStatsGetReq *wdaRequest)
22533{
22534 WDI_Status status = WDI_STATUS_SUCCESS;
22535 tWDA_ReqParams *pWdaParams;
22536
22537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22538 if (NULL == pWdaParams)
22539 {
22540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22541 "%s: VOS MEM Alloc Failure", __func__);
22542 VOS_ASSERT(0);
22543 return VOS_STATUS_E_NOMEM;
22544 }
22545 pWdaParams->pWdaContext = pWDA;
22546 pWdaParams->wdaMsgParam = wdaRequest;
22547 pWdaParams->wdaWdiApiMsgParam = NULL;
22548
22549 status = WDI_LLStatsGetReq((void *) wdaRequest,
22550 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
22551 (void *)pWdaParams);
22552 if (IS_WDI_STATUS_FAILURE(status))
22553 {
22554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22555 "Failure to request. Free all the memory " );
22556 vos_mem_free(pWdaParams->wdaMsgParam);
22557 vos_mem_free(pWdaParams);
22558 }
22559 return CONVERT_WDI2VOS_STATUS(status);
22560}
22561
22562/*==========================================================================
22563 FUNCTION WDA_LLStatsClearRspCallback
22564
22565 DESCRIPTION
22566 API to process clear link layer statistics response from FW
22567
22568 PARAMETERS
22569 pRsp: Pointer to clear link layer statistics response
22570 pUserData: Pointer to user data
22571
22572 RETURN VALUE
22573 NONE
22574
22575===========================================================================*/
22576void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
22577{
22578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22579
22580
22581 if (NULL == pWdaParams)
22582 {
22583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22584 "%s: pWdaParams received NULL", __func__);
22585 VOS_ASSERT(0) ;
22586 return ;
22587 }
22588 /* Do not need to send notification to upper layer
22589 * Just free allocated resources */
22590 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22591 {
22592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22593 }
22594 if (pWdaParams->wdaMsgParam != NULL)
22595 {
22596 vos_mem_free(pWdaParams->wdaMsgParam);
22597 }
22598 vos_mem_free(pWdaParams) ;
22599 return;
22600}
22601
22602/*==========================================================================
22603 FUNCTION WDA_ProcessLLStatsClearReq
22604
22605 DESCRIPTION
22606 API to send Clear Link Layer Stats request to WDI
22607
22608 PARAMETERS
22609 pWDA: Pointer to WDA context
22610 wdaRequest: Pointer to earLink Layer Stats req
22611===========================================================================*/
22612VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
22613 tSirLLStatsClearReq *wdaRequest)
22614{
22615 WDI_Status status = WDI_STATUS_SUCCESS;
22616 tWDA_ReqParams *pWdaParams;
22617
22618 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22619 if (NULL == pWdaParams)
22620 {
22621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22622 "%s: VOS MEM Alloc Failure", __func__);
22623 VOS_ASSERT(0);
22624 return VOS_STATUS_E_NOMEM;
22625 }
22626 pWdaParams->pWdaContext = pWDA;
22627 pWdaParams->wdaMsgParam = wdaRequest;
22628 pWdaParams->wdaWdiApiMsgParam = NULL;
22629
22630 status = WDI_LLStatsClearReq((void *) wdaRequest,
22631 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
22632 (void *)pWdaParams);
22633 if (IS_WDI_STATUS_FAILURE(status))
22634 {
22635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22636 "Failure to request. Free all the memory " );
22637 vos_mem_free(pWdaParams->wdaMsgParam);
22638 vos_mem_free(pWdaParams);
22639 }
22640 return CONVERT_WDI2VOS_STATUS(status);
22641}
22642
22643#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053022644
Abhishek Singh85b74712014-10-08 11:38:19 +053022645void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
22646{
22647 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
22648
22649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22650 "<------ %s " ,__func__);
22651 if (NULL == fwStatsinfo)
22652 {
22653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22654 "%s: pWdaParams received NULL", __func__);
22655 VOS_ASSERT(0);
22656 return;
22657 }
22658
22659 if(fwStatsinfo->callback)
22660 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
22661
22662 vos_mem_free(pUserData);
22663 return;
22664}
22665
22666
22667v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
22668 tSirFWStatsGetReq *pData)
22669{
22670
22671 WDI_Status wdiStatus;
22672 tSirFWStatsInfo *fwStatsinfo;
22673
22674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22675 "------> %s" , __func__);
22676
22677 fwStatsinfo =
22678 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
22679 if (NULL == fwStatsinfo)
22680 {
22681 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22682 "%s: VOS MEM Alloc Failure", __func__);
22683 VOS_ASSERT(0);
22684 vos_mem_free(pData);
22685 return;
22686 }
22687
22688 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
22689 fwStatsinfo->data = pData->data;
22690
22691 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
22692 WDA_FWStatsGetRspCallback,
22693 pData->stats);
22694 if (WDI_STATUS_PENDING == wdiStatus)
22695 {
22696 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22697 "Pending received for %s:%d ", __func__, __LINE__);
22698 }
22699 else if (WDI_STATUS_SUCCESS != wdiStatus)
22700 {
22701 if (fwStatsinfo->callback)
22702 {
22703 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
22704 }
22705 vos_mem_free(fwStatsinfo);
22706 }
22707 vos_mem_free(pData);
22708}
22709
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053022710/*==========================================================================
22711 FUNCTION WDA_EncryptMsgRspCallback
22712
22713 DESCRIPTION
22714 API to send Encrypt message response to HDD
22715
22716 PARAMETERS
22717 pEventData: Response from FW
22718 pUserData: Data sent to firmware as part of request
22719===========================================================================*/
22720void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
22721 void* pUserData)
22722{
22723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22724 tWDA_CbContext *pWDA = NULL;
22725 tpAniSirGlobal pMac;
22726 vos_msg_t vosMsg;
22727 tpSirEncryptedDataRspParams pEncRspParams;
22728 tpSetEncryptedDataRspParams pEncryptedDataRsp;
22729
22730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22731 FL("%s:"), __func__);
22732 if (NULL == pWdaParams)
22733 {
22734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22735 FL("%s: pWdaParams received NULL"), __func__);
22736 VOS_ASSERT(0);
22737 return;
22738 }
22739
22740 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22741
22742 if (NULL == pWDA)
22743 {
22744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22745 FL("%s: pWDA received NULL"), __func__);
22746 VOS_ASSERT(0);
22747 goto error;
22748 }
22749
22750 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22751 if (NULL == pMac)
22752 {
22753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22754 FL("%s:pMac is NULL"), __func__);
22755 VOS_ASSERT(0);
22756 goto error;
22757 }
22758
22759 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
22760
22761 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
22762 if (NULL == pEncRspParams)
22763 {
22764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22765 FL("%s: VOS MEM Alloc Failure"), __func__);
22766 VOS_ASSERT(0);
22767 goto error;
22768 }
22769
22770 /* Message Header */
22771 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
22772 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
22773 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
22774 pEncryptedDataRsp->encryptedPayload.length;
22775 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
22776 pEncryptedDataRsp->encryptedPayload.data,
22777 pEncryptedDataRsp->encryptedPayload.length);
22778
22779 /* VOS message wrapper */
22780 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
22781 vosMsg.bodyptr = (void *)pEncRspParams;
22782 vosMsg.bodyval = 0;
22783
22784 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
22785 {
22786 /* free the mem */
22787 vos_mem_free((v_VOID_t *) pEncRspParams);
22788 }
22789
22790error:
22791
22792 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22793 {
22794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22795 }
22796 if (pWdaParams->wdaMsgParam != NULL)
22797 {
22798 vos_mem_free(pWdaParams->wdaMsgParam);
22799 }
22800 vos_mem_free(pWdaParams) ;
22801
22802 return;
22803}
22804/*==========================================================================
22805 FUNCTION WDA_ProcessEncryptMsgReq
22806
22807 DESCRIPTION
22808 API to send Encrypt message Request to WDI
22809
22810 PARAMETERS
22811 pWDA: Pointer to WDA context
22812 wdaRequest: Pointer to Encrypt_msg req parameters
22813===========================================================================*/
22814VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
22815 u8 *wdaRequest)
22816{
22817 WDI_Status status = WDI_STATUS_SUCCESS;
22818 tWDA_ReqParams *pWdaParams;
22819
22820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22821 FL("%s: "), __func__);
22822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22823 if (NULL == pWdaParams)
22824 {
22825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22826 FL("%s: VOS MEM Alloc Failure"), __func__);
22827 VOS_ASSERT(0);
22828 return VOS_STATUS_E_NOMEM;
22829 }
22830 pWdaParams->pWdaContext = pWDA;
22831 pWdaParams->wdaMsgParam = wdaRequest;
22832 pWdaParams->wdaWdiApiMsgParam = NULL;
22833
22834 status = WDI_EncryptMsgReq((void *)wdaRequest,
22835 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22836 (void *)pWdaParams);
22837 if (IS_WDI_STATUS_FAILURE(status))
22838 {
22839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22840 FL("Failure to request. Free all the memory " ));
22841 vos_mem_free(pWdaParams->wdaMsgParam);
22842 vos_mem_free(pWdaParams);
22843 }
22844 return CONVERT_WDI2VOS_STATUS(status);
22845}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022846/*==========================================================================
22847 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22848
22849 DESCRIPTION
22850 API to enable/disable RTS/CTS for different modes.
22851
22852 PARAMETERS
22853 pWDA: Pointer to WDA context
22854 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22855===========================================================================*/
22856
22857VOS_STATUS
22858WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22859 tANI_U32 rtsCtsVal)
22860{
22861 WDI_Status status;
22862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22863 FL("---> %s"), __func__);
22864 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22865 if (WDI_STATUS_PENDING == status)
22866 {
22867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22868 FL("pending status received "));
22869 }
22870 else if (WDI_STATUS_SUCCESS_SYNC != status)
22871 {
22872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22873 FL("Failure status %d"), status);
22874 }
22875 return CONVERT_WDI2VOS_STATUS(status) ;
22876}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022877
22878void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022879{
22880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022881 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022882
22883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22884 "<------ %s " ,__func__);
22885 if (NULL == pWdaParams)
22886 {
22887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22888 "%s: pWdaParams received NULL", __func__);
22889 VOS_ASSERT(0) ;
22890 return ;
22891 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022892 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22893 if (pData != NULL) {
22894 pData->callback(pData->magic, pData->cmpVar);
22895 vos_mem_free(pWdaParams->wdaMsgParam);
22896 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022897 vos_mem_free(pWdaParams) ;
22898
22899 return;
22900}
22901
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022902VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022903{
22904
22905 WDI_Status status = WDI_STATUS_SUCCESS;
22906 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022907 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022908
22909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22910 FL("%s: "), __func__);
22911 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22912 if (NULL == pWdaParams)
22913 {
22914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22915 FL("%s: VOS MEM Alloc Failure"), __func__);
22916 VOS_ASSERT(0);
22917 return VOS_STATUS_E_NOMEM;
22918 }
22919 pWdaParams->pWdaContext = pWDA;
22920 pWdaParams->wdaMsgParam = wdaRequest;
22921 pWdaParams->wdaWdiApiMsgParam = NULL;
22922
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022923 status = WDI_MonStartReq(pMonModeData->data,
22924 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022925 (void *)pWdaParams);
22926 if (IS_WDI_STATUS_FAILURE(status))
22927 {
22928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22929 "Failure to request. Free all the memory " );
22930 vos_mem_free(pWdaParams->wdaMsgParam);
22931 vos_mem_free(pWdaParams);
22932 }
22933 return CONVERT_WDI2VOS_STATUS(status);
22934}
22935
Katya Nigamf0511f62015-05-05 16:40:57 +053022936VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22937{
22938
22939 WDI_Status status = WDI_STATUS_SUCCESS;
22940 tWDA_ReqParams *pWdaParams;
22941
22942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22943 FL("%s: "), __func__);
22944 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22945 if (NULL == pWdaParams)
22946 {
22947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22948 FL("%s: VOS MEM Alloc Failure"), __func__);
22949 VOS_ASSERT(0);
22950 return VOS_STATUS_E_NOMEM;
22951 }
22952 pWdaParams->pWdaContext = pWDA;
22953 pWdaParams->wdaMsgParam = wdaRequest;
22954 pWdaParams->wdaWdiApiMsgParam = NULL;
22955
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22957 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022958 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022959 (void *)pWdaParams);
22960
22961 if (IS_WDI_STATUS_FAILURE(status))
22962 {
22963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22964 "Failure to request. Free all the memory " );
22965 vos_mem_free(pWdaParams->wdaMsgParam);
22966 vos_mem_free(pWdaParams);
22967 }
22968 return CONVERT_WDI2VOS_STATUS(status);
22969}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022970
22971VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22972{
22973 WDI_Status status;
22974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22975 FL("---> %s"), __func__);
22976 status = WDI_EnableDisableCAEventInd(val);
22977 if (WDI_STATUS_PENDING == status)
22978 {
22979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22980 FL("pending status received "));
22981 }
22982 else if (WDI_STATUS_SUCCESS_SYNC != status)
22983 {
22984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22985 FL("Failure status %d"), status);
22986 }
22987 return CONVERT_WDI2VOS_STATUS(status) ;
22988}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022989
22990/*==========================================================================
22991 FUNCTION WDA_WifiConfigSetRspCallback
22992
22993 DESCRIPTION
22994 API to process set WifiConfig response from FW
22995
22996 PARAMETERS
22997 pRsp: Pointer to set WifiConfig response
22998 pUserData: Pointer to user data
22999
23000 RETURN VALUE
23001 NONE
23002
23003===========================================================================*/
23004void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
23005{
23006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
23007
23008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23009 "<------ %s " ,__func__);
23010
23011 if(NULL == pWdaParams)
23012 {
23013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23014 "%s: pWdaParams received NULL", __func__);
23015 VOS_ASSERT(0);
23016 return ;
23017 }
23018
23019 if(NULL == pWdaParams->wdaMsgParam)
23020 {
23021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23022 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23023 VOS_ASSERT(0);
23024 vos_mem_free(pWdaParams);
23025 return ;
23026 }
23027
23028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
23029 vos_mem_free(pWdaParams->wdaMsgParam);
23030 vos_mem_free(pWdaParams);
23031
23032 return;
23033}
23034
23035/*==========================================================================
23036 FUNCTION WDA_ProcessWifiConfigReq
23037
23038 DESCRIPTION
23039 API to send Set WifiConfig params request to WDI
23040
23041 PARAMETERS
23042 pWDA: Pointer to WDA context
23043 wdaRequest: Pointer to set WifiConfig req parameters
23044===========================================================================*/
23045
23046VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
23047 tSetWifiConfigParams *pwdaWificonfig)
23048{
23049 WDI_Status status = WDI_STATUS_SUCCESS;
23050 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
23051 tWDA_ReqParams *pWdaParams ;
23052 WDI_Status wstatus;
23053
23054 /* Sanity Check*/
23055 if(NULL == pwdaWificonfig)
23056 {
23057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23058 "%s: tSetWifiConfigParams received NULL", __func__);
23059 VOS_ASSERT(0) ;
23060 return VOS_STATUS_E_FAULT;
23061 }
23062
23063 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
23064 sizeof(WDI_WifiConfigSetReqType));
23065 if(NULL == pwdiWifConfigSetReqParams)
23066 {
23067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23068 "%s: VOS MEM Alloc Failure", __func__);
23069 VOS_ASSERT(0);
23070 vos_mem_free(pwdaWificonfig);
23071 return VOS_STATUS_E_NOMEM;
23072 }
23073
23074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
23075 if(NULL == pWdaParams)
23076 {
23077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23078 "%s: VOS MEM Alloc Failure", __func__);
23079 VOS_ASSERT(0);
23080 vos_mem_free(pwdiWifConfigSetReqParams);
23081 vos_mem_free(pwdaWificonfig);
23082 return VOS_STATUS_E_NOMEM;
23083 }
23084 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
23085 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
23086 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
23087 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
23088
23089 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053023090 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053023091 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
23092
23093 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
23094 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
23095 pWdaParams);
23096 if(IS_WDI_STATUS_FAILURE(wstatus))
23097 {
23098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23099 "Failure in sendind WifiConfigReq, free all the memory" );
23100 status = CONVERT_WDI2VOS_STATUS(wstatus);
23101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23102 vos_mem_free(pWdaParams->wdaMsgParam);
23103 vos_mem_free(pWdaParams);
23104 }
23105
23106 return status;
23107
23108}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023109
23110#ifdef FEATURE_OEM_DATA_SUPPORT
23111/*
23112 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
23113 * Request to WDI.
23114 */
23115VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
23116 tOemDataReqNewConfig *pOemDataReqNewConfig)
23117{
23118 VOS_STATUS status = VOS_STATUS_SUCCESS;
23119 WDI_Status wstatus;
23120 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
23121
23122 /* Sanity Check*/
23123 if(NULL == pOemDataReqNewConfig)
23124 {
23125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23126 "%s: pOemDataReqNewConfig received NULL", __func__);
23127 VOS_ASSERT(0) ;
23128 return VOS_STATUS_E_FAULT;
23129 }
23130
23131 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
23132 sizeof(WDI_OemDataReqNewConfig));
23133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23134 "------> %s " ,__func__);
23135
23136 if(NULL == wdiOemDataReqNewConfig)
23137 {
23138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23139 "%s: VOS MEM Alloc Failure", __func__);
23140 VOS_ASSERT(0);
23141 vos_mem_free(pOemDataReqNewConfig);
23142 return VOS_STATUS_E_NOMEM;
23143 }
23144
23145 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
23146 sizeof(WDI_OemDataReqNewConfig));
23147
23148 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
23149
23150 if (WDI_STATUS_PENDING == wstatus)
23151 {
23152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23153 FL("pending status received "));
23154 }
23155 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
23156 {
23157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23158 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023159 }
23160
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053023161 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023162 vos_mem_free(pOemDataReqNewConfig);
23163
23164 return status;
23165}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023166
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023167void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
23168 void *pUserData)
23169{
23170 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
23171 (tSirAntennaDiversitySelectionInfo *)pUserData;
23172
23173 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
23174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23175 "<------ %s " ,__func__);
23176 if (NULL == pAntennaDivSelInfo)
23177 {
23178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23179 "%s: pWdaParams received NULL", __func__);
23180 VOS_ASSERT(0) ;
23181 return ;
23182 }
23183 if (NULL == resParams)
23184 {
23185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23186 "%s: resParams received NULL", __func__);
23187 VOS_ASSERT(0) ;
23188 return ;
23189 }
23190
23191 if (pAntennaDivSelInfo->callback)
23192 {
23193 if (WDI_STATUS_SUCCESS == status)
23194 {
23195 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
23196 pAntennaDivSelInfo->data);
23197 }
23198 else
23199 {
23200 pAntennaDivSelInfo->callback(-1,
23201 pAntennaDivSelInfo->data);
23202 }
23203 }
23204
23205 vos_mem_free(pUserData);
23206 return;
23207}
23208
23209/*
23210 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
23211 * Request to WDI.
23212 */
23213v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
23214 tSirAntennaDiversitySelectionReq *pData)
23215{
23216 WDI_Status wdiStatus;
23217 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
23218
23219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23220 "------> %s " , __func__);
23221
23222 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
23223 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
23224 if (NULL == pAntennaDivSelInfo)
23225 {
23226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23227 "%s: VOS MEM Alloc Failure", __func__);
23228 VOS_ASSERT(0);
23229 vos_mem_free(pData);
23230 return;
23231 }
23232
23233 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
23234 pAntennaDivSelInfo->data = pData->data;
23235
23236 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
23237 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
23238
23239 if (WDI_STATUS_PENDING == wdiStatus)
23240 {
23241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23242 "Pending received for %s:%d ", __func__, __LINE__);
23243 }
23244 else if (WDI_STATUS_SUCCESS != wdiStatus)
23245 {
23246 if (pAntennaDivSelInfo->callback)
23247 {
23248 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
23249 }
23250 }
23251
23252 vos_mem_free(pData);
23253 return;
23254}
23255
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053023256/*
23257 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
23258 * Request to WDI.
23259 */
23260VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
23261 tModifyRoamParamsReqParams *params)
23262{
23263 WDI_Status status;
23264
23265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23266 FL("---> %s"), __func__);
23267
23268 if (NULL == params)
23269 {
23270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23271 FL("tModifyRoamParamsReqParams is received NULL"));
23272 return VOS_STATUS_E_NOMEM;
23273 }
23274
23275 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
23276 if (WDI_STATUS_PENDING == status)
23277 {
23278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23279 FL("pending status received "));
23280 }
23281 else if (WDI_STATUS_SUCCESS_SYNC != status)
23282 {
23283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23284 FL("Failure status %d"), status);
23285 }
23286 vos_mem_free(params);
23287 return CONVERT_WDI2VOS_STATUS(status) ;
23288}
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023289#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053023290/*
23291 * WDA_CapTsfRspCb : handle response for tsf requests
23292 * @wdi_rsp : Response from WDI for tsf requests
23293 * @user_data: pointer to user data
23294 * Returns: None
23295 */
23296void WDA_CapTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23297{
23298
23299 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23300 tSirCapTsfParams *cap_tsf_params;
23301 struct stsf *stsf_temp;
23302 VOS_STATUS status;
23303
23304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23305 "<------ %s " ,__func__);
23306
23307 if (NULL == wda_params) {
23308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23309 "%s: pWdaParams received NULL", __func__);
23310 VOS_ASSERT(0);
23311 return;
23312 }
23313
23314 if (NULL == wda_params->wdaMsgParam) {
23315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23316 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23317 VOS_ASSERT(0);
23318 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23319 vos_mem_free(wda_params);
23320 return;
23321 }
23322
23323 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23324 if (NULL == stsf_temp) {
23325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23326 "%s: Unable to allocate tsf struct", __func__);
23327 VOS_ASSERT(0);
23328 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23329 vos_mem_free(wda_params->wdaMsgParam);
23330 vos_mem_free(wda_params);
23331 return;
23332 }
23333 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23334 stsf_temp->session_id = cap_tsf_params->bss_idx;
23335 stsf_temp->set_tsf_req = true;
23336 stsf_temp->tsf_req_status = wdi_rsp->status;
23337
23338 if (cap_tsf_params->tsf_rsp_cb_func) {
23339 cap_tsf_params->tsf_rsp_cb_func (
23340 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23341 }
23342 else {
23343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23344 "%s: tsf callback is NULL", __func__);
23345 vos_mem_free(stsf_temp);
23346 }
23347 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23348 if (status) {
23349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23350 "%s: Capture TSF failed with status=%d", __func__,
23351 status);
23352 VOS_ASSERT(0);
23353 }
23354 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23355 vos_mem_free(wda_params->wdaMsgParam);
23356 vos_mem_free(wda_params);
23357 return;
23358}
23359
23360/*
23361 * WDA_GetTsfRspCb : handle response for get tsf request
23362 * @wdi_rsp : Response from WDI for tsf requests
23363 * @user_data: pointer to user data
23364 * Returns: None
23365 */
23366void WDA_GetTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23367{
23368
23369 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23370 tSirCapTsfParams *cap_tsf_params;
23371 struct stsf *stsf_temp;
23372 VOS_STATUS status;
23373
23374 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23375 "<------ %s " ,__func__);
23376
23377 if (NULL == wda_params) {
23378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23379 "%s: pWdaParams received NULL", __func__);
23380 VOS_ASSERT(0);
23381 return;
23382 }
23383
23384 if (NULL == wda_params->wdaMsgParam) {
23385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23386 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23387 VOS_ASSERT(0);
23388 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23389 vos_mem_free(wda_params);
23390 return;
23391 }
23392
23393 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23394 if (NULL == stsf_temp) {
23395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23396 "%s: Unable to allocate tsf struct", __func__);
23397 VOS_ASSERT(0);
23398 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23399 vos_mem_free(wda_params->wdaMsgParam);
23400 vos_mem_free(wda_params);
23401 return;
23402 }
23403 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23404 stsf_temp->session_id = cap_tsf_params->bss_idx;
23405 /* Indicate to upper layer that this is a get request */
23406 stsf_temp->set_tsf_req = false;
23407 stsf_temp->tsf_low = wdi_rsp->tsf_lo;
23408 stsf_temp->tsf_high = wdi_rsp->tsf_hi;
23409 stsf_temp->tsf_req_status = wdi_rsp->status;
23410
23411 if (cap_tsf_params->tsf_rsp_cb_func) {
23412 cap_tsf_params->tsf_rsp_cb_func (
23413 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23414 }
23415 else {
23416 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23417 "%s: tsf callback is NULL", __func__);
23418 vos_mem_free(stsf_temp);
23419 }
23420 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23421 if (status) {
23422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23423 "%s: Capture TSF failed with status=%d", __func__,
23424 status);
23425 VOS_ASSERT(0);
23426 }
23427 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23428 vos_mem_free(wda_params->wdaMsgParam);
23429 vos_mem_free(wda_params);
23430 return;
23431}
23432/*
23433 * FUNCTION: WDA_ProcessCapTsfReq
23434 * Send capture tsf request to FW.
23435 */
23436VOS_STATUS WDA_ProcessCapTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23437{
23438 WDI_Status status = WDI_STATUS_SUCCESS;
23439 wdi_cap_tsf_params_t *pWDICapTsfReqType;
23440 tWDA_ReqParams *pWdaParams ;
23441
23442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23443 "<------ %s " ,__func__);
23444 if(NULL == params)
23445 {
23446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23447 "%s: cap tsf params NULL", __func__);
23448 VOS_ASSERT(0) ;
23449 return -EINVAL;
23450 }
23451
23452 pWDICapTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23453 sizeof(*pWDICapTsfReqType));
23454 if(NULL == pWDICapTsfReqType)
23455 {
23456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23457 "%s: VOS MEM Alloc Failure", __func__);
23458 VOS_ASSERT(0);
23459 vos_mem_free(params);
23460 return VOS_STATUS_E_NOMEM;
23461 }
23462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(*pWdaParams)) ;
23463 if(NULL == pWdaParams)
23464 {
23465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23466 "%s: VOS MEM Alloc Failure", __func__);
23467 VOS_ASSERT(0);
23468 vos_mem_free(pWDICapTsfReqType);
23469 vos_mem_free(params);
23470 return VOS_STATUS_E_NOMEM;
23471 }
23472
23473 pWDICapTsfReqType->bss_idx = params->bss_idx;
23474 pWDICapTsfReqType->capTSFget = CAP_TSF_REQUEST;
23475
23476 pWdaParams->pWdaContext = pWDA;
23477 pWdaParams->wdaMsgParam = params;
23478 pWdaParams->wdaWdiApiMsgParam = (void *)pWDICapTsfReqType;
23479
23480 status = wdi_process_cap_tsf_req(pWDICapTsfReqType,
23481 (wdi_tsf_rsp_cb)WDA_CapTsfRspCb,
23482 pWdaParams);
23483
23484 if(IS_WDI_STATUS_FAILURE(status))
23485 {
23486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23487 "Failure in sendind WifiConfigReq, free all the memory" );
23488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23489 vos_mem_free(pWdaParams->wdaMsgParam);
23490 vos_mem_free(pWdaParams);
23491 vos_mem_free(params);
23492 }
23493 return CONVERT_WDI2VOS_STATUS(status) ;
23494}
23495
23496/*
23497 * FUNCTION: WDA_ProcessGetTsfReq
23498 * Send capture tsf request to FW.
23499 */
23500VOS_STATUS WDA_ProcessGetTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23501{
23502 WDI_Status status = WDI_STATUS_SUCCESS;
23503 wdi_cap_tsf_params_t *pWDIGetTsfReqType;
23504 tWDA_ReqParams *pWdaParams ;
23505
23506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23507 "<------ %s " ,__func__);
23508 if(NULL == params)
23509 {
23510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23511 "%s: cap tsf params NULL", __func__);
23512 VOS_ASSERT(0) ;
23513 return VOS_STATUS_E_INVAL;
23514 }
23515
23516 pWDIGetTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23517 sizeof(wdi_cap_tsf_params_t));
23518 if(NULL == pWDIGetTsfReqType)
23519 {
23520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23521 "%s: VOS MEM Alloc Failure", __func__);
23522 VOS_ASSERT(0);
23523 vos_mem_free(params);
23524 return VOS_STATUS_E_INVAL;
23525 }
23526 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
23527 if(NULL == pWdaParams)
23528 {
23529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23530 "%s: VOS MEM Alloc Failure", __func__);
23531 VOS_ASSERT(0);
23532 vos_mem_free(pWDIGetTsfReqType);
23533 vos_mem_free(params);
23534 return VOS_STATUS_E_NOMEM;
23535 }
23536
23537 pWDIGetTsfReqType->bss_idx = params->bss_idx;
23538 /* Indicate that this is a get request */
23539 pWDIGetTsfReqType->capTSFget = GET_TSF_REQUEST;
23540
23541 pWdaParams->pWdaContext = pWDA;
23542 pWdaParams->wdaMsgParam = params;
23543 pWdaParams->wdaWdiApiMsgParam = (void *)pWDIGetTsfReqType;
23544
23545 status = wdi_process_get_tsf_req(pWDIGetTsfReqType,
23546 (wdi_tsf_rsp_cb)WDA_GetTsfRspCb,
23547 pWdaParams);
23548
23549 if(IS_WDI_STATUS_FAILURE(status))
23550 {
23551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23552 "Failure in sendind WifiConfigReq, free all the memory" );
23553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23554 vos_mem_free(pWdaParams->wdaMsgParam);
23555 vos_mem_free(pWdaParams);
23556 vos_mem_free(params);
23557 }
23558 return CONVERT_WDI2VOS_STATUS(status) ;
23559}